lcd : https://youtu.be/hY2Z0OeGPKo
조이스틱 : https://youtu.be/ahcS8ZjIJpE
피에조부저 : https://youtu.be/5SEfTPpJIYs
유투브 : https://youtu.be/w2uF9qznJw0
안녕하세요 이번시간에는 아두이노로 만드는
lcd 게임 프로젝트를 소개하겠습니다.
다른 프로젝트와 비교했을 때
기초가 없다면 조금 어려울 수 있으니
반드시 유튜브 보시고 다시 와주세요~!

먼저 실행 영상부터 보겠습니다.!
준비물
아두이노 우노 보드, 조이스틱, 빵판
수동 피에조부저, i2c 지원 lcd, 케이블(전선)
준비물 준비해주시고 먼저 조이스틱, lcd, 피에조부저를 모두
아두이노와 연결하겠습니다. 회로도와 전체 코드는 유튜브에 있습니다.
연결하실 때 아두이노의 5v와 gnd를 빵판을 이용해서 확장 하시면
완성하실 수 있습니다. 회로를 구성했으면 코드를 살펴보겠습니다.
몇가지 게임의 조건이 있는데요
- 주인공 0는 장애물 x를 조이스틱의 조작대로 피한다.
- 만일 x에 맞으면 부저에서 소리와 함께 life가 1 차감된다.
- 주인공은 미사일을 발사할 수 있으며 이 때도 소리가 난다.
- 미사일이 x를 맞추면 x가 없어진다.
- 만일 3번의 기회를 모두 써버리면 "GAME OVER"를 출력한다.
- 게임이 진행된 시간을 화면에 함께 출력한다.
이 조건을 만족하는 코드 한번 구상해보겠습니다.
먼저 lcd 사용을 위한 코드 입니다.
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
그 다음 필요한 변수를 선언해야 합니다.
- 조이스틱의 좌표를 받아올 int형 x, y, z
- 남은 생명력을 표현할 int형 life
- 장애물 x의 좌표 int형 villainX, villainY
- 발사하는 미사일의 좌표 int형 missileX, missileY
int x,y,z;
int life=3;
int heroX=0;
int heroY=0;
int villainX=14;
int villainY=0;
int missileX;
int missileY;
setup에서 해야 할 일은
- 조이스틱의 z좌표를 받아올 8번 핀 input_pullup 모드
- 피에조부저를 제어할 7번 핀 output
- lcd 사용을 위한 lcd.init(). lcd.baclingt()
- 장애물 x의 y좌표를 랜덤으로 만들기 위한 randomSeed(); 입니다.
void setup()
{
pinMode(8, INPUT_PULLUP);
pinMode(7,OUTPUT);
lcd.init();
lcd.backlight();
randomSeed();
}
특히 마지막 randomseed는 후에 장애물 x의 y좌표를
랜덤으로 생성할 때 사용됩니다.
이 때 random(0,2);를 사용하게 되는데요
random(a,b);
a에서 b-1사이의 임의의 값 출력
random(0,2)를 하면 0과 1중 값이 랜덤으로 출력됩니다.
예제 코드를 보실까요? 0~10까지 숫자 중
랜덤으로 숫자가 출력됩니다.
int a;
void setup() {
Serial.begin(9600);
}
void loop() {
a = random(0,11);
Serial.println(a);
delay(500);
}
결과도 영상으로 함께 보겠습니다.
결과 영상도 함께 보세요
10, 1, 0, 6, 8, 3
이렇게 출력이 됩니다.
그런데 아두이노 랜덤 함수의 큰 문제가
하나 있는데요 랜덤이긴 한데
아두이노를 재시작하면 새롭게
랜덤으로 출력되는 것이 아니고
10, 1, 0, 6, 8, 3이라는 숫자가
반복해서 출력됩니다.
영상으로 확인하시겠습니다.
코드를 다시 올렸음에도 불구하고
출력되는 숫자가 같습니다.
최초 한번만 랜덤이 형성되고
그 다음부터는 계속 같은
숫자가 출력되는데 이를 해결하기 위해서
randomseed()를 사용합니다.
시작될때 randomseed에 무작위 값을
주어 매번 다른 진짜 random 값을 얻기 위함입니다.
randomseed의 자세한 설명은 유튜브를 참고해주세요!
유투브 : https://youtu.be/w2uF9qznJw0
현재까지 코드 정리하겠습니다.
#include <LiquidCrystal_I2C.h>
#include <Wire.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int x,y,z;
int life=3;
int heroX=0;
int heroY=0;
int villainX=14;
int villainY=0;
int missileX;
int missileY;
void setup()
{
pinMode(8, INPUT_PULLUP);
pinMode(7,OUTPUT);
lcd.init();
lcd.backlight();
randomSeed();
}
loop의 기본 구조는 life가 0초과일 때
계속 반복을 하고 0이면 게임을 끝내면서
GAME OVER를 출력합니다.
따라서 loop의 기본 구조는 아래와 같습니다.
void loop()
{
if(life>0)
{
}
else
{
}
}
loop의 코드는 2편에서 이어서 공부하겠습니다.

'아두이노 프로젝트' 카테고리의 다른 글
아두이노로 만드는 lcd게임 part2(★★★) (0) | 2023.10.23 |
---|---|
아두이노 프로젝트 - lcd, joystick 게임(★★★★) (0) | 2023.10.23 |
직류 RC회로 충전과 방전, 시상수 그래프 그리기(★★★★★) (0) | 2023.10.23 |
아두이노로 만드는 피아노와 연주녹음(★★★) (0) | 2023.10.23 |
블루투스로 온도계와 lcd연결하기(★★★★★) (0) | 2023.10.23 |