Arduino Music Box



#include "pitches.h"

int trig= 8;
int echo= 9;
int led= 13;
int spk= 5;

int melody[]= {
  NOTE_D5, NOTE_D5, NOTE_E5, NOTE_D5, NOTE_G5, NOTE_G5, NOTE_FS5,
  NOTE_D5, NOTE_D5, NOTE_E5, NOTE_D5, NOTE_A5, NOTE_A5, NOTE_G5,
  NOTE_D5, NOTE_D5, NOTE_D6, NOTE_B5, NOTE_G5, NOTE_FS5, NOTE_E5,
  NOTE_C6, NOTE_C6, NOTE_B5, NOTE_G5, NOTE_A5, NOTE_A5, NOTE_G5,
};

int interval[]= {
  1, 1, 2, 2, 1, 1, 4,
  1, 1, 2, 2, 1, 1, 4,
  1, 1, 2, 2, 2, 2, 3,
  1, 1, 2, 2, 1, 1, 4,
};

int playing= 0;
int playEnd= sizeof(melody) / sizeof(int);

void setup() {
  pinMode(trig, OUTPUT);
  pinMode(echo, INPUT);
  pinMode(led, OUTPUT);
  Serial.begin(9600);
}

void loop()
{
  digitalWrite(trig, LOW);
  delayMicroseconds(10);
  digitalWrite(trig, HIGH);
  delayMicroseconds(10);
  digitalWrite(trig, LOW);

  int val= pulseIn(echo, HIGH) * 17 / 100;
  Serial.println(val);

  if(val > 50) {
    //5cm 범위를 벗어나면 LED 점등
    digitalWrite(led, HIGH);
    //음악 연주
    Serial.println(val);
    note(melody[playing], interval[playing] * 200);
    playing++;
    if(playing >= playEnd) playing= 0;
  } else {
    digitalWrite(led, LOW);
    playing= 0;
  }
}

void note(int pitch, int duration) {
  tone(spk, pitch, duration);
  delay(duration * 13 / 10);
  noTone(spk);
}