본문 바로가기

아두이노우노 R4

DIY 아두이노 휴대용 게임 콘솔 (레트로 게임 10개 포함)

반응형

DIY 아두이노 휴대용 게임 콘솔 (레트로 게임 10개 포함)

 

깜빡이는 LED, 온도 모니터, 라인 트래킹 로봇 같은 똑같은 아두이노 프로젝트에 질리셨나요? 이제 좀 더 재밌는 걸 만들어 볼 시간입니다. 여러분의 기술을 활용해서 나만의 아두이노 게임 콘솔을 만들어 보세요. 회로 테스트만 하는 게 아니라, 직접 만든 기기에 전원을 켜고 주머니에 쏙 들어가는 컴팩트한 크기의 기기 안에서 레트로 스타일 게임의 세계로 바로 뛰어드는 모습을 상상해 보세요.

 

이 아두이노 휴대용 게임기는 가볍고 휴대가 간편하며 조립도 간단하여 취미 활동가, 전자 엔지니어, 그리고 젊은 기술 애호가 모두에게 적합합니다. 초보자도 쉽게 사용할 수 있으며, 창의력을 자극하고 심도 있는 학습을 유도하기에 충분합니다.

 

 

 

아두이노를 처음 접하거나 기초를 다지고 싶다면, 다양한 아두이노 프로젝트를 살펴보는 것이 좋은 시작점이 될 수 있습니다. 더 고급 프로젝트에 도전하기 전에, 저희의 " 아두이노 프로젝트 " 가이드를 참고하여 탄탄한 기초를 다져보세요.

 

목차

이 아두이노 게임 콘솔 프로젝트는 무엇인가요?

콘솔 개요

필수 구성 요소

배선도

└ 핀 구성

하드웨어 조립

└ 빠른 조립 팁

코드 개요

작업 영상

개발 과정에서 직면한 어려움

└ 라이브러리 호환성 문제

└ 버튼이 튕기는 현상

GitHub 저장소

 

이 아두이노 게임 콘솔 프로젝트는 무엇인가요?

 

제가 직접 만든 레트로 게임 콘솔은 Arduino UNO R4 WiFi를 기반으로 하며, 0.96인치 SSD1306 OLED 디스플레이(128×64픽셀), 택타일 버튼(4개), 액티브 부저, 5V 부스트 컨버터가 장착된 1S LiPo 배터리, 그리고 HAT 스타일의 맞춤형 퍼프보드 등의 부품으로 구성되어 있습니다. 이 콘솔에는 Arduino C++로 처음부터 직접 프로그래밍한 10개의 게임이 내장되어 있으며, 각 게임은 헤더 파일에 개별적으로 저장되어 있습니다. 게임 목록에는 Asteroids, Breakout, Dino, Flappy Bird, Maze Runner, Pacman, Pong, Snake, Space Invaders, Tetris가 포함됩니다.

 

콘솔 개요

 

게임 컬렉션

 

이 아두이노 게임 콘솔에는 아스테로이드, 브레이크아웃, 다이노, 플래피 버드, 메이즈 러너, 팩맨, 퐁, 스네이크, 스페이스 인베이더, 테트리스 등 고전 아케이드 게임들이 수록되어 있으며, 모든 게임은 128x64 OLED 디스플레이에서 부드럽게 실행되도록 최적화되어 있고 간단한 버튼 조작으로 즐길 수 있습니다. 이 게임들은 오리지널 버전과 완전히 동일한 것은 아니지만, 콘솔의 하드웨어 제약에 맞춰 특별히 재현 및 최적화된 버전입니다.

 

 

아두이노 레트로 게임 콘솔의 게임 플레이 스냅샷입니다. 128x64 OLED 디스플레이에서 뱀, 테트리스, 팩맨, 스페이스 인베이더를 플레이하는 모습을 보여줍니다.

 

컴팩트하고 휴대하기 편리한 디자인

 

이 아두이노 게임 콘솔은 휴대가 간편하고 어디서든 사용할 수 있도록 포켓 사이즈로 설계되었습니다. 하드웨어는 아두이노 R4 WiFi에 맞춤형 HAT 스타일 보드를 장착하여 깔끔하고 정돈된 디자인을 구현했습니다. 그 결과, 내장된 LiPo 배터리를 사용하여 어디서든 휴대하고 사용할 수 있는 포켓 사이즈의 아두이노 기반 게임 콘솔이 탄생했습니다.

 

 

DIY 휴대용 아두이노 게임 콘솔 하드웨어 구성: 맞춤형 HAT 보드, OLED 디스플레이 및 터치 버튼을 갖춘 아두이노 R4 WiFi를 보여줍니다.

 

실제 상용 게임기에 가까운 것을 만들고 싶다면, ESP32를 사용한 DIY 휴대용 레트로 게임 콘솔 제작에 대한 기사를 참고하여 더욱 발전되고 강력한 휴대용 게임 콘솔을 제작해 보세요.

 

아두이노 게임 콘솔 제작에 필요한 부품

 

일반 개발 보드를 정말 흥미로운 무언가로 탈바꿈시키기 위해, 아두이노 R4 WiFi 보드 위에 직접 장착할 수 있는 맞춤형 HAT 스타일 프로토타입 아두이노 게임 콘솔 프로젝트를 제작했습니다. 이 애드온 보드는 아두이노를 컴팩트한 레트로 게임 콘솔로 변환시켜 모든 구성 요소를 깔끔하게 정리하고 휴대성을 높이며 조립도 간편하게 해줍니다. 지저분한 배선과 브레드보드 대신, 이 HAT 프로토타입은 모든 필수 구성 요소를 깔끔하고 바로 게임을 즐길 수 있는 환경에 통합합니다.

 

요소 설명 수량
아두이노 R4 WiFi 메인 마이크로컨트롤러 보드는 모든 게임을 실행하고 콘솔 작동을 제어합니다. 1
퍼프보드(양방향 PCB) 모든 구성 요소를 깔끔하게 장착하고 정리하는 데 사용되는 맞춤형 보드로, 아두이노용 플러그인 HAT 역할을 합니다. 1
촉각식 푸시 버튼 탐색 및 게임 컨트롤(위, 아래, 선택, 뒤로/액션)에 사용됩니다. 4
0.96인치 I2C OLED 디스플레이 게임 그래픽, 메뉴 인터페이스 및 점수를 표시하는 소형 디스플레이. 1
부저 레트로 게임 경험을 위해 게임 플레이 중에 효과음을 생성합니다. 1
1S 리튬 폴리머 배터리 휴대용 전원을 사용하여 콘솔을 완전히 휴대할 수 있습니다. 1
5V 부스트 컨버터 시스템에 필요한 안정적인 5V로 리튬 폴리머 배터리 전압을 높입니다. 1
슬라이드 스위치 콘솔의 메인 전원 ON/OFF 스위치로 사용됩니다. 1
전선 연결 부품 간의 전기적 연결을 만드는 데 사용됩니다. 필요에 따라

 

 

아두이노 게임 콘솔 배선도

 

아래 회로도는 아두이노 게임 콘솔의 전체 배선도를 보여줍니다. OLED 디스플레이, 제어 버튼, 부저, 배터리, 부스트 컨버터와 아두이노 보드 간의 연결이 명확하게 나타나 있습니다. 하드웨어를 조립할 때 이 회로도를 참조하면 정확한 배선과 안정적인 성능을 확보하는 데 도움이 됩니다.

 

 

OLED, 버튼, 부저, LiPo 배터리, 부스트 컨버터 및 슬라이드 스위치 연결을 보여주는 DIY 아두이노 R4 휴대용 게임 콘솔의 전체 배선도입니다.

 

핀 구성

 

콘솔의 모든 구성 요소는 기능에 따라 특정 아두이노 핀에 연결됩니다. OLED 디스플레이는 I2C 핀을 사용하고, 버튼은 디지털 입력 핀에 연결되며, 부저는 디지털 출력 핀에 연결됩니다. 올바른 핀 매핑은 게임 플레이 중 시스템이 원활하게 작동하고 정확하게 반응하도록 보장합니다. 아래 표는 이 아두이노 OLED 게임 콘솔의 배선에 대한 정확한 참고 자료입니다.



Components Signal  Arduino Pin Pin Type

OLED Display (SSD1306 128x64 I2C) VCC 5V Power
GND GND Ground
SDA A4 I2C Data
SCL A5 I2C Clock
Button – UP Signal D4 Input
Button – DOWN Signal D2 Input
Button – LEFT Signal D3 Input
Button – RIGHT Signal D5 Input
  Other side GND Ground
Buzzer + D7 Output
- GND Ground
5V Boost Converter OUT + 5V Pin Power
OUT - GND Ground
LiPo Battery + Switch to Boost IN + Power input
- Boost IN - Ground

 

 

하드웨어 조립

 

모든 부품은 컴팩트하고 깔끔한 구성을 위해 양면 기판에 장착되었습니다. 전체 회로는 아두이노 R4 위에 직접 장착되는 HAT 모듈 형태로 설계되어 콘솔을 깔끔하고 휴대하기 편리하게 만들었습니다. OLED 디스플레이, 푸시 버튼, 부저는 핀 구성에 따라 꼼꼼하게 납땜 및 연결되었습니다. 3.7V 리튬 폴리머 배터리와 5V 부스트 컨버터를 사용하여 시스템에 전원을 공급함으로써 휴대용 기기에서도 안정적인 작동을 보장합니다.

 

DIY 아두이노 R4 게임 콘솔의 하드웨어 조립 과정을 단계별로 보여줍니다. 아두이노 UNO R4 WiFi 보드에 OLED 디스플레이와 버튼이 장착된 HAT 기판을 납땜하는 모습이 담겨 있습니다.

 

빠른 조립 팁

 

* 기판에 암형 헤더 스트립을 사용하여 HAT를 납땜 제거 없이 분리하여 재프로그래밍할 수 있도록 하십시오.

* 디스플레이 노이즈를 최소화하기 위해 I2C 배선(SDA/SCL)을 버튼 신호 배선에서 멀리 떨어뜨려 배치하십시오.

* 부스트 컨버터 출력이 아두이노의 5V 핀에 연결하기 전에 멀티미터로 정확히 5V인지 확인하십시오.

* 단락을 방지하기 위해 모든 LiPo 배터리 리드에 수축 튜브를 사용하십시오.

* 소형화를 유지하기 위해 연결 배선을 최대한 짧게 하십시오.

 

아두이노 게임 콘솔 코드 개요

 

이 아두이노 레트로 게임 콘솔의 모든 코드는 모듈화와 손쉬운 확장성을 염두에 두고 처음부터 새로 작성되었습니다. 각 게임은 개별적으로 개발되어 별도의 헤더 파일로 저장되므로 메인 프로그램은 깔끔하고 체계적으로 유지됩니다. 이러한 구조 덕분에 전체 시스템에 영향을 주지 않고 새로운 게임을 추가하거나 기존 게임을 삭제하고, 게임 플레이 메커니즘을 수정 및 미세 조정하는 것이 간편합니다. 모듈식 설계는 유연성을 보장하고 콘솔을 쉽게 맞춤 설정하고 업그레이드할 수 있도록 합니다. 이 아두이노 게임 콘솔 프로젝트의 전체 펌웨어는 모듈식 아키텍처를 사용하여 처음부터 새로 작성되었습니다.

 

1단계 ⇒ 라이브러리 포함 항목

 

#include <Arduino.h>
#include <U8g2lib.h>
#include <Wire.h>

 

 

이 프로젝트는 콘솔이 제대로 작동하는 데 필요한 필수 라이브러리를 포함하는 것으로 시작합니다.

 

Arduino.h 라이브러리 는 pinMode(), digitalRead(), millis(), delay(), tone()과 같은 핵심 Arduino 함수에 대한 접근을 제공하며, 이러한 함수들은 프로그램 전체에서 사용됩니다.

 

U8g2lib.h 라이브러리 는 128x64 SSD1306 OLED 디스플레이를 제어하여 그래픽, 텍스트, 메뉴 및 게임 요소가 부드럽게 렌더링되도록 합니다.

 

Wire.h 라이브러리 는 아두이노와 OLED 디스플레이 간의 I2C 통신을 가능하게 하여 SDA 및 SCL 핀을 통한 올바른 데이터 전송을 보장합니다. 이 두 라이브러리는 함께 아두이노 게임 콘솔의 기반을 형성합니다.

 

2단계 ⇒ 상수 및 핀 정의

 

#define SCREEN_W 128
#define SCREEN_H 64
#define BTN_UP 4
#define BTN_DOWN 2
#define BTN_LEFT 3
#define BTN_RIGHT 5
#define BUZZER_PIN 7

 

 

이 코드 부분은 프로그램 전체에서 사용되는 중요한 상수들을 정의합니다. 화면 너비와 높이는 각각 128과 64로 설정되어 있으며, 이는 SSD1306 OLED 디스플레이의 해상도와 일치합니다. 이러한 값들을 상수로 정의함으로써 화면에 텍스트와 그래픽을 정확하게 배치하는 것이 더욱 쉬워집니다.

 

다음으로, 방향 버튼에 연결된 디지털 핀들이 정의됩니다. 위, 아래, 왼쪽, 오른쪽 버튼은 각각 4번, 2번, 3번, 5번 핀에 할당되어 프로그램이 메뉴 탐색 및 게임 플레이를 위한 사용자 입력을 읽을 수 있게 됩니다. 마지막으로, 7번 핀에는 부저가 할당되는데, 이 핀은 시작, 선택, 게임 종료 이벤트 동안 효과음과 간단한 배경 음악을 생성하는 데 사용됩니다.

 

3단계 ⇒ 게임 헤더 파일

 

#include "Asteroids.h"
#include "Breakout.h"
#include "Dino.h"
#include "FlappyBird.h"
#include "MazeRunner.h"
#include "Pacman.h"
#include "Pong.h"
#include "Snake.h"
#include "SpaceInvaders.h"
#include "Tetris.h"

 

 

이 섹션에는 콘솔에서 사용할 수 있는 모든 게임의 헤더 파일이 포함되어 있습니다. 각 게임은 Asteroids , Breakout , Dino , Flappy Bird , Maze Runner , Pacman , Pong , Snake , Space Invaders , Tetris 와 같이 별도의 파일로 작성되었습니다 . 각 게임을 별도의 헤더 파일로 구성함으로써 메인 프로그램을 깔끔하고 모듈화된 형태로 유지할 수 있습니다. 이러한 기능 분리는 Arduino를 이용한 게임 콘솔 제작 프로젝트를 관리, 디버깅 및 향후 확장을 더욱 용이하게 해줍니다. 핵심 콘솔 로직을 수정하지 않고도 새로운 게임을 추가할 수 있기 때문입니다.

 

4단계 ⇒ 버튼 디바운스 기능

 

bool btnPressed(uint8_t pin) {
 static uint32_t lastTime[4] = {0, 0, 0, 0};
 static bool lastSt[4] = {true, true, true, true};
 uint8_t idx;
 if (pin == BTN_UP)
   idx = 0;
 else if (pin == BTN_DOWN)
   idx = 1;
 else if (pin == BTN_LEFT)
   idx = 2;
 else if (pin == BTN_RIGHT)
   idx = 3;
 else
   return false;
 bool cur = (digitalRead(pin) == LOW);
 bool edge = cur && !lastSt[idx] && (millis() - lastTime[idx] > 40);
 if (cur != lastSt[idx])
   lastTime[idx] = millis();
 lastSt[idx] = cur;
 return edge;
}

 

 

`btnPressed()` 함수는 버튼의 기계적 반동으로 인한 불필요한 다중 트리거를 방지하면서 정확한 버튼 누름을 감지하는 역할을 합니다. 이 함수는 버튼의 현재 상태와 이전 상태를 비교하여 올바른 누름 이벤트(엣지 검출)를 감지합니다. 각 버튼의 마지막 기록 시간과 이전 상태를 저장하기 위해 정적 배열을 사용하여 각 버튼을 개별적으로 추적합니다. 버튼 입력의 반동을 제거하기 위해 `millis()` 함수를 사용하여 40밀리초의 짧은 지연 임계값을 적용합니다. 이 함수는 유효한 누름이 감지되었을 때만 `true`를 반환하여 부드럽고 안정적인 메뉴 탐색 및 게임 플레이 제어를 보장합니다.

 

5단계 ⇒ 설정 기능

 

void setup() {
 pinMode(BTN_UP, INPUT_PULLUP);
 pinMode(BTN_DOWN, INPUT_PULLUP);
 pinMode(BTN_LEFT, INPUT_PULLUP);
 pinMode(BTN_RIGHT, INPUT_PULLUP);
 pinMode(BUZZER_PIN, OUTPUT);
 randomSeed(analogRead(A0));
 u8g2.begin();
 u8g2.setContrast(200);
 u8g2.setFont(u8g2_font_6x10_tr);
 u8g2.setDrawColor(1);
 u8g2.setBitmapMode(0);
 showSplash();
}

 

setup() 함수는 콘솔 전원이 켜질 때 한 번 실행되며 하드웨어 및 디스플레이 설정을 초기화하는 역할을 합니다. 네 개의 방향 버튼은 모두 INPUT_PULLUP으로 설정되어 내부 풀업 저항을 활성화하여 안정적인 입력을 제공합니다. 부저 핀은 출력으로 설정되어 효과음을 생성합니다. 아날로그 핀 판독을 통해 난수 시드를 초기화하여 무작위성이 요구되는 게임에서 예측 불가능한 동작을 보장합니다. 그런 다음 u8g2.begin() 함수를 사용하여 OLED 디스플레이를 초기화하고 , 대비, 글꼴 스타일, 그리기 색상 및 비트맵 모드를 설정하여 적절한 렌더링을 구현합니다. 마지막으로 showSplash() 함수가 호출되어 메인 메뉴에 진입하기 전 시작 화면을 표시합니다.

 

6단계 ⇒ 메인 루프

 

void loop() {
 int sel = menuSelect();
 switch (sel) {
 case 0:
   game_asteroids();
   break;
 case 1:
   game_breakout();
   break;
 case 2:
   game_dino();
   break;
 case 3:
   game_flappy();
   break;
 case 4:
   game_maze();
   break;
 case 5:
   game_pacman();
   break;

 

 

loop() 함수는 콘솔의 주요 제어 센터 역할을 합니다. 먼저 menuSelect() 함수를 호출하여 게임 선택 메뉴를 표시하고 선택된 게임에 해당하는 번호를 반환합니다. 선택된 값에 따라 switch 문을 사용하여 game_snake() , game_pong() , game_tetris() 와 같은 해당 게임 함수를 실행합니다 . 각 case는 사용 가능한 10가지 게임 중 하나를 나타냅니다. 게임이 끝나면 프로그램은 자연스럽게 loop 함수로 돌아가 사용자를 메뉴로 복귀시켜 다른 게임을 선택할 수 있도록 합니다. 이러한 구조는 콘솔을 재시작하지 않고도 원활한 탐색과 끊김 없는 게임 플레이를 보장합니다.

 

작업 영상

 

아래에서 게임 콘솔이 작동하는 모습을 담은 영상을 보실 수 있습니다.

 

콘솔 전원을 켜면 먼저 메인 게임 화면이 표시되고, 사용자는 아무 버튼이나 눌러 다음 단계로 진행할 수 있습니다. 버튼을 누르면 게임 목록 메뉴가 나타납니다. 위쪽 및 아래쪽 버튼을 사용하여 이용 가능한 게임 목록을 스크롤할 수 있으며, 왼쪽 또는 오른쪽 버튼을 눌러 게임을 선택할 수 있습니다. 아래 영상은 시작 화면부터 게임 선택, 여러 게임의 실제 플레이까지 아두이노 휴대용 게임 콘솔의 작동 모습을 보여줍니다.

 

게임을 선택하면 즉시 로딩되어 게임 플레이가 시작됩니다. 게임이 끝나면 콘솔은 자동으로 게임 목록 페이지로 돌아가 다른 게임을 선택할 수 있게 됩니다.

 

향후 업데이트

 

콘솔에 게임과 새로운 게임플레이 기능을 추가하여 콘솔의 활용도를 높여보세요.

최고 점수 저장, 추가 음향 효과, 더욱 인터랙티브한 메뉴 디자인을 통해 사용자 경험을 개선합니다.

플레이어에게 다양한 도전 옵션을 제공하기 위해 난이도 조절 기능을 도입하세요.

Arduino UNO R4 WiFi를 사용하여 무선 멀티플레이어 지원을 활성화하면 두 콘솔 간에 연결된 게임 플레이가 가능합니다.

전력 최적화를 통해 하드웨어 성능을 향상시켜 배터리 수명을 연장하고 더 큰 디스플레이를 지원합니다.

 

개발 과정에서 직면한 어려움

 

아두이노 UNO R4 라이브러리 호환성 문제

 

개발 과정에서 또 다른 문제는 OLED 그래픽 라이브러리와 관련된 것이었습니다. 일반적으로 사용되는 Adafruit GFX 라이브러리가 이 구성의 Arduino UNO R4와 완벽하게 호환되지 않아 디스플레이 초기화 및 렌더링 문제가 발생했습니다. 이 문제를 해결하기 위해 U8g2 라이브러리를 대신 사용했습니다.

 

U8g2 라이브러리는 UNO R4와의 호환성을 향상시키고 효율적인 풀프레임 버퍼링, 더욱 부드러운 텍스트 렌더링, 그리고 유연한 폰트 지원을 제공합니다. U8g2로 전환함으로써 안정적인 OLED 성능을 확보하고 콘솔의 전반적인 디스플레이 처리 성능을 개선할 수 있었습니다. 모든 아두이노 보드가 OLED 디스플레이 구동과 게임 로직 실행을 동시에 지원하는 것은 아닙니다. 디스플레이 사용량이 많은 프로젝트에 적합한 하드웨어를 선택할 때 처리 속도와 RAM 용량이 왜 중요한지 이해하려면 아두이노 보드 비교 가이드를 참조하세요.

 

버튼 바운싱 및 디바운싱

 

하드웨어 프로젝트에서 흔히 발생하는 또 다른 문제는 버튼 바운싱입니다. 기계식 푸시 버튼을 누르면 OFF에서 ON으로 깔끔하게 전환되지 않고 몇 밀리초 동안 HIGH와 LOW 사이를 빠르게 오가는데, 이로 인해 게임 내에서 의도치 않은 입력이 여러 번 발생할 수 있습니다. 예를 들어 메뉴 옵션이 건너뛰어지거나 반복적인 동작이 실행될 수 있습니다.

 

이 문제를 해결하기 위해 btnPressed() 함수에 소프트웨어 디바운싱 기법을 구현했습니다. millis() 함수를 이용한 타이밍 검사와 화면 전환 감지를 통해 정확하고 의도적인 버튼 누름만 인식되도록 했습니다. 그 결과 메뉴 탐색이 더욱 부드러워지고 게임 플레이 제어도 더욱 정확해졌습니다. 게임 외에도 다양한 제작 아이디어를 찾고 계신가요? 저희가 엄선한 전자 프로젝트 목록은 홈 자동화부터 로봇 공학까지 모든 분야를 아우르며, 이 콘솔 제작이 완료된 후 다음 단계로 나아갈 방향을 제시해 드립니다.

 

아두이노 게임 콘솔에 대한 자주 묻는 질문

 

⇥ 콘솔에 게임을 더 추가할 수 있나요?

 

네. 각 게임은 별도의 헤더 파일에 작성되므로, 새 게임 파일을 생성하고 메인 메뉴 시스템에 포함시키는 방식으로 새로운 게임을 쉽게 추가할 수 있습니다.

 

⇥ 5V 승압 변환기는 왜 사용되나요?

 

콘솔은 3.7V LiPo 배터리로 전원을 공급받지만, 아두이노는 안정적인 작동을 위해 5V가 필요합니다. 부스트 컨버터는 배터리 전압을 일정한 5V 출력으로 높여줍니다.

 

⇥ 이 게임들은 오리지널 아케이드 게임인가요?

 

아니요. 이것들은 고전 아케이드 게임에서 영감을 받은 경량 복제품입니다. 아두이노 플랫폼의 메모리 및 성능 한계 내에서 실행되도록 재현 및 최적화되었습니다.

 

⇥ 이 프로젝트를 더 강력한 콘솔로 업그레이드할 수 있습니까?

 

네. 성능과 그래픽 향상을 위해 디자인을 ESP32 기반 휴대용 게임 콘솔로 업그레이드할 수 있으며, 더 큰 디스플레이, SD 카드 지원 및 추가 기능을 갖출 수 있습니다.

 

⇥ 코드에서 버튼 디바운싱은 어떻게 처리되나요?

 

btnPressed() 함수에서는 소프트웨어 디바운싱을 사용하여 LOW에서 HIGH로의 에지 전환을 확인하고, 버튼 상태에서 마지막 에지 전환이 발생한 후 최소 40밀리초가 경과했을 경우에만 버튼 누름을 유효한 것으로 간주합니다. 타이머를 사용하여 기계식 접촉 바운스를 제거함으로써, 네 개의 버튼 각각에 마지막 상태와 마지막 변경 타임스탬프를 저장하는 자체 정적 배열을 적용하여 독립적인 폴링을 가능하게 하고 버튼의 오작동을 방지합니다.

 

아두이노 게임 콘솔 GitHub 저장소

 

휴대용 아두이노 게임 콘솔 프로젝트 이미지와 코드는 GitHub 저장소에서 찾을 수 있습니다. 소스 코드, 회로도, 그리고 추가 문서가 포함되어 있어 자신만의 휴대용 콘솔을 제작하고 수정하는 데 도움이 될 것입니다.

 

 

여기까지 입니다. 이 튜토리얼의 출처는 이 링크를 따라가세요. 저자에게 감사합니다.

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩