?>

Hard Copy World

HCW

HardCopy project

Home > Project >

HardCopy project

게임 메이커: 아두이노 게임기 만들기 PART1 - 하드웨어 제작

페이지 정보

작성자 하드카피 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일15-06-01 02:29 조회155,837회 댓글24건

본문

강좌 시리즈:

  1. 게임 메이커: 아두이노 게임기 만들기 Part1 - 프로젝트 소개, 하드웨어 구성, 테스트 <<<<<
  2. 게임 메이커: 아두이노 게임기 만들기 Part2 - 게임 프로그래밍 준비
  3. 게임 메이커: 아두이노 게임기 만들기 PART3 - 기획 및 기본 구조
  4. 게임 메이커: 아두이노 게임기 만들기 PART4 - 게임 화면 전환
  5. 게임 메이커: 아두이노 게임기 만들기 PART5 - 캐릭터 움직임 구현
  6. 게임 메이커: 아두이노 게임기 만들기 PART6 - 장애물 움직임과 충돌 구현
  7. 게임 메이커: 아두이노 게임기 만들기 PART7 - 총알과 해골 움직임, 마무리

 

아두이노가 대중화 된지 꽤 시간이 지나다보니 아두이노를 이용한 다양한 시도가 있었습니다. 게임도 그 중 하나입니다. 아두이노를 이용한 게임기, 그것도 휴대가 가능한 게임기라면 구미가 당기지 않습니까?

2014년에 미국의 한 메이커가 신용카드 사이즈의 아두이노 게임기를 만들어 주목받은 적이 있습니다. 아두이보이라는 이름으로 제작된 게임기인데요, 0.96'' OLED와 버튼 그리고 아두이노를 결합해만든 휴대용 게임기였습니다.

그리고 올해 아두보이는 제품으로 만들어져 킥 스타터에서 펀딩을 받게 되었습니다. 펀딩은 현재 한창 진행중인데 모금액이 이미 30만불을 넘길 정도로 인기입니다.

 

개인적으로도 아두보이는 굉장히 좋아하는 프로젝트입니다. 하지만 해외에서 이런 사례들을 보면서 항상 손가락만 빠는건 아니다 싶어서 직접 아두이노 게임기 프로젝트를 시작하려고 합니다. 이름하여 게임 메이커(Game Maker): 아두이노 게임기 만들기 프로젝트 입니다.

총 3회에 걸쳐 아두이노 게임기 프로젝트를 위한 포스트를 올릴려고 합니다.

  • Part1 : 아두이노 게임기를 위한 사전지식, 하드웨어 준비사항, 데모게임 테스트
  • Part2 : 게임을 만들기 위한 프로그래밍 노하우
  • Part3 : 게임 만드는 과정 따라하기

이번 포스트는 이 중 첫 번째 Part1 입니다.

알림!!! 게임 제작 관련된 노하우나 기구 제작에 대한 내용을 공유하고자 합니다. 그리고 게임 타이틀은 입수되는대로 공유하도록 하겠습니다. 아래 링크를 통해 참여해주세요.

 

 

게임 메이커: 아두이노 게임기 만들기 Part1

 

사전지식

 

앞서 소개한 아두보이 이전에도 아두이노를 이용한 게임기는 있었습니다. GAMEBY, GAMEBUINO 가 대표적인 아두이노 게임기입니다. 각각의 게임기들은 나름대로의 특징이 있는데 정리하면 아래와 같습니다.

  • GAMEBY : 아두이노 우노(Uno) 혹은 메가(Mega) 보드에 실드 형태로 올려서 사용할 수 있습니다. 96x64 LCD를 사용하는 것이 특징이며 DIY 킷을 팔기도 하지만 오픈 소스, 오픈 하드웨어로 관련 자료가 공개되어 있습니다. 그리고 전용 게임 제작을 위한 프로그래밍 매뉴얼을 제공합니다. 홈페이지에서 지금까지 개발된 전용 게임들을 내려받아 업로드 후 즐길 수 있습니다.
  • GAMEBUINO : 84x48 LCD (Nokia3310 이라 알려진) 를 사용하며 아두이노 Uno 기반(Atmega328) 입니다. Gamebuino는 스피커와 배터리를 포함한 완성품 형태로 판매하는 것이 기본이지만 제작을 위한 관련 자료가 모두 공개되어 있습니다. 특이한 점은 SD 카드 모듈을 탑재하고 있어서 게임을 HEX 바이너리로 받은 뒤 SD 카드에 넣어 실행합니다. 아두이노에서 원하는 HEX 파일을 로드해서 실행하는 형식이라 여러 게임을 넣어 사용할 수 있습니다. 꽤 많은 게임이 개발되어 있습니다.
  • 아두보이(Arduboy) : 아두이노 레오나르도(Atmega32u4) 보드를 사용하며 128x64 OLED 를 사용해서 화면 해상도가 뛰어납니다. 카드사이즈로 만들어져 휴대용으로 좋은 장점이 있습니다. 킥 스타터 펀딩이 성공적이니 다양한 게임 타이틀이 나올것 같습니다. 각 게임이 제공하는 스케치를 다운로드 받아 컴파일-업로드 해서 사용합니다.

 

각각의 프로젝트들이 장단점이 있겠지만 게임 메이커(Game Maker) 프로젝트에서는 아두보이와 같은 아두이노 레오나르도 보드를 사용할겁니다. 아두이노 레오나르도 보드가 대중적이지 않은 것이 단점이지만 아두이노 우노 보드보다 램 용량이 25% 더 크고 별도의 FTDI 모듈이 필요 없으며 아두보이가 제공하는 게임 타이틀을 그대로 사용할 수 있기 때문입니다. 디스플레이도 비교적 구하기 쉬운 OLED 디스플레이를 사용할 수 있습니다. 하지만 아두보이와는 다르게 조이스틱 모듈을 사용할 예정입니다.

 

 

OLED와 아두이노 램 크기

 

OLED 디스플레이는 128x64 해상도를 가지고 있으며 각 픽셀의 on/off만 컨트롤이 가능합니다. 따라서 OLED 화면 전체를 채우는 이미지 파일 (1bit bitmap)을 만들면 1KB 사이즈가 됩니다. 그런데 표준 아두이노 보드인 우노(Uno) 보드는 달랑 2KB 램을 가지고 있습니다. 모든 문제는 여기서부터 출발합니다.

디스플레이를 컨트롤하기 위해서는, 특히 빠르게 업데이트 되는 게임화면을 그리기 위해서는 디스플레이 해상도와 같은 크기의 그래픽 버퍼를 사용해야 합니다. 앞서 화면을 꽉 채우는 이미지 파일이 1KB 라고 했으니 그래픽 버퍼로 1KB가 필요한겁니다. 만약 아두이노 우노보드를 사용한다고 하면, 램이 2KB이니 절반은 그래픽 버퍼가 잡아먹고 아두이노 자체에서 사용하는 램도 상당량 될겁니다. 따라서 게임 만들기에 사용할 수 있는 램이 500~600 byte 정도밖에 되질 않습니다. 이미지와 같은 read-only 데이터는 32KB인 flash memory를 사용하긴 하지만 그래도 턱없이 작은 메모리 때문에 게임이 조금만 복잡해져도 메모리 문제가 발생할 가능성이 높습니다.

그래서 잘 사용하지 않는 아두이노 레오나르도 보드를 사용하는 것입니다. 아두이노 레오나르도 보드가 탑재한 Atmega32u4 칩은 램 용량이 2.5KB 이기 때문에 운신의 폭이 더 넓습니다. 그래서 아두보이가 레오나르도 보드 기반일 것입니다.

알림!!! 추후를 위해 여기서는 아두이노 레오나르도 보드를 사용하지만 램 용량을 많이 차지하는 게임이 아닌 경우 Atmega328 기반의 아두이노 우노, 나노, 프로 미니 보드도 사용이 가능합니다. 디스플레이 모듈을 I2C 로 연결하는 부분만 살짝 다르고 나머지는 똑같이 사용이 가능합니다.

 

 

아두이노 게임기를 만들기 위한 하드웨어 준비

 

준비물은 다음과 같습니다.

  • 아두이노 레오나르도 보드 : 아두이노 레오나르도 혹은 마이크로(Micro) 보드를 사용하면 됩니다. 아래 사진은 아두이노 Nano 보드인데.. 아두이노 Uno, Nano 보드도 사용 가능하지만 디스플레이를 연결하는 부분이 틀립니다. 가급적 아두이노 레오나르도 보드를 준비하시고 없으면 우노, 나노 보드를 사용하세요.
  • OLED 디스플레이 : OLED 디스플레이는 SSD1306 칩을 사용하고 I2C 인터페이스를 사용하는 모듈을 기준으로 삼겠습니다. SH1106 칩을 사용하는 경우 문제가 발생할 수 있으며, 이 부분은 본인이 해결해야 합니다. SPI 인터페이스도 모듈도 지원합니다만 레오나르도 보드에서 SPI 디스플레이 사용법은 여기서 자세히 소개하지 않습니다. OLED 디스플레이의 사이즈는 중요하지 않습니다. 0.96'', 1.3'', 2.42'' 모두 크기만 다를 뿐 사용법은 같습니다. 1.3'' 디스플레이가 휴대용으로 적당해보입니다. 여기서는 2.42'' 디스플레이로 테스트합니다.
  • 조이스틱 모듈 : 저렴하게 구매할 수 있는 조이스틱 모듈을 사용합니다. 버튼 4개로 대체할 수도 있으나 이 경우 소스코드는 직접 수정하셔야 합니다. 조이스틱 모듈에 대한 상세내용은 링크를 참고하세요.
  • 버튼 2개 : 버튼 2개를 준비합니다.
  • 저항 2개 : 사진에는 없는데 1.5K ohm 이상인 저항 2개를 준비합니다. 버튼에 사용하는게 아니라 OLED 디스플레이를 I2C 로 연결할 때 사용합니다.
  • 브레드 보드, 점퍼선, 인두기 등등 : 필요한 경우 납땜 도구들도 준비하면 좋습니다.

parts

 

 

연결 방법

 

아두이노 레오나르도 - OLED 연결

GND  -----> GND
3.3V  -----> VCC
SDA  -----> SDA (저항을 이용해 VCC에 연결)
SCL  -----> SCL (저항을 이용해 VCC에 연결)

주의!!! OLED의 SDA, SCL 핀은 데이터 전송이 없을 때 pull-up 상태가 유지되도록 2개의 저항(1.5K ohm 이상)을 이용해 VCC에 연결해주세요.

주의!!! 아두이노 우노, 나노, 프로 미니 보드를 사용하는 경우는 SDA, SCL 을 순서대로 A4, A5 핀에 연결하면 됩니다. 이때 저항을 필요 없습니다.

 

아두이노 레오나르도 - 조이스틱 연결 

5V  -----> 5V
GND GND
  SW (Button, 연결하지 않음)
A0 VRx(X-axis offset)
A1 VRy(Y-axis offset)

 

아두이노 레오나르도 - 버튼 연결 

D5(D6)  -----> 버튼 한 쪽 다리
GND 버튼 한 쪽 다리

버튼 하나는 D5 핀과 GND 핀에 연결하고 다른 버튼은 D6, GND 핀에 연결합니다. 아두이노 내부 풀업저항을 사용하므로 별도의 저항은 필요하지 않습니다.

모두 연결되면 아래처럼 됩니다.

assembled_bb_resized

 

게임 테스트

 

하드웨어 연결이 완료되면 이제 테스트도 해볼 겸 예제 게임을 올려 보겠습니다. 예제라고 하기엔 이미 잘 만들어진 게임으로... 한 때 인기있었던 Flppy Bird 의 아두이노 버전 Floaty Ball 입니다. 원 제작자가 공개하는 소스는 아래 링크에서 받으실 수 있습니다.

https://codebender.cc/sketch:35593#FloatyBall.ino

이 소스를 I2C OLED, 조이스틱 환경에서 사용가능하도록 수정한 소스가 아래 링크에 있습니다.

https://github.com/godstale/game-maker

링크의 우측 하단 'Download ZIP'으로 소스코드를 모두 받은 후 Arduino 폴더에서 FloatyBall 폴더를 사용하시면 됩니다.

 

아두이노 레오나르도 보드는 업로드 할 때 PC에서 Reset 신호가 전해지면 보드의 연결이 끊어집니다. 이 때 업로드에 문제가 생기는 경우는 아래와 같이 업로드를 해보세요.

  • 아두이노 개발환경에서 업로드 버튼을 클릭
  • 미리 아두이노 레오나르도 보드의 Reset 버튼을 누른 상태로 유지
  • 아두이노 개발환경에서 [컴파일] -> [업로딩] 상태가 변하는 순간 Reset 버튼에서 손을 뗌
  • PC에서 레오나르도 보드를 다시 인식하고 이때 연결된 포트로 업로드가 진행됨
  • 정상적으로 업로드 된 경우 에러 메시지 없이 [업로드 완료] 메시지가 표시됨.

레오나르도 보드의 사용법과 상세한 특징은 링크를 참고하세요.

 

게임이 실행되면 아래와 같은 화면이 보입니다. 조이스틱이나 버튼 어떤 것으로든 게임 진행이 가능합니다.

test1

test2

 

게임이 사용하는 RAM 메모리 문제가 없는 경우 아두이노 우노, 나노, 프로 미니 3.3V/5V 혹은 Mega 보드를 사용하셔도 됩니다. 디스플레이 모듈을 해당 보드의 I2C로 지정된 핀에 연결만 정확히 해주면 됩니다. 아래는 아두이노 나노 보드를 이용해서 게임기를 만든 예입니다.

nano_test

 

 

게임 만들기

 

다음 포스트부터 본격적으로 게임 만들기 위한 과정을 살펴보도록 하겠습니다. 그 전에 FloatyBall 소스를 분석해 보시는 것도 좋겠네요 :)

 

강좌 시리즈:

  1. 게임 메이커: 아두이노 게임기 만들기 Part1 - 프로젝트 소개, 하드웨어 구성, 테스트 <<<<<
  2. 게임 메이커: 아두이노 게임기 만들기 Part2 - 게임 프로그래밍 준비
  3. 게임 메이커: 아두이노 게임기 만들기 PART3 - 기획 및 기본 구조
  4. 게임 메이커: 아두이노 게임기 만들기 PART4 - 게임 화면 전환
  5. 게임 메이커: 아두이노 게임기 만들기 PART5 - 캐릭터 움직임 구현
  6. 게임 메이커: 아두이노 게임기 만들기 PART6 - 장애물 움직임과 충돌 구현
  7. 게임 메이커: 아두이노 게임기 만들기 PART7 - 총알과 해골 움직임, 마무리 

 

알림!!! 게임 제작 관련된 노하우나 기구 제작에 대한 내용을 공유하고자 합니다. 그리고 게임 타이틀은 입수되는대로 공유하도록 하겠습니다. 아래 링크를 통해 참여해주세요.

 

 

참고자료 :

아두이노 카드 게임기 아두보이(Arduboy)

  • http://www.arduboy.com/
  • https://www.tindie.com/products/bateske/arduboy/
  • https://codebender.cc/search/find/?query=arduboy

GAMEBY

  • http://www.team-arg.org/TEAM-arg/MORE-history.html
  • http://logicalzero.com/gamby/reference/
  • http://logicalzero.com/gamby/assembly/

GAMEBUINO

  • http://gamebuino.com/
  • http://gamebuino.com/wiki/index.php?title=Download

Hackvision

  • https://nootropicdesign.com/hackvision/games.html

 


하드카피 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물

모든 전통이 한 때는 오해를 면치 못했다. 마찬가지로 모든 아이디어는 한 때는 비웃음을 면치 못했다. -홀브룩 잭슨 ::::: 느닷없이 떠오르는 생각이 가장 귀중한 것이며, 보관해야할 가치가 있는 것이다. -베이컨 ::::: 미리 숙고하면 힘든 일도 그저 실행에 옮기는 순간 쉬워진다. - 로버트 M. 피어식

  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글목록

userasp님의 댓글

userasp 이름으로 검색 작성일

glcdfont.c:9:23: error: variable ‘font’ must be const in order to be put into read-only section by means of ‘__attribute__((progmem))’
 static unsigned char  font[] PROGMEM = {
                      ^
uploading 중 이런 오류가 나와요...

하드카피님의 댓글

하드카피 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

static unsigned char  font[] PROGMEM
이 부분을
const unsigned char  font[] PROGMEM
이렇게 수정해서 한 번 해보세요. 제가 사용한 아두이노 개발환경은 1.0.6 버전입니다.

okhhin0118님의 댓글

okhhin0118 이름으로 검색 댓글의 댓글 작성일

위에 userasp분처럼 나와서 static을 const로 바꿨더니
Adafruit_SSD1306.cpp 32번째줄(extern unit8_t PROGMEM font[];)에서 에러가 나고

Adafruit_SSD1306.cpp:32: error: variable 'font' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
 extern uint8_t PROGMEM font[];
                            ^
Adafruit_SSD1306.cpp:32: error: conflicting declaration 'uint8_t font []'
In file included from Adafruit_SSD1306.cpp:29:0:
glcdfont.c:9: error: 'font' has a previous declaration as 'const unsigned char font [1275]'
 const unsigned char  font[] PROGMEM = {
                      ^
variable 'font' must be const in order to be put into read-only section by means of '__attribute__((progmem))'
이렇게 나옵니다..어떻게 해야할까요?

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

저도 이 에러의 정확한 원인을 모르겠습니다. 가급적 아두이노 개발환경을 1.0.5~1.0.6 버전으로 맞춰서 해보세요.

한혜인님의 댓글

한혜인 이름으로 검색 댓글의 댓글 작성일

어찌어찌해서 고쳐서 컴파일은 되는데 oled가 켜지질않습니다...
저는 아두이노 uno보드를 사용하고있고 oled는 0.96"을 사용하고 있는데,
아두이노 OLED
GND-GND
VCC-VCC
A5-D0(CLK)
A4-DC(DATA)
로 연결을 하고 FLOATYBALL을 업로드 했는데 OLED가 안켜지네요..
제가 뭘 잘못했나요?

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

핀 이름을 보니 4pin I2C OLED가 아닌듯.. SPI-I2C 겸용인가 보네요. 아래 참고하세요.
http://www.hardcopyworld.com/gnuboard5/bbs/board.php?bo_table=tech_etc&wr_id=16

김찬님의 댓글

김찬 이름으로 검색 작성일

아두이노:1.6.3 (Windows 7), 보드:"Arduino Uno"

폴더:C:\Program Files\Arduino\hardware\arduino\avr\libraries\SPI 의 라이브러리 SPI 사용

폴더:C:\Program Files\Arduino\hardware\arduino\avr\libraries\Wire 의 라이브러리 Wire 사용



C:\Program Files\Arduino\hardware\tools\avr/bin/avr-g++ -c -g -Os -w -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -MMD -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10603 -DARDUINO_AVR_UNO -DARDUINO_ARCH_AVR -IC:\Program Files\Arduino\hardware\arduino\avr\cores\arduino -IC:\Program Files\Arduino\hardware\arduino\avr\variants\standard -IC:\Program Files\Arduino\hardware\arduino\avr\libraries\SPI -IC:\Program Files\Arduino\hardware\arduino\avr\libraries\Wire C:\Users\ADMINI~1\AppData\Local\Temp\build6907263901100860498.tmp\FloatyBall.cpp -o C:\Users\ADMINI~1\AppData\Local\Temp\build6907263901100860498.tmp\FloatyBall.cpp.o

FloatyBall.ino:8:21: fatal error: bitmaps.h: No such file or directory

compilation terminated.

컴파일 오류 발생.
라고  오류가 나요

김찬님의 댓글

김찬 이름으로 검색 댓글의 댓글 작성일

This report would have more information with
  "Show verbose output during compilation"
  enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Uno"
RunningMan.ino:13:26: error: Adafruit_GFX.h: No such file or directory
RunningMan.ino:14:30: error: Adafruit_SSD1306.h: No such file or directory
RunningMan.ino:15:21: error: bitmaps.h: No such file or directory
RunningMan.ino:16:29: error: InputController.h: No such file or directory
RunningMan:31: error: 'Adafruit_SSD1306' does not name a type
RunningMan:65: error: 'InputController' does not name a type
RunningMan.ino: In function 'void setup()':
RunningMan:174: error: 'display' was not declared in this scope
RunningMan:174: error: 'SSD1306_SWITCHCAPVCC' was not declared in this scope
RunningMan:177: error: 'WHITE' was not declared in this scope
RunningMan:194: error: 'arduino' was not declared in this scope
RunningMan:201: error: 'nightrun' was not declared in this scope
RunningMan.ino: In function 'void loop()':
RunningMan:211: error: 'inputController' was not declared in this scope
RunningMan:243: error: 'display' was not declared in this scope
RunningMan:279: error: 'display' was not declared in this scope
RunningMan:284: error: 'WHITE' was not declared in this scope
RunningMan:285: error: 'BLACK' was not declared in this scope
RunningMan:286: error: 'gameover' was not declared in this scope
RunningMan:307: error: 'display' was not declared in this scope
RunningMan:308: error: 'nightrun' was not declared in this scope
RunningMan.ino: In function 'void updateMove()':
RunningMan:363: error: 'display' was not declared in this scope
RunningMan:363: error: 'BLACK' was not declared in this scope
RunningMan:386: error: 'display' was not declared in this scope
RunningMan:386: error: 'BLACK' was not declared in this scope
RunningMan:416: error: 'display' was not declared in this scope
RunningMan:416: error: 'BLACK' was not declared in this scope
RunningMan.ino: In function 'void checkCollision()':
RunningMan:468: error: 'display' was not declared in this scope
RunningMan:468: error: 'BLACK' was not declared in this scope
RunningMan.ino: In function 'void draw()':
RunningMan:493: error: 'display' was not declared in this scope
RunningMan:494: error: 'WHITE' was not declared in this scope
RunningMan:503: error: 'display' was not declared in this scope
RunningMan:503: error: 'BLACK' was not declared in this scope
RunningMan:504: error: 'char_anim' was not declared in this scope
RunningMan:504: error: 'WHITE' was not declared in this scope
RunningMan:506: error: 'display' was not declared in this scope
RunningMan:506: error: 'BLACK' was not declared in this scope
RunningMan:508: error: 'char_anim' was not declared in this scope
RunningMan:508: error: 'WHITE' was not declared in this scope
RunningMan:511: error: 'display' was not declared in this scope
RunningMan:511: error: 'BLACK' was not declared in this scope
RunningMan:512: error: 'char_anim' was not declared in this scope
RunningMan:512: error: 'WHITE' was not declared in this scope
RunningMan:520: error: 'display' was not declared in this scope
RunningMan:520: error: 'BLACK' was not declared in this scope
RunningMan:521: error: 'WHITE' was not declared in this scope
RunningMan:531: error: 'display' was not declared in this scope
RunningMan:531: error: 'BLACK' was not declared in this scope
RunningMan:532: error: 'enemy_anim' was not declared in this scope
RunningMan:532: error: 'WHITE' was not declared in this scope
RunningMan:537: error: 'display' was not declared in this scope
RunningMan:537: error: 'BLACK' was not declared in this scope
RunningMan:543: error: 'display' was not declared in this scope
RunningMan:543: error: 'BLACK' was not declared in this scope
RunningMan:544: error: 'enemy_anim' was not declared in this scope
RunningMan:544: error: 'WHITE' was not declared in this scope
RunningMan:556: error: 'display' was not declared in this scope
RunningMan:556: error: 'BLACK' was not declared in this scope
RunningMan:558: error: 'display' was not declared in this scope
RunningMan:558: error: 'WHITE' was not declared in this scope
RunningMan:567: error: 'display' was not declared in this scope
RunningMan:567: error: 'BLACK' was not declared in this scope
RunningMan:568: error: 'char_anim' was not declared in this scope
RunningMan:568: error: 'WHITE' was not declared in this scope
RunningMan:579: error: 'display' was not declared in this scope
RunningMan:579: error: 'BLACK' was not declared in this scope
RunningMan:586: error: 'display' was not declared in this scope
라고 뜨는 데 어떻할까요?

하드카피님의 댓글

하드카피 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

맨 처음 발생한 에러를 보면
RunningMan.ino:13:26: error: Adafruit_GFX.h: No such file or directory
RunningMan.ino:14:30: error: Adafruit_SSD1306.h: No such file or directory
RunningMan.ino:15:21: error: bitmaps.h: No such file or directory
RunningMan.ino:16:29: error: InputController.h: No such file or directory

전부 파일을 찾지 못해 발생한 에러입니다. RunningMan.ino 파일과 같은 폴더에 위 파일들이 모두 같이 있어야하고, 아두이노 개발환경을 실행 했을 때 폴더에 있는 파일들이 탭으로 등록되어 보여야 합니다.

arduino02님의 댓글

arduino02 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

flying bird 코드 오류는 해결했습니다. 오류를 잘 읽어보시면 오류에서 const를 붙이라고 하는데 그 곳에서 알맞게 const를 넣으시면 됩니다. 않되신다면 제게 e-mail로 보내드리겠습니다.

sanguuin님의 댓글

sanguuin 이름으로 검색 작성일

우노에 spi형식 1.3인치 쓰는데 코드에 적힌대로 핀배치를 했더니 작동은 되는데 게임화면윗부분은 짤리고 게임화면 맨 아래부분이 oled화면 맨위에 나타납니다. 무슨 문제죠?

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

저도 가끔 그런 현상이 나오던데.. 재부팅하고 이러저리 만지다보면 다시 정상으로 돌아오곤 했습니다. 정확히 어디가 문제인지는 잘 모르겠에요.
이런 현상의 근본 해결책은 아니지만.. setup() 함수 안에서 디스플레이 초기화를 하고 약간 (1초 정도) 딜레이즈 준 뒤 본격적으로 화면에 그리는 작업을 해보심이 어떨까 합니다.

강현모님의 댓글

강현모 이름으로 검색 작성일

제가 이런거 처음인데 너무 해보고 싶어서 질문드립니다.
다소 어이없는 질문일 수도 있으니 넓으시 마음으로 이해해 주시면 정말로 감사할것 같습니다ㅜ
[아두이노 보드 말인데요, Arduino Leonardo R3 A6 이라고 되어있는 거 사면 되려나요??
그리고 조이스틱 모듈이 가격대가 제일 싼거랑 비싼거랑 2배정도 차이나던데 비싼거 쓰는게 나으려나요??
버튼은 뭐라고 검색해야 하나요? 버튼모듈 게임기 버튼 이런식으로 검색해봤는데 도무지 찾을수가ㅜ
oled는 ssd1306으로 검색했는데 0.96인치밖에 안나오더라고요 저는 2.42로 만들고 싶은데 찾아도 안나오네요ㅜㅜ 저항은 무슨 저항을 구매해야 하나요ㅜㅜ 땅콩저항이니 뭐니 해서 알수가 없습니다ㅜ
브레드 보드는 얼마나 큰걸 사야하나요?? ]
제가 막바로 찾아보고 쓴거라 너무 두서가 없어서 죄송합니다ㅜ
평소에 관심있던 게임만들기가 막상 눈앞에 다가와 제가 할 수도 있다고 생각되니까 너무 들떠버린것 같습니다
저 정말로 아무것도 모릅니다...ㅜ
그래서 이렇게 염치불구하고 황당한 질문 여러개 드리고 가네요
가능하신 선에서 되도록 자세한 가르침 부탁드리겠습니다
감사합니다

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

아두이노 보드 말인데요, Arduino Leonardo R3 A6 이라고 되어있는 거 사면 되려나요??
==> [아두이노 UNO R3, 아두이노 Nano, 아두이노 Leonardo R3] 중 어떤걸 선택하셔도 상관 없습니다. 말씀하신 보드를 사셔도 됩니다.

그리고 조이스틱 모듈이 가격대가 제일 싼거랑 비싼거랑 2배정도 차이나던데 비싼거 쓰는게 나으려나요??
==> 싼거 사셔도 상관 없습니다. 별 차이 안날거에요.. 다만 부피가 좀 작은게 보기 더 좋을거에요.

버튼은 뭐라고 검색해야 하나요? 버튼모듈 게임기 버튼 이런식으로 검색해봤는데 도무지 찾을수가ㅜ
==> tactile button 혹은 push button 으로 검색하심 됩니다.

oled는 ssd1306으로 검색했는데 0.96인치밖에 안나오더라고요 저는 2.42로 만들고 싶은데 찾아도 안나오네요
==> 2.42'' 모델은 찾기 힘듭니다. ebay.com에서 검색하면 나올때도 있고 안나올때도 있고 그럽니다;;; 일반적으로는 0.96'' 또는 1.3'' 모델을 쓰기 때문에 이 사이즈를 구매하시는 것이 편리합니다.

ㅜㅜ 저항은 무슨 저항을 구매해야 하나요ㅜㅜ 땅콩저항이니 뭐니 해서 알수가 없습니다ㅜ
==> 저항은 세트로 파는걸 사두는게 편하실거에요. http://itempage3.auction.co.kr/DetailView.aspx?ItemNo=B200415236&frm3=V2

브레드 보드는 얼마나 큰걸 사야하나요??
==> 소형 브레드보드 사시면 여러용도로 쓸 수 있습니다. http://eleparts.co.kr/EPX34N7P

아두이노 스타터 킷을 사시면 대부분의 부품들이 들어있어 편합니다. 여기에 조이스틱과 OLED를 추가로 구매하시면 됩니다.

강현모님의 댓글

강현모 이름으로 검색 작성일

진짜로 감사합니다ㅜ 나중에 완성하면 제일먼저 알려드리고 싶네요^^ 정말 큰 도움 됬습니다!!

강현모님의 댓글

강현모 이름으로 검색 작성일

http://www.ebay.com/itm/16mm-12V-Blue-LED-Power-Push-Button-Switch-Black-Aluminum-Metal-Latching-/231234288662?hash=item35d6a33c16:g:JuIAAOxySoJTS1Pa
버튼 이거 사려고 하는데 괜찮으려나요??

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

아래 링크에 있는 버튼들이 더 적절해 보이네요.
http://www.ebay.com/sch/i.html?_from=R40&_trksid=p2047675.m570.l1313.TR0.TRC0.H0.X+tactile+button.TRS0&_nkw=+tactile+button&_sacat=0
언급하신 링크의 버튼은 한번 누를때 마다 잠김/풀림이 스위칭 되는 버튼이라 적절치 않아요.

홍군님의 댓글

홍군 이름으로 검색 작성일

재미 있는 프로젝트이네요^^ 초보때고 빨리 도전해보고 싶어요~

무그님의 댓글

무그 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 작성일

안녕하십니까!!
레오나르도에 spi형식 1.3인치 사용하고 있습니다.
글에 적힌대로 핀배치를 했더니 작동은 되는데 게임화면윗부분은 짤리고 게임화면 맨 아래부분이 oled화면 맨위에 나타납니다.
일년전에는 정확한 원인을 모르겠다고 하셨는데
혹시나 하는 마음에 댓글 남깁니다.!!

최고관리자님의 댓글

최고관리자 쪽지보내기 메일보내기 홈페이지 자기소개 아이디로 검색 전체게시물 댓글의 댓글 작성일

문제가 불특정하게 나와서 아직 답을 모르겠습니다. 아두이노 리셋될 때 뭔가 꼬인것 같기도 하고... 일단은 소스코드 상에서 디스플레이 초기화하는 display.begin() 전후로 delay() 함수로 약간의 지연시간을 두는게 어떨까 싶네요. 그리고 디스플레이를 강제로 초기화 해주는 다른 함수가 있는지 찾아봐야 할 것 같습니다.