brunch

You can make anything
by writing

C.S.Lewis

by Cylogic Aug 24. 2020

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

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

오늘 만들 장난감은 4개의 LED가 한 개에서 열개까지 순서대로 켜지면 이를 기억하고 LED에 해당하는 버튼을 순서대로 누르면 성공하는 장난감이다. 

성공하면 성공에 해당하는 불빛과 음악이 나오고 실패하면 실패에 해당하는 불빛과 음악이 나오게 된다.


이해를 돕기 위해 실제 장난감으로 게임하는 동영상을 미리 보고 시작하자.

여섯 번 만에 실패하는 게임 플레이 영상


동영상을 보면 이해가 가시겠지만, 아두이노가 임의의 LED 램프를 하나씩 추가하여 켜고 게임 플레이어는 이를 따라 해야 한다. 10개의 불이 켜질 때까지 따라 하면 성공이고, 그 이하에서 순서를 틀리면 게임이 다시 시작하게 된다. 이 게임을 차후에 LCD 디스플레이에서 그 성공, 실패의 전적들을 보여주는 추가 기능을 넣을 것이므로 잘 살펴보고 만들어 보면 좋을 것이다.


작은 만능 기판에 부품을 콤팩트 하게 넣고 3D 프린터로 케이스를 만드는 작업까지를 차후에 보여줄 예정이다.


이 장난감은 회로를 꾸미고 만드는 것은 어렵지 않으나 게임 구동을 위한 알고리즘(계산 또는 실행의 방법)이 초보자에게 쉬운 내용이 아니다. 그래서 하나의 장난감을 몇 회에 나누어 설명하도록 하겠다.


먼저 이번 시간에는 회로를 설계해 보자.


우리에게 필요한 부품은 

아두이노와 브레드 보드

패시브 부저

LED 4개 그리고 그에 연결된 220옴 저항 4개

버튼스위치 4개 

연결을 위한 전선

이상이다.


회로는 간단히 꾸며지지만 코딩은 쉽지 않다.

기능을 많이 넣어야 하기 때문이다.

하나씩 분리해서 코딩을 이해하는 방법은 각각의 기능을 하나의 함수로 분리하는 방법이다.

이번 장난감을 만들면서는 함수를 만들어가는 과정을 함께 공부하게 된다.



제일 먼저 연결된 각 부붐이 입력부 인지 출력 부 인지를 정의해 줘야 한다. 각 변수의 의미를 한글 번역본(^^)으로 함께 첨부한다.


#define sPin 7  // 스피커를 7번 핀에 연결하기 위한 정의


int led[4]={3, 13, 4, 12};  // LED4개를 각각 3, 13, 4, 12 에 연결

int btn[4]={5, 11, 6, 10};  // 버튼스위치를 5, 11, 6, 10에 연결

int note[] = {261,293,329,349,392,440,493,523}; // 음 주파수

int num[10]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1}; // 불켜지는 순서

int stage=0;  // 몇 번째 순서 인지 추적


void setup() {

  Serial.begin(9600);

  for (int i=0; i<4; i++) pinMode(led[i], OUTPUT); // LED 정의

  for (int i=0; i<4; i++) pinMode(btn[i], INPUT_PULLUP); // 스위치 정의

  pinMode(sPin, OUTPUT); // 스피커 정의

  reset_all();   // 이 부분은 함수로 별도로 정의 한다.

  randomSeed(analogRead(0)); // random 함수를 새로 시작하기 위한 방법 

}


프로그램을 잘하려면 데이터에 대한 정의를 잘해야 한다.

그래서 자료 구조론(data structure)을 가장 중요한 프로그램 공부의 기초 과목으로 꼽는다. 

이 프로그램에서 그리 대단한 자료 구조가 나오지는 않지만, 같은 종류의 데이터를 같은 형식의 변수에 정의하는 작업을 하는 것이 몹시 중요한 것이라는 것을 알려주고 싶다.

LED, 스위치, 음 주파수, LED 켜지는 순서 등 모든 것을 하나의 자료 구조 안으로 집어넣는 방법이 바로 하나의 배열에서 이를 정의해 주는 것이다. 더 자세한 내용은 코딩 관련 자료에서 좀 더 자세히 설명하겠다.


어찌 되었건 회로에 구성된 부품 관련 정의를 setup() 함수를 통하여 끝냈다.

구성된 회로와 하나씩 비교해 보면 그 의미를 알 수 있을 것이다.


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