Tres en raya con Arduino, matriz LED MAX7219 y carcasa de cartón
Componentes y materiales
| Componente | Cantidad |
|---|---|
| Arduino UNO | 1 |
| Matriz de puntos LED MAX7219 | 1 |
| Teclado de membrana | 1 |
Herramientas necesarias
- Pistola de silicona caliente
Aplicaciones y servicios en línea
- Arduino IDE
Sobre el proyecto
Hola comunidad de Hackster. Soy Simone Adobs y este es mi tercer proyecto publicado en Hackster. Es mi primer proyecto donde creo una estructura con cartón, papel y pistola de silicona, que contiene el Arduino y los demás componentes.
Este es un vídeo corto que muestra cómo funciona el Tres en raya:
¡Espero que os guste, porque le he dedicado varias horas! Ahora empecemos con el proyecto.
¿Cómo funciona el Tres en raya?
La respuesta es muy simple: al pulsar un número en el teclado, Arduino enciende la casilla correspondiente.
- ¿Puedo cambiar de jugador? Al encender una casilla, Arduino cambia automáticamente al turno del siguiente jugador.
- ¿Reconoce Arduino cuando gano? Cuando un jugador gana, Arduino escribe en la matriz de LED: "1" si gana el jugador 1, "2" si gana el jugador 2.
- ¿Puedo reiniciar la partida con un botón? Sí, pulsando el botón "0" en el teclado, Arduino se reinicia.
¿Cómo reconocer a cada jugador?
Aunque la matriz LED solo es roja, cada jugador tiene un patrón específico formado por 2x2 LED:
- Jugador 1: patrón "\"
- Jugador 2: patrón "/"
Para cualquier pregunta, sugerencia, crítica o explicación del código, no dudéis en comentar. Si os gusta el proyecto, dadle a like y echad un vistazo a mis otros proyectos.
¡Intentad hacer otra estructura o personalizar la mía y enviadme una foto!
¡Que tengáis un BUEN DÍA!
Simone desde Italia <3
Código
#include <Keypad.h>
#include <LedControl.h>
#include <avr/io.h>
#include <avr/wdt.h>
#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();
// Dibuja número 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();
// Dibuja número 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;
}
}
Esquemáticos
Proceso de manufactura
- Crea un Impresionante Sistema Ambilight para Monitor con Arduino
- Construya el clásico juego Pong en Arduino UNO con pantalla OLED: Tutorial paso a paso
- Construye un juego «Operación» animatrónico con minifigura LEGO gigante y Arduino
- Detector de frecuencia de audio con Arduino – Mide los picos de sonido más intensos
- Construye tu Propio Tamagotchi con Arduino: Mascota Digital DIY
- Controlador Inalámbrico Inteligente de Interruptores: Manipulador Remoto Basado en Arduino
- Pistola de Agua Inteligente Activada por Movimiento con Arduino Nano
- Construye un Temporizador Regresivo Fiable con Arduino y Pantalla de 7 Segmentos SparkFun
- Electrodomésticos activados por voz: Control Bluetooth con Google Assistant
- Girasol Arduino: Construye un Girasol Electrónico que Sigue al Sol
- Construye tu Propio Coche RC Porsche con Arduino: Guía Paso a Paso