이번 프로젝트는 라즈베리파이에서 LED와 버튼을 활용하여 LED 기억력 도전 게임을 만드는 프로젝트입니다.
구현조건
- 게임이 시작하면, 세 개의 LED가 임의의 순서로 한 번씩 점등됨
- LED 점등 시간은 1초로 함. - LED의 점등이 끝나면, 점등된 순서에 맞게 버튼을 입력해야 함.
- 버튼 입력을 확인하기 위해, 버튼 입력 시 해당하는 LED를 0.5초 점등시킴.
- 0.5초 점등되는 동안에는 다른 버튼은 입력 받을 수 없음. - 버튼 입력 순서가 올바르면, 성공 표시 LED를 3번 점등하고, 게임을 종료함.
- 그렇지 않으면 실패 표시 LED를 3번 점등하고 게임을 종료함.
회로도
- LED 1 : GPIO 26(37) / LED 2 : GPIO 19(35) / LED 3 : GPIO 13(33)
- 성공 표시 LED : GPIO 6(31) / 실패 표시 LED : GPIO 5(29)
- Button 1 : GPIO16(36) / Button 2 : GPIO20(38) / Button 3 : GPIO21(40)
wiringledgame.c 파일을 만들어 코드를 작성해보겠습니다.
#include <wiringPi.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define Button1 27 /* GPIO16 */
#define Button2 28 /* GPIO20 */
#define Button3 29 /* GPIO21 */
#define LED1 25 /* GPIO26 */
#define LED2 24 /* GPIO19 */
#define LED3 23 /* GPIO13 */
#define SLED 22/* GPIO6 */
#define FLED 21 /* GPIO5 */
int switchControl( )
{
int i;
int random[3];
int cnt=0;
int scnt=0;
int fcnt=0;
srand(time(NULL));
pinMode(Button1, INPUT);
pinMode(Button2, INPUT);
pinMode(Button3, INPUT);
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
pinMode(LED3, OUTPUT);
pinMode(SLED, OUTPUT);
pinMode(FLED, OUTPUT);
for(i=0;i<3;i++)
{
random[i] = rand()%3;
if(random[i]==0)
{
digitalWrite(LED1, HIGH);
delay(1000);
digitalWrite(LED1, LOW);
delay(500);
}
else if(random[i]==1)
{
digitalWrite(LED2, HIGH);
delay(1000);
digitalWrite(LED2, LOW);
delay(500);
}
else if(random[i]==2)
{
digitalWrite(LED3, HIGH);
delay(1000);
digitalWrite(LED3, LOW);
delay(500);
}
}
printf("start game\n");
for (;;)
{
if(digitalRead(Button1) == LOW)
{
digitalWrite(LED1, HIGH);
delay(500);
digitalWrite(LED1, LOW);
if(random[cnt]==0)
{
scnt++;
cnt++;
}
else
{
fcnt++;
cnt++;
}
printf("%d %d %d\n",scnt,fcnt,cnt);
}
else if(digitalRead(Button2) == LOW)
{
digitalWrite(LED2, HIGH);
delay(500);
digitalWrite(LED2, LOW);
if(random[cnt]==1)
{
scnt++;
cnt++;
}
else
{
fcnt++;
cnt++;
}
printf("%d %d %d\n",scnt,fcnt,cnt);
}
else if(digitalRead(Button3) == LOW)
{
digitalWrite(LED3, HIGH);
delay(1000);
digitalWrite(LED3, LOW);
if(random[cnt]==2)
{
scnt++;
cnt++;
}
else
{
fcnt++;
cnt++;
}
printf("%d %d %d\n",scnt,fcnt,cnt);
}
if(cnt==3)
break;
}
if(scnt == 3)
{
for(int i=0;i<3;i++)
{
digitalWrite(SLED, HIGH);
printf("you win");
delay(1000);
digitalWrite(SLED, LOW);
}
}
else if(scnt != 3)
{
for(int i=0;i<3;i++)
{
digitalWrite(FLED, HIGH);
printf("you lose");
delay(1000);
digitalWrite(FLED, LOW);
}
}
return 0;
}
int main(int argc, char **argv)
{
wiringPiSetup( );
switchControl( ); /* 스위치 사용을 위한 함수 */
return 0;
}
코드를 작성하였다면 gcc를 이용해 컴파일하고 실행시켜보겠습니다.
pi@raspberrypi:~ $ gcc -o wiringsledgame wiringledgame.c -lwiringPi
pi@raspberrypi:~ $ sudo ./wiringswitch
위의 명령어를 통해 프로그램을 실행 시킬 수 있습니다.
'Project > Embedded Project' 카테고리의 다른 글
충돌 위험 신호 시스템 프로젝트 (0) | 2023.12.26 |
---|