Spiel­au­to­mat mit einer RGB-Matrix

Lese­zeit: 5 Minu­ten

Lösung
Seite als PDF

Wird der Tas­ter gedrückt zeigt die RGB-Matrix in zufäl­li­ger Rei­hen­fol­ge und in ver­schie­de­nen Far­ben Zah­len zwi­schen 1 und 9. Zusätz­lich wird der Wech­sel der Zah­len mit einem kur­zen Ton ergänzt. Wenn der Tas­ter los­ge­las­sen wird, ver­gleicht das Pro­gramm die letz­ten bei­den Zah­len und zeigt die über­ein­stim­men­den Zah­len an.

So sieht es aus und hört es sich an:

Benö­tig­te Bauteile:

  • RGB-Matrix 8×8
  • Laut­spre­cher
  • Tas­ter
  • Lei­tungs­dräh­te

Board instal­lie­ren

Baue die Schal­tung auf.
(Fah­re mit der Maus über das Bild, um die Bezeich­nun­gen der Bau­tei­le zu sehen)

Benö­tig­te Biblio­thek installieren

Bin­de die benö­tig­te Biblio­thek ein und defi­nie­re die Variablen:

#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;

Der set­up-Teil:

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();
}

Der loop-Teil:

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;
  }
}

Startseite
Aufgaben A-Z
Suchen
Downloads
Fehlermeldungen
Seite als PDF

Ver­wand­te Aufgaben:


Letzte Aktualisierung: 16. Feb 2024 @ 9:46