Spiel­au­to­mat RGB-Matrix

ESP32-Wroom

#include "Adafruit_NeoMatrix.h"

// Pins ESP32-Wroom, für UNO anpassen
#define RGBMatrixPin 15
#define TASTER 2
#define LAUTSPRECHER 26

// RGBMatrix -> Name der RGB-Matrix
/*
  die wichtigsten Parameter:
  Parameter 1 = Breite der Matrix (8)
  Parameter 2 = Höhe der Matrix (8)
  Parameter 3 = Name des Daten-Pins (RGBMatrixPin)
*/
Adafruit_NeoMatrix RGBMatrix = Adafruit_NeoMatrix
(
  8, 8, RGBMatrixPin,
  NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB + NEO_KHZ800
);

// Farben definieren
#define Rot RGBMatrix.Color(255, 0, 0)
#define Gruen RGBMatrix.Color(0, 255, 0)
#define Blau RGBMatrix.Color(0, 0, 255)
#define Magenta RGBMatrix.Color(139, 0, 139)
#define Pink RGBMatrix.Color(255, 20, 147)
#define Weiss RGBMatrix.Color(255, 255, 255)
#define Gelb RGBMatrix.Color(255, 255, 0)
#define Schwarz RGBMatrix.Color(0, 0, 0)
#define Rosa RGBMatrix.Color(236, 170, 170)
#define Orange RGBMatrix.Color(255, 165, 0)

// zufällige Farbe
#define Zufallsfarbe RGBMatrix.Color(random(1, 255), random(1, 255), random(1, 255))

// Variablen: Farbe -> Farbe der Zahl, Zahl -> zufällig ermittelte Zahl
int Farbe;
int Zahl;

// Array für die Zufallszahlen
int ZahlWert[2];

// Startwert für die Anzahl der Durchläufe
int Durchlauf = 0;

// Variable für den Zusand des Tasters
bool TasterGedrueckt = true;

void setup() 
{
  pinMode(TASTER, INPUT_PULLUP);

  // Helligkeit der RGBMatrix
  RGBMatrix.setBrightness(30);

  // RGBMatrix starten
  RGBMatrix.begin();

  // Zufallsgenerator starten
  randomSeed(analogRead(A0));

  // Pfeil anzeigen
  RGBMatrix.drawFastHLine(0, 3, 8, Gelb);
  RGBMatrix.drawFastHLine(0, 4, 8, Gelb);
  RGBMatrix.drawPixel(6, 2, Gelb);
  RGBMatrix.drawPixel(6, 5, Gelb);
  RGBMatrix.show();
}

void loop() 
{
  // solange der Taster gedrückt wird laufen zufällige Zahlen
  if (!digitalRead(TASTER)) 
  {
    TasterGedrueckt = false;
    RGBMatrix.clear();

    // ASCII-Werte der Zahlen: 49 = 1 ... 57 = 9
    Zahl = random(49, 57);

    // Farben der Zahlen definieren
    switch (Zahl) 
    {
      case 49:
        Farbe = Rot;
        break;
      case 50:
        Farbe = Gruen;
        break;
      case 51:
        Farbe = Blau;
        break;
      case 52:
        Farbe = Magenta;
        break;
      case 53:
        Farbe = Pink;
        break;
      case 54:
        Farbe = Weiss;
        break;
      case 55:
        Farbe = Gelb;
        break;
      case 56:
        Farbe = Rosa;
        break;
      case 57:
        Farbe = Orange;
        break;
    }

    // Zahl anzeigen
    RGBMatrix.drawChar(2, 1, char(Zahl), Farbe, Schwarz, 1);
    RGBMatrix.show();
    tone(LAUTSPRECHER, 1000, 30);
    delay(100);
  }

  // wenn der Taster nicht gedrückt wurde
  // und (&&) TasterGedrueckt false ist
  if (digitalRead(TASTER) && !TasterGedrueckt)
  {
    TasterGedrueckt = true;

    // aktuelle Zahl im Array speichern
    ZahlWert[Durchlauf] = Zahl;

    // wenn zwei Zahlen im Array gleich sind
    if (ZahlWert[0] == ZahlWert[1]) 
    {
      RGBMatrix.clear();

      // Pfeil anzeigen
      RGBMatrix.drawFastHLine(0, 3, 8, Gelb);
      RGBMatrix.drawFastHLine(0, 4, 8, Gelb);
      RGBMatrix.drawPixel(6, 2, Gelb);
      RGBMatrix.drawPixel(6, 5, Gelb);
      RGBMatrix.show();

      delay(1000);
      RGBMatrix.clear();

      // identische Zahlen anzeigen
      // erste Zahl anzeigen
      RGBMatrix.drawChar(2, 1, char(ZahlWert[0]), Farbe, Schwarz, 1);
      RGBMatrix.show();
      delay(2000);
      RGBMatrix.clear();

      // Pfeil anzeigen
      RGBMatrix.drawFastHLine(0, 3, 8, Gelb);
      RGBMatrix.drawFastHLine(0, 4, 8, Gelb);
      RGBMatrix.drawPixel(6, 2, Gelb);
      RGBMatrix.drawPixel(6, 5, Gelb);
      RGBMatrix.show();
      delay(2000);
      RGBMatrix.clear();
      
      // zweite Zahl anzeigen
      RGBMatrix.drawChar(2, 1, char(ZahlWert[1]), Farbe, Schwarz, 1);
      RGBMatrix.show();
      delay(2000);      

      // Smley
      RGBMatrix.clear();
      RGBMatrix.drawCircle(4, 4, 3, Gelb);
      RGBMatrix.drawPixel(3, 3, Gelb);
      RGBMatrix.drawPixel(5, 3, Gelb);
      RGBMatrix.show();

      // Melodie abspielen
      tone(LAUTSPRECHER, 100, 100);
      tone(LAUTSPRECHER, 200, 100);
      tone(LAUTSPRECHER, 300, 100);
      tone(LAUTSPRECHER, 400, 100);
      tone(LAUTSPRECHER, 300, 100);
      tone(LAUTSPRECHER, 200, 100);
      tone(LAUTSPRECHER, 100, 100);
    }

    // Durchlauf erhöhen
    Durchlauf ++;

    // wenn Durchlauf > 1 -> Wert zurücksetzen
    if (Durchlauf > 1) Durchlauf = 0;
  }
}

Wemos D1 Mini

#include "Adafruit_NeoMatrix.h"

// Pins ESP32-Wroom, für UNO anpassen
#define RGBMatrixPin D1
#define TASTER D3
#define LAUTSPRECHER D2

// RGBMatrix -> Name de D2D2-Matrix
/*
  die wichtigsten Parameter:
  Parameter 1 = Breite der Matrix (8)
  Parameter 2 = Höhe der Matrix (8)
  Parameter 3 = Name des Daten-Pins (RGBMatrixPin)
*/
Adafruit_NeoMatrix RGBMatrix = Adafruit_NeoMatrix
(
  8, 8, RGBMatrixPin,
  NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB + NEO_KHZ800
);

// Farben definieren
#define Rot RGBMatrix.Color(255, 0, 0)
#define Gruen RGBMatrix.Color(0, 255, 0)
#define Blau RGBMatrix.Color(0, 0, 255)
#define Magenta RGBMatrix.Color(139, 0, 139)
#define Pink RGBMatrix.Color(255, 20, 147)
#define Weiss RGBMatrix.Color(255, 255, 255)
#define Gelb RGBMatrix.Color(255, 255, 0)
#define Schwarz RGBMatrix.Color(0, 0, 0)
#define Rosa RGBMatrix.Color(236, 170, 170)
#define Orange RGBMatrix.Color(255, 165, 0)

// zufällige Farbe
#define Zufallsfarbe RGBMatrix.Color(random(1, 255), random(1, 255), random(1, 255))

// Variablen: Farbe -> Farbe der Zahl, Zahl -> zufällig ermittelte Zahl
int Farbe;
int Zahl;

// Array für die Zufallszahlen
int ZahlWert[2];

// Startwert für die Anzahl der Durchläufe
int Durchlauf = 0;

// Variable für den Zusand des Tasters
bool TasterGedrueckt = true;

void setup() 
{
  pinMode(TASTER, INPUT_PULLUP);

  // Helligkeit der RGBMatrix
  RGBMatrix.setBrightness(30);

  // RGBMatrix starten
  RGBMatrix.begin();

  // Zufallsgenerator starten
  randomSeed(analogRead(A0));

  // Pfeil anzeigen
  RGBMatrix.drawFastHLine(0, 3, 8, Gelb);
  RGBMatrix.drawFastHLine(0, 4, 8, Gelb);
  RGBMatrix.drawPixel(6, 2, Gelb);
  RGBMatrix.drawPixel(6, 5, Gelb);
  RGBMatrix.show();
}

void loop() 
{
  // solange der Taster gedrückt wird laufen zufällige Zahlen
  if (!digitalRead(TASTER)) 
  {
    TasterGedrueckt = false;
    RGBMatrix.clear();

    // ASCII-Werte der Zahlen: 49 = 1 ... 57 = 9
    Zahl = random(49, 57);

    // Farben der Zahlen definieren
    switch (Zahl) 
    {
      case 49:
        Farbe = Rot;
        break;
      case 50:
        Farbe = Gruen;
        break;
      case 51:
        Farbe = Blau;
        break;
      case 52:
        Farbe = Magenta;
        break;
      case 53:
        Farbe = Pink;
        break;
      case 54:
        Farbe = Weiss;
        break;
      case 55:
        Farbe = Gelb;
        break;
      case 56:
        Farbe = Rosa;
        break;
      case 57:
        Farbe = Orange;
        break;
    }

    // Zahl anzeigen
    RGBMatrix.drawChar(2, 1, char(Zahl), Farbe, Schwarz, 1);
    RGBMatrix.show();
    tone(LAUTSPRECHER, 1000, 30);
    delay(100);
  }

  // wenn der Taster nicht gedrückt wurde
  // und (&&) TasterGedrueckt false ist
  if (digitalRead(TASTER) && !TasterGedrueckt)
  {
    TasterGedrueckt = true;

    // aktuelle Zahl im Array speichern
    ZahlWert[Durchlauf] = Zahl;

    // wenn zwei Zahlen im Array gleich sind
    if (ZahlWert[0] == ZahlWert[1]) 
    {
      RGBMatrix.clear();

      // Pfeil anzeigen
      RGBMatrix.drawFastHLine(0, 3, 8, Gelb);
      RGBMatrix.drawFastHLine(0, 4, 8, Gelb);
      RGBMatrix.drawPixel(6, 2, Gelb);
      RGBMatrix.drawPixel(6, 5, Gelb);
      RGBMatrix.show();

      delay(1000);
      RGBMatrix.clear();

      // identische Zahlen anzeigen
      // erste Zahl anzeigen
      RGBMatrix.drawChar(2, 1, char(ZahlWert[0]), Farbe, Schwarz, 1);
      RGBMatrix.show();
      delay(2000);
      RGBMatrix.clear();

      // Pfeil anzeigen
      RGBMatrix.drawFastHLine(0, 3, 8, Gelb);
      RGBMatrix.drawFastHLine(0, 4, 8, Gelb);
      RGBMatrix.drawPixel(6, 2, Gelb);
      RGBMatrix.drawPixel(6, 5, Gelb);
      RGBMatrix.show();
      delay(2000);
      RGBMatrix.clear();
      
      // zweite Zahl anzeigen
      RGBMatrix.drawChar(2, 1, char(ZahlWert[1]), Farbe, Schwarz, 1);
      RGBMatrix.show();
      delay(2000);      

      // Smley
      RGBMatrix.clear();
      RGBMatrix.drawCircle(4, 4, 3, Gelb);
      RGBMatrix.drawPixel(3, 3, Gelb);
      RGBMatrix.drawPixel(5, 3, Gelb);
      RGBMatrix.show();

      // Melodie abspielen
      tone(LAUTSPRECHER, 100, 100);
      tone(LAUTSPRECHER, 200, 100);
      tone(LAUTSPRECHER, 300, 100);
      tone(LAUTSPRECHER, 400, 100);
      tone(LAUTSPRECHER, 300, 100);
      tone(LAUTSPRECHER, 200, 100);
      tone(LAUTSPRECHER, 100, 100);
    }

    // Durchlauf erhöhen
    Durchlauf ++;

    // wenn Durchlauf > 1 -> Wert zurücksetzen
    if (Durchlauf > 1) Durchlauf = 0;
  }
}

Ardui­no UNO

#include "Adafruit_NeoMatrix.h"

// Pins ESP32-Wroom, für UNO anpassen
#define RGBMatrixPin 7
#define TASTER 8
#define LAUTSPRECHER 9

// RGBMatrix -> Name der RGB-Matrix
/*
  die wichtigsten Parameter:
  Parameter 1 = Breite der Matrix (8)
  Parameter 2 = Höhe der Matrix (8)
  Parameter 3 = Name des Daten-Pins (RGBMatrixPin)
*/
Adafruit_NeoMatrix RGBMatrix = Adafruit_NeoMatrix
(
  8, 8, RGBMatrixPin,
  NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,
  NEO_GRB + NEO_KHZ800
);

// Farben definieren
#define Rot RGBMatrix.Color(255, 0, 0)
#define Gruen RGBMatrix.Color(0, 255, 0)
#define Blau RGBMatrix.Color(0, 0, 255)
#define Magenta RGBMatrix.Color(139, 0, 139)
#define Pink RGBMatrix.Color(255, 20, 147)
#define Weiss RGBMatrix.Color(255, 255, 255)
#define Gelb RGBMatrix.Color(255, 255, 0)
#define Schwarz RGBMatrix.Color(0, 0, 0)
#define Rosa RGBMatrix.Color(236, 170, 170)
#define Orange RGBMatrix.Color(255, 165, 0)

// zufällige Farbe
#define Zufallsfarbe RGBMatrix.Color(random(1, 255), random(1, 255), random(1, 255))

// Variablen: Farbe -> Farbe der Zahl, Zahl -> zufällig ermittelte Zahl
int Farbe;
int Zahl;

// Array für die Zufallszahlen
int ZahlWert[2];

// Startwert für die Anzahl der Durchläufe
int Durchlauf = 0;

// Variable für den Zusand des Tasters
bool TasterGedrueckt = true;

void setup() 
{
  pinMode(TASTER, INPUT_PULLUP);

  // Helligkeit der RGBMatrix
  RGBMatrix.setBrightness(30);

  // RGBMatrix starten
  RGBMatrix.begin();

  // Zufallsgenerator starten
  randomSeed(analogRead(A0));

  // Pfeil anzeigen
  RGBMatrix.drawFastHLine(0, 3, 8, Gelb);
  RGBMatrix.drawFastHLine(0, 4, 8, Gelb);
  RGBMatrix.drawPixel(6, 2, Gelb);
  RGBMatrix.drawPixel(6, 5, Gelb);
  RGBMatrix.show();
}

void loop() 
{
  // solange der Taster gedrückt wird laufen zufällige Zahlen
  if (!digitalRead(TASTER)) 
  {
    TasterGedrueckt = false;
    RGBMatrix.clear();

    // ASCII-Werte der Zahlen: 49 = 1 ... 57 = 9
    Zahl = random(49, 57);

    // Farben der Zahlen definieren
    switch (Zahl) 
    {
      case 49:
        Farbe = Rot;
        break;
      case 50:
        Farbe = Gruen;
        break;
      case 51:
        Farbe = Blau;
        break;
      case 52:
        Farbe = Magenta;
        break;
      case 53:
        Farbe = Pink;
        break;
      case 54:
        Farbe = Weiss;
        break;
      case 55:
        Farbe = Gelb;
        break;
      case 56:
        Farbe = Rosa;
        break;
      case 57:
        Farbe = Orange;
        break;
    }

    // Zahl anzeigen
    RGBMatrix.drawChar(2, 1, char(Zahl), Farbe, Schwarz, 1);
    RGBMatrix.show();
    tone(LAUTSPRECHER, 1000, 30);
    delay(100);
  }

  // wenn der Taster nicht gedrückt wurde
  // und (&&) TasterGedrueckt false ist
  if (digitalRead(TASTER) && !TasterGedrueckt)
  {
    TasterGedrueckt = true;

    // aktuelle Zahl im Array speichern
    ZahlWert[Durchlauf] = Zahl;

    // wenn zwei Zahlen im Array gleich sind
    if (ZahlWert[0] == ZahlWert[1]) 
    {
      RGBMatrix.clear();

      // Pfeil anzeigen
      RGBMatrix.drawFastHLine(0, 3, 8, Gelb);
      RGBMatrix.drawFastHLine(0, 4, 8, Gelb);
      RGBMatrix.drawPixel(6, 2, Gelb);
      RGBMatrix.drawPixel(6, 5, Gelb);
      RGBMatrix.show();

      delay(1000);
      RGBMatrix.clear();

      // identische Zahlen anzeigen
      // erste Zahl anzeigen
      RGBMatrix.drawChar(2, 1, char(ZahlWert[0]), Farbe, Schwarz, 1);
      RGBMatrix.show();
      delay(2000);
      RGBMatrix.clear();

      // Pfeil anzeigen
      RGBMatrix.drawFastHLine(0, 3, 8, Gelb);
      RGBMatrix.drawFastHLine(0, 4, 8, Gelb);
      RGBMatrix.drawPixel(6, 2, Gelb);
      RGBMatrix.drawPixel(6, 5, Gelb);
      RGBMatrix.show();
      delay(2000);
      RGBMatrix.clear();
      
      // zweite Zahl anzeigen
      RGBMatrix.drawChar(2, 1, char(ZahlWert[1]), Farbe, Schwarz, 1);
      RGBMatrix.show();
      delay(2000);      

      // Smley
      RGBMatrix.clear();
      RGBMatrix.drawCircle(4, 4, 3, Gelb);
      RGBMatrix.drawPixel(3, 3, Gelb);
      RGBMatrix.drawPixel(5, 3, Gelb);
      RGBMatrix.show();

      // Melodie abspielen
      tone(LAUTSPRECHER, 100, 100);
      tone(LAUTSPRECHER, 200, 100);
      tone(LAUTSPRECHER, 300, 100);
      tone(LAUTSPRECHER, 400, 100);
      tone(LAUTSPRECHER, 300, 100);
      tone(LAUTSPRECHER, 200, 100);
      tone(LAUTSPRECHER, 100, 100);
    }

    // Durchlauf erhöhen
    Durchlauf ++;

    // wenn Durchlauf > 1 -> Wert zurücksetzen
    if (Durchlauf > 1) Durchlauf = 0;
  }
}

Letzte Aktualisierung: 2. Jan 2024 @ 22:54