실습 과제 

 

 

#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

#define PIN_PIEZO 10
#define PIN_SWITCH 8 // 버튼 8번 핀에 연결하기 
#define T 200 // 16분 음표 길이
#define DB_WAIT 20 // 디바운싱을 위해 대기 시간 

void setup() {
  pinMode(PIN_PIEZO, OUTPUT);
  pinMode(PIN_SWITCH, INPUT_PULLUP);
  Serial.begin(9600);
  printMsg("\rWelcome to John's JukeBox"); // 환영 메세지 출력
}

int Notes[] = { NOTE_C4, NOTE_D4, NOTE_E4, NOTE_F4, NOTE_G4, NOTE_A4, NOTE_B4, NOTE_C5 };
String NoteStr[] = { "Do", "Re", "Mi", "Fa", "Sol", "La", "Si", "Do5" };

void play_note(int n, int d) {
  Serial.print(NoteStr[n] + " ");
  int duration = T * d; // 지속시간 
  tone(PIN_PIEZO, Notes[n], duration - T * 0.1);
  delay(duration);
}

int airplane_note[] = {2,1,0,1,2,2,2,1,1,1,2,2,2,2,1,0,1,2,2,2,1,1,2,1,0}; 
int airplane_duration[] = {3,1,2,2,2,2,4,2,2,4,2,2,4,3,1,2,2,2,2,4,2,2,2,2,4}; 
int airplane_N = 25;

// 비행기 노래 출력 함수 
void play_airplane() {
  
  for (int i = 0; i < airplane_N; i++) {
    play_note(airplane_note[i], airplane_duration[i]);
  }
}

// 메세지 출력 함수 
void printMsg(char *str){
  Serial.print("\r     ");
  Serial.print(str);
}
// blink 함수 
void blink(){
for(int i=0;i<3;i++){
         digitalWrite(13,HIGH);
         delay(1000);
         digitalWrite(13,LOW);
         delay(1000); 
      }
}
int state=0; //상태 변수 
void loop() {
  switch(state){
    case 0: // 기능 1 안내
      printMsg("\rPlay music?");
      state=1; break;

    case 1: // 기능 1 실행 
      while(digitalRead(8)==HIGH); // 버튼이 눌리지 않은 경우 아무것도 실행하지 않는다 
      printMsg("\rPlay Music....");
      play_airplane(); // 노래 출력 
      state=2; break; 

    case 2: // 기능 2 안내
     printMsg("\rBlink the Light?");
     state=3; break; 

    case 3:
      while(digitalRead(8)==HIGH) ; 
      printMsg("\rBlink LED....");
      blink(); 
      state=0; break; 

    default: break; 
  }
  
}

 

'임베디드 시스템' 카테고리의 다른 글

5장 인터럽트와 millis  (0) 2024.06.16
3. 아두이노 기본 클래스  (0) 2024.06.04
2. 아두이노 소개  (2) 2024.06.04

+ Recent posts