실습 과제
#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 |