Table of Contents

Arduino Uno-based controller development

1602 LCD 키패드 실드 테스트

알리익스프레스에서 구입한 실드에 핀헤더를 납땜하였다. 보드 아랫쪽에는 핀 설명이 인쇄되어 있지만 윗쪽 7개 핀은 그렇지 않다.

LCD 및 저항 사다리를 통한 버튼 스위치(4개 방향키 + OK + Reset = 6개)를 위해 쓰인 핀을 제외하면 A1-A5, D0, D1, D2, D3, D11, D12 그리고 D13을 I/O 용도로 사용할 수 있다. 버튼 누름 신호는 A0을 통해 입력된다.

이 실드의 작동 테스트용 코드는 여기에서 입수하였다. Arduino IDE 2.3.8에서 업로드하니 잘 작동하였다.

Sketch uses 2344 bytes (7%) of program storage space. Maximum is 32256 bytes.
Global variables use 167 bytes (8%) of dynamic memory, leaving 1881 bytes for local variables. Maximum is 2048 bytes.

UNO ↔ Pi 직렬 통신 개통

간단한 파이썬 스크립트(pi_button_monitory.py)를 이용하여 Pi가 UNO에게 보내는 메시지를 UNO가 1602 LCD에 표시하도록 하고, 반대로 UNO의 버튼 입력을 Pi의 터미널 창에 표시하게 하였다(SELECT 버튼의 long press 포함). 가급적 TFT-LCD에서 많은 상태 정보를 표시하고 싶었으나, SSH가 끊어지거나 또는 전혀 반응하지 않는 일이 생겨서 일단 TFT-LCD는 쓰지 않고 개발을 이어가기로 하였다. TFT-LCD를 쓰지 않으니 SSH가 끊어지는 일은 발생하지 않았다.

이렇게 정보가 가득한 화면을 보는 것은 잠시 미루기로 한다.

몇 가지 해결해야 할 문제가 있다.

장치 이름으로 시리얼 디바이스 찾아 연결하기

ls -l /dev/serial/by-id/
usb-Arduino__www.arduino.cc__Arduino_Uno_123456-if00 -> ../../ttyACM1
# Python 코드 안에서 다음과 같이 포트 지정
PORT = "/dev/serial/by-id/usb-Arduino__www.arduino.cc__Arduino_Uno_123456-if00"

이번 개발 과정과 관련한 ChatGPT 대화 기록.

처음으로 소리를 내 보기

USB audio interface(Behringer UCA 200)과 USB MIDI keyboard controller(Akai MPK Mini MkII)를 연결한 상태에서 라즈베리파이를 부팅한 뒤 fluidardule_state_stage7c_autodac_bootsafe.py를 실행하면 다음을 순차적으로 실행한다.

  1. 아두이노 우노와 시리얼 통신 수립
  2. USB DAC가 연결된 것을 확인하고 FluidSynth 실행(SalC5Light2.sf2)
  3. 건반을 두드리면 소리가 남
  4. A2에 연결된 pot은 볼륨(CC7)

현재 아두이노 UNO에는 1602 LCD + 키패드 모듈과 pot만 연결된 상태이다. Select 버튼을 길게 누르면 halt/reboot 메뉴로 들어가며, 이 기능이 잘 작동하는 것까지 확인하였다.

작업 기록(블로그)