Morpion sur matrice LED MAX7219 avec boîtier en carton
Composants nécessaires
- 1 × Arduino UNO
- 1 × Matrice LED à points MAX7219
- 1 × Clavier à membrane (4×3)
Outils nécessaires
- Pistolet à colle chaude
Applications
- Arduino IDE
À propos du projet
Bonjour la communauté Hackster ! Je m'appelle Simone Adobs et c'est mon troisième projet publié ici. C'est mon premier projet où je construis une structure en carton, papier et colle chaude qui intègre l'Arduino et les composants.
Comment fonctionne le Morpion ?
Le principe est simple : lorsque vous appuyez sur un chiffre du clavier, l'Arduino allume la case correspondante sur la matrice.
- Changement de joueur : À chaque coup, l'Arduino passe automatiquement au joueur suivant.
- Détection de victoire : Lorsqu'un joueur gagne, l'Arduino affiche « 1 » si le joueur 1 gagne, « 2 » pour le joueur 2.
- Redémarrage : Appuyez sur la touche « 0 » du clavier pour réinitialiser la partie (redémarrage de l'Arduino via watchdog).
Reconnaissance des joueurs
Bien que la matrice ne soit que rouge, chaque joueur a un motif distinct formé par 2×2 LED :
- Joueur 1 : motif en forme de « \ »
- Joueur 2 : motif en forme de « / »
N'hésitez pas à commenter pour toute question, suggestion ou explication de code. Si vous aimez ce projet, laissez un like et regardez mes autres projets ! Essayez de créer votre propre structure ou de personnaliser la mienne et envoyez-moi une photo.
Bonne journée !
Simone d'Italie <3
Code
#include
#include
#include
#include
#define Reset_AVR() wdt_enable(WDTO_30MS); while(1) {}
LedControl lc = LedControl(12, 10, 11, 1);
bool player1 = true;
bool q1=false, q2=false, q3=false, q4=false, q5=false, q6=false, q7=false, q8=false, q9=false;
int row, col, rowPlays, colPlays, result, player, winner;
char hexaKeys[4][3] = {
{'1','2','3'},
{'4','5','6'},
{'7','8','9'},
{'*','0','#'}
};
int plays[3][3] = {{0,0,0},{0,0,0},{0,0,0}};
byte rowPins[4] = {8, 7, 6, 5};
byte colPins[3] = {4, 3, 2};
Keypad customKeypad = Keypad(makeKeymap(hexaKeys), rowPins, colPins, 4, 3);
void setup() {
lc.shutdown(0, false);
lc.setIntensity(0, 0);
lc.clearDisplay(0);
}
void loop() {
int customKey = customKeypad.getKey();
painting(customKey);
win(result);
if (winner == 1) {
lc.clearDisplay(0);
while (winner == 1) {
char customKey = customKeypad.getKey();
if (customKey == '0') Reset_AVR();
// Affichage du "1" pour joueur 1
lc.setLed(0,1,4,true); lc.setLed(0,2,5,true); lc.setLed(0,3,6,true);
lc.setLed(0,4,7,true); lc.setLed(0,4,6,true); lc.setLed(0,4,5,true);
lc.setLed(0,4,4,true); lc.setLed(0,4,3,true); lc.setLed(0,4,2,true);
lc.setLed(0,4,1,true); lc.setLed(0,4,0,true); lc.setLed(0,5,0,true);
lc.setLed(0,6,0,true); lc.setLed(0,3,0,true); lc.setLed(0,2,0,true);
}
} else if (winner == 2) {
lc.clearDisplay(0);
while (winner == 2) {
char customKey = customKeypad.getKey();
if (customKey == '0') Reset_AVR();
// Affichage du "2" pour joueur 2
lc.setLed(0,2,0,true); lc.setLed(0,3,0,true); lc.setLed(0,4,0,true);
lc.setLed(0,5,0,true); lc.setLed(0,2,1,true); lc.setLed(0,2,2,true);
lc.setLed(0,2,3,true); lc.setLed(0,2,4,true); lc.setLed(0,3,4,true);
lc.setLed(0,4,4,true); lc.setLed(0,5,4,true); lc.setLed(0,5,5,true);
lc.setLed(0,5,6,true); lc.setLed(0,5,7,true); lc.setLed(0,4,7,true);
lc.setLed(0,3,7,true); lc.setLed(0,2,7,true);
}
}
}
int round_player() {
if (player1) { player1 = false; result = 1; }
else { player1 = true; result = 2; }
return result;
}
void win(int player) {
if (plays[0][0]==player && plays[0][1]==player && plays[0][2]==player) winner=player;
else if (plays[1][0]==player && plays[1][1]==player && plays[1][2]==player) winner=player;
else if (plays[2][0]==player && plays[2][1]==player && plays[2][2]==player) winner=player;
else if (plays[0][0]==player && plays[1][0]==player && plays[2][0]==player) winner=player;
else if (plays[0][1]==player && plays[1][1]==player && plays[2][1]==player) winner=player;
else if (plays[0][2]==player && plays[1][2]==player && plays[2][2]==player) winner=player;
else if (plays[0][0]==player && plays[1][1]==player && plays[2][2]==player) winner=player;
else if (plays[0][2]==player && plays[1][1]==player && plays[2][0]==player) winner=player;
}
void switch_on_led(int col, int row, int colPlays, int rowPlays) {
if (player1) {
lc.setLed(0, col, row, true);
lc.setLed(0, col+1, row-1, true);
} else {
lc.setLed(0, col, row-1, true);
lc.setLed(0, col+1, row, true);
}
plays[rowPlays][colPlays] = round_player();
}
void painting(int bottone) {
switch (bottone) {
case 49: if (!q1) { switch_on_led(0,7,0,0); q1=true; } break;
case 50: if (!q2) { switch_on_led(3,7,0,1); q2=true; } break;
case 51: if (!q3) { switch_on_led(6,7,0,2); q3=true; } break;
case 52: if (!q4) { switch_on_led(0,4,1,0); q4=true; } break;
case 53: if (!q5) { switch_on_led(3,4,1,1); q5=true; } break;
case 54: if (!q6) { switch_on_led(6,4,1,2); q6=true; } break;
case 55: if (!q7) { switch_on_led(0,1,2,0); q7=true; } break;
case 56: if (!q8) { switch_on_led(3,1,2,1); q8=true; } break;
case 57: if (!q9) { switch_on_led(6,1,2,2); q9=true; } break;
case 48: Reset_AVR(); break;
}
}
Schéma de câblage
Processus de fabrication
- Créer un système Ambilight spectaculaire pour moniteur avec Arduino
- Créer un jeu Pong classique sur Arduino UNO avec écran OLED – Tutoriel étape par étape
- Construire un jeu « Opération » géant animé type Lego Minifigure avec Arduino
- Détecteur de fréquence audio Arduino — Mesurer le pic sonore avec module haute sensibilité
- Construisez votre propre Tamagotchi Arduino : Un animal de compagnie numérique DIY
- Interrupteur lumineux sans fil intelligent : Manipulateur d'interrupteur piloté par Arduino
- Pistolet à eau intelligent à détection de mouvement avec Arduino Nano
- Construire un minuteur à rebours Arduino fiable avec afficheur 7 segments SparkFun
- Appareils électroménagers à commande vocale : contrôle Bluetooth avec Google Assistant