원형 네오픽셀의 불이 켜지는 위치를 무작위로 정할 수 있음을 이용하여 간단한 룰렛을 만들어 보려고 한다. 이름을 룰렛으로 붙여 도박장 분위기가 나지만 실제로는 디지털 주사위를 만든 것과 같을 것이다.
아래처럼 네오픽셀을 보드에 붙이고 글자를 써두면 주사위의 역할을 할 수도 있고, 점심 먹고 아이스크림 사기의 사다리 대용으로도 이용할 수 있을 것이다.
각각의 영역에 해당하는 2개의 불 또는 3개의 불이 켜지면 해당 주사위에 걸린 것으로 하거나, 아이스크림을 사면 된다 ^^
간단히 회로를 구성해 보면
네오픽셀은 6번 핀에 연결하고,
부저는 4 번핀,
스위치는 2 번핀,
LED는 8번 핀에 연결하였다.
게임이 준비되면 LED에 불이 켜지고, 버튼을 누르면 LED는 꺼지고 부저에서 음악이 들리며 네오픽셀의 LED가 원을 그리며 돌다가 임의의 LED가 켜지고 게임이 끝난다.
이 회로를 작은 박스에 집어넣고 버튼, LED, 네오픽셀만 겉면에 드러나게 만들면 "디지털 주사위" 또는 "Decision Maker"의 역할을 하는 장난감으로 사용할 수 있을 것이다.
코드는 아래와 같다.
setup함수에서 다른 부분들은 여러 번 보신 것들이어서 따로 설명할 내용이 없고
randomeSeed 만을 이야기해보자면 random으로 임의의 숫자를 만드는 것은 배웠지만, 같은 내용의 난수가 반복 발생하는 것을 막기 위해 randomSeed 함수를 쓴다. 그러나 실제로는 A0에 가변 저항 같은 부품을 넣어 그때그때 바뀌는 저항 값을 기반으로 난수를 다시 발생하기 위한 코드이다. random을 쓸 경우 습관처럼 사용하게 되고, A0에 변화무쌍한 조도센서 같은 센서를 달아서 새로운 난수를 발생하게 하는 것도 재미있을 것이다.
이전 강좌에서 strip에 받았던 네오픽셀 함수용 변수가 이 예제에서는 pixels로 바뀌었다.
코딩을 만들 때 만드는 사람이 마음대로 만들 수 있다는 것은 이해하고 있을 줄 안다.
loop함수에서
버튼이 눌리면 3회에 걸쳐서 모든 불을 순서대로 켜는 루틴이 나온다.
for (int j=0; j<3; j++){ // LED를 3회 켜기 위한 코드
for(int i=0; i<NUMPIXELS;i++){ // 0번부터 11번까지 12개의 불을 켜기 위한 코드
tone(bPin,note[(j*3+i)%8],100); // 소리를 불이 하나 켜질 때마다 변화하며 재생
r=random(64); // 빨간색 배합 - 임의의 수 255까지 가능
g=random(64); // 초록색 배합 - 임의의 수 255까지 가능
b=random(64); // 파란색 배합 - 임의의 수 255까지 가능
pixels.setPixelColor(i, pixels.Color(r, g, b)); // 컬러를 지정
pixels.show(); // LED 켜기
delay(50); // LED 하나 켜질 때마다 50 / 1000만큼 쉴 것
pixels.setPixelColor(i, pixels.Color(0, 0, 0)); // 해당 LED를 끌 것
}
}
이 작업이 끝나고 나면 모든 LED 불을 끄고, 임의의 한 개의 LED를 켜게 된다.
int lamp=random(NUMPIXELS);
pixels.setPixelColor(lamp, pixels.Color(64, 0, 0));
pixels.show();
이 코드를 실행시키면 아래의 점심내기와 디저트 결정을 위한 동영상처럼 실행이 된다.
아무래도 황 부장이나 김대리가 한번 쏘셔야 할 듯 ^^