brunch

You can make anything
by writing

C.S.Lewis

by Cylogic Aug 24. 2020

19. 네 번째 장난감:나 따라 하기2- 빛과 소리

부저와 LED를 이용한 장난감 + 함수 만들기

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를 켠다.

  }

}


이 부분의 영상은 다음과 같다.

내가 버튼을 잘 못 눌러서 노란색과 붉은색이 번갈아 켜지는 부분이 바로 위의 코드가 실행된 부분이다.

여기까지는 비교적 이해가 어렵지 않은 부분이었다.


다음 강좌에서 실제로 게임을 하기 위한 코드를 배우고 만들어 보자.

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari