Industrielle Fertigung
Industrielles Internet der Dinge | Industrielle Materialien | Gerätewartung und Reparatur | Industrielle Programmierung |
home  MfgRobots >> Industrielle Fertigung >  >> Manufacturing Technology >> Herstellungsprozess

Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse

Komponenten und Zubehör

Komponente Menge
Arduino UNO 1
MAX7219 LED-Dot-Matrix 1
Membran-Tastenfeld (Keypad) 1

Benötigte Werkzeuge

Apps und Onlinedienste

Über dieses Projekt

Hallo Hackster-Community! Ich bin Simone Adobs und dies ist mein drittes Projekt auf Hackster. Erstmals habe ich ein Gehäuse aus Karton, Papier und Heißkleber gebaut, das Arduino und die Komponenten aufnimmt.

Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
Projekt von vorne
Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
Seitenansicht
Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
Rückansicht

Ich hoffe, es gefällt euch – ich habe einige Stunden darin investiert! Jetzt geht's los.

Wie funktioniert das Tic Tac Toe?

Ganz einfach: Drückt man eine Zahl auf dem Keypad, schaltet der Arduino das entsprechende Feld auf der LED-Matrix an.

Wie erkenne ich, welcher Spieler dran ist?

Obwohl die Matrix nur rot leuchtet, hat jeder Spieler ein eigenes 2×2-LED-Muster:

Bei Fragen, Anregungen oder Code-Erklärungen gerne kommentieren. Wenn euch das Projekt gefällt, hinterlasst ein Like und schaut euch meine anderen Projekte an!

Versucht, ein eigenes Gehäuse zu bauen oder meins anzupassen – und schickt mir ein Foto!

Einen SCHÖNEN TAG noch!
Simone aus Italien <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();
      // Anzeige "1" für Spieler 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();
      // Anzeige "2" für Spieler 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);  // Muster "\"
  } else {
    lc.setLed(0, col, row-1, true);
    lc.setLed(0, col+1, row, true);    // Muster "/"
  }
  plays[rowPlays][colPlays] = round_player();
}

void painting(int bottone) {
  switch (bottone) {
    case 49:  // '1'
      if (!q1) { switch_on_led(0, 7, 0, 0); q1 = true; }
      break;
    case 50:  // '2'
      if (!q2) { switch_on_led(3, 7, 0, 1); q2 = true; }
      break;
    case 51:  // '3'
      if (!q3) { switch_on_led(6, 7, 0, 2); q3 = true; }
      break;
    case 52:  // '4'
      if (!q4) { switch_on_led(0, 4, 1, 0); q4 = true; }
      break;
    case 53:  // '5'
      if (!q5) { switch_on_led(3, 4, 1, 1); q5 = true; }
      break;
    case 54:  // '6'
      if (!q6) { switch_on_led(6, 4, 1, 2); q6 = true; }
      break;
    case 55:  // '7'
      if (!q7) { switch_on_led(0, 1, 2, 0); q7 = true; }
      break;
    case 56:  // '8'
      if (!q8) { switch_on_led(3, 1, 2, 1); q8 = true; }
      break;
    case 57:  // '9'
      if (!q9) { switch_on_led(6, 1, 2, 2); q9 = true; }
      break;
    case 48:  // '0' - Reset
      Reset_AVR();
      break;
  }
}

Schaltplan

Arduino Tic Tac Toe mit MAX7219 LED-Matrix und Karton-Gehäuse
Fritzing-Schaltplan (tris_1Nd6QnEjNE.fzz)

Herstellungsprozess

  1. Monitor-Ambilight selbst bauen mit Arduino Nano & WS2812B LEDs
  2. Klassisches Pong-Spiel auf Arduino UNO mit OLED-Display bauen – Schritt-für-Schritt-Tutorial
  3. Riesige Lego-Minifigur als Animatronic-Operation-Game mit Arduino bauen
  4. Arduino Audio-Frequenz-Detektor – Lauteste Schallpeaks mit hochsensiblem Modul messen
  5. Selbstbau-Tamagotchi: Digitales Haustier mit Arduino
  6. Intelligenter kabelloser Lichtschalter-Controller: Arduino-basierter Fernschalter-Manipulator
  7. Intelligente, bewegungsaktivierte Wasserpistole mit Arduino Nano
  8. Zuverlässigen Arduino-Countdown-Timer mit SparkFun 7-Segment-Display bauen
  9. Sprachgesteuerte Haushaltsgeräte: Bluetooth-Steuerung mit Google Assistant
  10. Arduino-Sonnenblume: Elektronischer Sonnen-Tracker selbst bauen