fluidcanvas_r2pi:fluid_ardule_dev_log_2026-03-25
Table of Contents
Fluid Ardule Development Log
Date
2026-03-25
Overview
오늘은 Fluid Ardule 프로젝트에서 UI 기반 구조 안정화와 상태 동기화 체계 확립을 중심으로 중요한 진전을 이루었다.
특히 Raspberry Pi ↔ Arduino UNO 간의 통신 구조를 실제 운용 가능한 수준으로 끌어올린 것이 핵심 성과이다.
Key Achievements
1. Serial 기반 상태 동기화 구조 확립
- Pi → UNO로 상태 메시지를 지속적으로 전달
- LCD에 실시간 상태 반영 구조 완성
- 주요 상태:
- SoundFont (SF)
- Volume (VOL)
- MIDI 상태
- DAC 상태
2. Heartbeat 기반 연결 감시 (Link Watchdog)
- Pi가 1초마다
HB전송 - UNO에서 일정 시간 미수신 시:
Pi not connected표시- LED 상태 변경
👉 결과:
- Ctrl+C 종료 / 크래시 상황에서도 UI가 정직하게 상태 반영
3. 로그 최적화
- 기존 문제:
- HB 로그가 콘솔을 도배
- 해결:
if line != "HB": log(...)
👉 결과:
- 로그가 “상태 변화 중심”으로 정리됨
- 디버깅 가독성 크게 향상
4. MIDI 안정성 개선 (Safety Reset)
- 키보드 연결/해제 시 발생하던 문제:
- 서스테인 고정 현상
- 해결:
- CC64, CC66, CC67 OFF
- All Notes Off (CC123)
- Reset Controllers (CC121)
👉 결과:
- stuck note 문제 해결
5. USB DAC Strict Detection
- HDMI / 기본 출력 차단
- 특정 장치만 허용:
- O22
- SC-D70
- USB Audio CODEC
👉 결과:
- 의도하지 않은 오디오 출력 방지
6. LED 상태 체계 구현
핀맵:
- D11 → MIDI Activity
- D12 → PLAY 상태
- D13 → MODE 상태
동작:
- Boot / Init / Ready 상태 표시
- MIDI activity pulse
- Keyboard disconnect 시 상태 변화
7. 상태 머신 구조 안정화
상태 흐름:
BOOT → WAIT_AUDIO → WAIT_SYNTH → WAIT_MIDI → READY
특징:
- 각 단계에서 명확한 조건 기반 전이
- 예외 상황 자동 복귀
8. UNO ↔ Pi 역할 분리 확립
UNO:
- UI (LCD + Button + LED)
- 입력 이벤트 생성
Pi:
- 상태 판단
- 오디오 / MIDI 제어
- 시스템 제어
👉 구조적으로 매우 건강한 아키텍처 완성
Design Decisions
1. UI 신뢰성 우선
- “마지막 상태 유지” 대신
- “연결 끊김 명확 표시” 선택
2. Heartbeat 유지, 로그 제거
- 기능 유지
- 가독성 개선
3. Launcher 미사용
- 현재는 CLI 기반 실행
- 디버깅 용이성 우선
Current System Status
현재 시스템은 다음이 가능한 상태:
- 부팅 후 자동 상태 표시
- USB DAC 감지 후 FluidSynth 실행
- MIDI keyboard 자동 연결
- 볼륨 실시간 제어
- 연결 끊김 감지 및 UI 반영
- 안전한 MIDI reset 처리
👉 사실상 사용 가능한 프로토타입 수준 도달
Next Steps
다음 단계에서 진행할 것:
- Home UI 완성
- SF 이름 표시 개선
- VOL 표시 안정화
- Preset 시스템
- 사용자 설정 저장/불러오기
- SoundFont 변경 UI
- MIDI routing 확장
- 외부 모듈 지원
Summary
오늘의 핵심 성과:
- 통신 안정성 확보
- UI 신뢰성 확보
- 로그 품질 개선
- MIDI 안정성 확보
👉 프로젝트가 “실험 단계”에서
👉 “제품 구조 단계”로 넘어간 중요한 전환점
End of document
fluidcanvas_r2pi/fluid_ardule_dev_log_2026-03-25.txt · Last modified: by hyjeong
