Pixel Chaser : Jeu LED interactif à une touche avec Arduino Nano
Composants et fournitures
| Composant | Quantité |
|---|---|
| Arduino Nano R3 | 1 |
| Adafruit NeoPixel Ring : WS2812 5050 RGB LED | 1 |
| Plaque d'essai demi-taille (solderless) | 1 |
| Résistance 10 kΩ | 1 |
| Bouton poussoir 12 mm (SparkFun) | 1 |
| Fils de câblage (générique) | 1 |
Applications et services en ligne
- Arduino IDE
À propos du projet
J'étais développeur de jeux, et l'un des « saints graals » du jeu mobile est de créer le jeu ultime « à une touche » (one-tap).
Je voulais voir si je pouvais réaliser un jeu de « physique » à un clic génial en utilisant un microcontrôleur, un bouton et un retour visuel.
Voici PIXEL CHASER !
C'est un montage assez facile, allons-y !
De quels composants avons-nous besoin ?

- Arduino Nano (ou tout microcontrôleur avec 2 E/S disponibles)
- Anneau ou bande RGB « NeoPixel »
- Bouton momentané
- Résistance 10 kΩ
- Plaques d'essai (breadboards)
- Fils
Étape 1
Placer le Nano à une extrémité de la breadboard, connecteur USB au bord.

Étape 2
Placer le bouton à l'autre extrémité, au plus près du bord pour un accès facile.

Étape 3
Ajouter la résistance 10 kΩ entre un côté du bouton et le rail GND. C'est l'état LOW par défaut. La résistance évite un court-circuit VCC/GND quand le bouton est pressé (risque d'endommager le microcontrôleur).

Étape 4
Relier le côté opposé du bouton au rail VCC. Le bouton passe HIGH quand pressé.

Étape 5
Relier le côté GND du bouton à la broche D3 du Nano. On lira D3 pour connaître l'état du bouton.

Étape 6
Câbler l'anneau/bande RGB : VCC → rail VCC, GND → rail GND, DI (Data In) → D4 du Nano. D4 contrôlera les pixels.

Étape 7
Relier broche 5V du Nano → rail VCC, broche GND du Nano → rail GND.

Étape 8
Téléverser le code et jouer !

J'espère que ce projet vous a plu !
D'autres projets fun sur ma chaîne YouTube.
Suivez-moi :
Code
- Pixel Chaser Game - Code Arduino
Pixel Chaser Game - Code Arduino
/* ---------------------------------------------------------------------------
Pixel Chaser Game - v1.0.0 - 24/03/2019.
AUTHOR/LICENSE: Created by Seon Rozenblum - seon@unexpectedmaker.com
Copyright 2016 License: GNU GPL v3 https://www.gnu.org/licenses/gpl-3.0.html
LINKS: Blog: unexpectedmaker.com YOUTUBE: youtube.com/c/unexpectedmaker
DISCLAIMER: This software is furnished "as is", without technical support,
and with no warranty, express or implied, as to its usefulness for any purpose.
PURPOSE: Controller software for Reflow Master toaster oven by Unexpected Maker
HISTORY: 24/03/2019 v1.0.0 - Initial release. NOTE: Work in progress...
--------------------------------------------------------------------------- */
#include <Adafruit_NeoPixel.h>
#include "OneButton.h"
#define PIXELPIN 4
#define NUMPIXELS 24
#define BUTTON_TAP 3
OneButton buttonTAP(BUTTON_TAP, false);
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUMPIXELS, PIXELPIN, NEO_GRB + NEO_KHZ800);
int playerIndex = -1, playerIndexTrail = -1, playerDirection = 1;
float nextMove = 0, currentPlayerSpeed = 150;
unsigned long countdown = 0;
int enemyIndex = -1, coinIndex = -1;
int score = 0, bestScore = 0, lastScore = 0;
bool gameOver = false;
void setup() {
pinMode(BUTTON_TAP, INPUT);
buttonTAP.attachClick(singleClick);
buttonTAP.attachLongPressStart(longClick);
pixels.begin();
pixels.setBrightness(20);
countdown = millis() + 2000;
}
void loop() {
buttonTAP.tick();
if (gameOver) return;
SetLevel();
if (countdown > millis()) { pixels.show(); return; }
DisplayPlayer();
pixels.show();
}
void ClearLevel() {
for(int i=0;i= 0) pixels.setPixelColor(playerIndexTrail, pixels.Color(0,0,0));
if (playerIndex >= 0) {
pixels.setPixelColor(playerIndex, pixels.Color(0,100,0));
playerIndexTrail = playerIndex;
}
playerIndex += playerDirection;
if (playerIndex < 0) playerIndex = NUMPIXELS - 1;
else if (playerIndex == NUMPIXELS) playerIndex = 0;
pixels.setPixelColor(playerIndex, pixels.Color(0,255,0));
if (playerIndex == coinIndex) {
enemyIndex = -1; coinIndex = -1; score++;
currentPlayerSpeed = constrain(currentPlayerSpeed - 10, 50, 150);
ClearLevel();
pixels.setPixelColor(playerIndex, pixels.Color(0,255,0));
}
else if (playerIndex == enemyIndex) {
lastScore = score;
if (score >= bestScore) bestScore = score;
GameOver(); gameOver = true;
enemyIndex = -1; coinIndex = -1; playerIndex = -1;
}
}
}
void singleClick() {
if (countdown > millis()) return;
playerDirection = -playerDirection;
}
void longClick() {
gameOver = !gameOver;
if (gameOver) {
enemyIndex = -1; coinIndex = -1; playerIndex = -1; currentPlayerSpeed = 150; ClearLevel();
} else {
ClearLevel(); score = 0; currentPlayerSpeed = 150; countdown = millis() + 2000;
}
}
Processus de fabrication
- Construire un jeu gyroscopique temps réel avec Arduino Nano et capteur MPU-6050
- Dé numérique Arduino sur écran LCD 16x2 – Générateur aléatoire à bouton poussoir
- Créer un jeu Pong classique sur Arduino UNO avec écran OLED – Tutoriel étape par étape
- Créer votre propre jeu de roulette à 37 LED avec Arduino Nano
- Manette de jeu USB Arduino DIY – Construisez votre propre gamepad haute performance
- Jeu Breakout tactile Arduino : recréez l'arcade classique sur écran TFT 2,4″
- Jeu Tetris sur Matrice LED 16×8 DIY avec Arduino Nano
- Lévitation magnétique répulsive avec Arduino : circuit simple et guide DIY
- Automatiser le Jeu Chrome Dino avec Arduino et LDR