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

  }

}


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

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

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


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

매거진의 이전글 18. 네 번째 장난감:나 따라 하기1- 빛과 소리
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari