# 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 로그가 콘솔을 도배 - 해결: ```python 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 다음 단계에서 진행할 것: 1. Home UI 완성 - SF 이름 표시 개선 - VOL 표시 안정화 2. Preset 시스템 - 사용자 설정 저장/불러오기 3. SoundFont 변경 UI 4. MIDI routing 확장 - 외부 모듈 지원 --- ## Summary 오늘의 핵심 성과: - 통신 안정성 확보 - UI 신뢰성 확보 - 로그 품질 개선 - MIDI 안정성 확보 👉 프로젝트가 “실험 단계”에서 👉 “제품 구조 단계”로 넘어간 중요한 전환점 --- End of document