loop함수에 들어가기 이전에
아두이노가 시작을 하는 단계 또는 실패/성공 이후에 전체 LED를 켜고 음을 "도레미파솔라시도, 도시라솔파미레도"로 오가는 효과를 함수로 만들어 보자.
void off_led(){ // 모든 불을 끄는 함수
for (int i=0; i<4; i++) digitalWrite(led[i], LOW);
}
void on_led(){ // 모든 불을 켜는 함수
for (int i=0; i<4; i++) digitalWrite(led[i], HIGH);
}
void tone_up(){ // 도레미파솔라시도를 재생
for (int i=0; i < 8; i++) //note를 play
{
tone(sPin,note[i],500);
delay(100);
}
}
void tone_down(){ // 도시라솔파미레도를 재생
for (int i=7; i >= 0; i--) //note를 play
{
tone(sPin,note[i],500);
delay(100);
}
}
이 부분을 수행하기 위하여 이 전체를 부르는 함수를 정의해 보자
void reset_all(){ // 모든 변수를 실행 초기값으로 돌리는 함수
stage=0; // 시작 전임을 알림
for (int i=0; i<10; i++) num[i]=-1; // 순서에 아무런 데이터도 없음
on_led(); // LED를 켠다
tone_up(); // 도레미파솔라시도를 재생
delay(500);
off_led(); // LED를 끈다.
delay(300);
on_led(); // LED를 켠다
tone_down(); // 도시라솔파미레도를 재생
delay(500);
off_led(); // LED를 끈다.
delay(1000);
}
이 부분이 수행된 동영상은 다음과 같다.
아직 전체 부분이 합쳐지지 않은 것이니 그냥 저 부분이 수행되면 저런 효과가 난다는 것만 알면 된다.
만일 실패할 경우 나타내는 효과를 만들기 위하여 다음의 함수를 사용할 것이다.
void fail_sign(){
for (int i=0; i<5;i++){ // 5번에 걸쳐서 실행
digitalWrite(led[1], HIGH); // 1번 LED를 켠다.
tone(sPin,note[2],300); // '미'에 해당하는 음 재생
delay(200);
digitalWrite(led[1], LOW); // 1번 LED를 끄고
digitalWrite(led[2], HIGH); // 2번 LED를 켠다
tone(sPin,note[0],300); // '도'에 해당하는 음 재생
delay(200);
digitalWrite(led[2], LOW); // 2번 LED를 켠다.
}
}
이 부분의 영상은 다음과 같다.
내가 버튼을 잘 못 눌러서 노란색과 붉은색이 번갈아 켜지는 부분이 바로 위의 코드가 실행된 부분이다.
여기까지는 비교적 이해가 어렵지 않은 부분이었다.
다음 강좌에서 실제로 게임을 하기 위한 코드를 배우고 만들어 보자.