본문 바로가기

Dev/C언어

아두이노 피아노 만들기, 음 연주하기

728x90
반응형

오늘은 Arduino Uno 보드로 피아노, 음을 연주해보려 합니다.

 

이 회로는 정말 너무 간단합니다.

 

아두이노 우노 1개, 피에조 부저 1개로 구성되어 있습니다.

 

전원 공급 5V와 음을 출력해주기 위한 핀을 연결했습니다.

 

도레미파솔라시도를 저는 시리얼 모니터로 구현을 했는데요.

 

#define NOTE_C4 262
#define NOTE_D4 294
#define NOTE_E4 330
#define NOTE_F4 349
#define NOTE_G4 392
#define NOTE_A4 440
#define NOTE_B4 494
#define NOTE_C5 523

void setup()
{
  pinMode(10, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  if(Serial.available()>0)
  {
    byte data=Serial.read();
    switch(data)
    {
      case 49:
      {
        tone(10, NOTE_C4, 900); delay(100);
        break;
      }
      case 50:
      {
        tone(10, NOTE_D4, 900); delay(100);
        break;
      }
      case 51:
      {
        tone(10, NOTE_E4, 900); delay(100);
        break;
      }
      case 52:
      {
        tone(10, NOTE_F4, 900); delay(100);
        break;
      }
      case 53:
      {
        tone(10, NOTE_G4, 900); delay(100);
        break;
      }
      case 54:
      {
        tone(10, NOTE_A4, 900); delay(100);
        break;
      }
      case 55:
      {
        tone(10, NOTE_B4, 900); delay(100);
        break;
      }
      case 56:
      {
        tone(10, NOTE_C5, 900); delay(100);
        break;
      }
    }
  }
}

 

특히 이 코드는 키보드의 아스키 코드값을 참고해서 만들었습니다.

 

아스키 코드상 49가 1이구요, 1씩 올라갈 때마다 숫자도 올라갑니다.

 

결국 키보드로 1, 2, 3, 4, 5, 6, 7, 8을 순서대로 누르게 되면 도레미파솔라시도가 순서대로 출력됩니다.

 

코드를 살펴보면 숫자를 입력할 때 엄청 빨리 입력하게 되면 키 인식이 안 될 수 있습니다.

 

왜냐하면 delay를 사용했기 때문에, 0.1초 동안 입력을 받을 수 있는 상태가 아닙니다.

 

약간의 텀을 주고 키를 입력하면 정상적으로 음이 출력됨을 알 수 있습니다.

 

그리고 위 코드는 tinkercad에서 구현했습니다.

 

간혹 5V 전원 선을 빨간색으로 하지 않은 것에 불편하신 점이 있으실까 미리 사과드립니다..^^;;

728x90
반응형

"); wcs_do();