Verkabelung mit Balluff-Modulen


Google-Suche auf MEINE-SCHALTUNG.de :





Online Rechner

Chronik

Dauerkalender


Farbenspiel mit RGB-LED


Farbige Taster


Das Farbenspiel ist ein einfaches Reaktionsspiel. Es kann genauso gut von nur einer Person als auch von mehreren gespielt werden. Grundsätzlich besteht das Spiel aus vier Tastern, die jeweils andere Farbe haben, und einer RGB-Leuchtdiode.
Die Regeln sind simpel. Mit der RGB-Leuchtdiode wird vorgegeben, welcher Taster gedrückt werden soll. Leuchtet z.B. die Leuchtdiode rot auf, so muss der rote Taster betätigt werden. Gespielt wird mit vier Farben: Blau, Gelb, Grün und Rot. Die Schwierigkeit des Spiels besteht darin, den Taster in einer vorgegebenen Zeit zu betätigen. Gelingt es nicht, wird das Spiel unterbrochen. In diesem Fall leuchtet eine zweite RGB-Leuchtdiode, die Status-LED, rot auf. Auf einer 7-Segmentanzeige kann man dann anschließend den Spielzähler, der anzeigt, wie viele gelungene Versuche man absolviert hat, ablesen. Falls mehrere Personen an dem Spiel teilnehmen, kann auf diesem Wege der Gewinner ermittelt werden. Gewonnen hat der Spieler, bei dem der Zähler den höchsten Stand erreicht hat.

RGB-Leuchtdioden

RGB-Leuchtdiode

Bei einer RGB-LED handelt es sich um eine Kombination aus 3 LEDs. Jede einzelne Leuchtdiode hat eine andere Farbe: Rot, Grün und Blau. Jede diesen Leuchtdioden kann separat angesteuert werden. Je nachdem, welche einzelne Leuchtdiode zugeschaltet wurde und mit welcher Intensität sie leuchtet, gibt die RGB-LED als Ergebnis eine andere Farbe aus. Beispielsweise ergeben die Leuchtdioden Rot und Grün eine gelbe Farbe der RGB-LED.

Arduino Uno

Arduino Uno

Der Spielverlauf wird von Arduino Uno verwaltet.

Arduino


7-Segmentanzeige mit TM1637

Anzeige mit TM1637

7-Segmentanzeige mit TM1637

Schaltungen mit TM1637


Der Schaltplan

Schaltplan

Schaltplan

Das Programm (Sketch)

// *****************************************************************************************
// Farbenspiel mit RGB-LED
// Arduino UNO
// IDE 1.8.16
// *****************************************************************************************

#include <TM1637Display.h>                                  // Display Bibliothek
#define CLK              3
#define DIO              4
TM1637Display display(CLK, DIO);

#define Taster_Start    A4                                  // Analoger Eingang A4
#define Schalter_Level  A5                                  // Analoger Eingang A5

#define Taster_Rot      10                                  // Digitale Eingänge Taster
#define Taster_Gruen    11
#define Taster_Gelb     12
#define Taster_Blau     13

#define RGB2_rot         5                                  // Info RGB-LED
#define RGB2_gruen       6

#define RGB1_rot         7                                  // Spiel RGB-LED
#define RGB1_gruen       8
#define RGB1_blau        9           

bool Verloren;

void setup() {                                              // SetUp
    
    display.setBrightness(20);                              // Anzeige Helligkeit
    display.clear();
    
    pinMode (Schalter_Level, INPUT_PULLUP);                 // Eingänge
    pinMode (Taster_Start, INPUT_PULLUP);
    pinMode (Taster_Rot, INPUT_PULLUP);
    pinMode (Taster_Gruen, INPUT_PULLUP);
    pinMode (Taster_Gelb, INPUT_PULLUP);
    pinMode (Taster_Blau, INPUT_PULLUP);

    pinMode (RGB1_gruen, OUTPUT);                           // Ausgänge
    pinMode (RGB1_rot, OUTPUT);
    pinMode (RGB1_blau, OUTPUT);
    
    pinMode (RGB2_gruen, OUTPUT);
    pinMode (RGB2_rot, OUTPUT);    
}

void loop() {                                               // Hauptprogramm
    
    int Level = 300;                                        // Level Umschaltung
    if (digitalRead (Schalter_Level) == LOW) {
      Level = 150;
    }
    
    if (digitalRead (Taster_Start) == LOW) {                // Spiel Start
        Alles_Aus ();                                       // Alle LEDs aus
        Display_Ausgabe (0);                                // 7-Segmentanzeige nullen
        int Zaehler = -1;                                   // Zähler Startwert
        Verloren = false;                                   // "Verloren" Vorbelegung
        for (int i = 0; i < 5; i++) {                       // Grüne LED blinkt
            digitalWrite (RGB2_gruen, HIGH);
            delay (200);
            digitalWrite (RGB2_gruen, LOW);
            delay (500);
        }
        while (!Verloren) {                                 // Spielschleife Start
            Alles_Aus ();                                   // Alle LEDs aus
            delay (40);                                     // Wartezeit für AUS-Zustand
            int Farbe = random (1,5);                       // Neue farbe via Zufall
            Zaehler ++;                                     // Zähler inkrementieren
            Display_Ausgabe (Zaehler);                      // Zählerstand anzeigen
            bool Richtige_Taste = false;                    // Hilfsvariable "Richtige_Taste"
            
            for (int i = 0; i < Level; i++) {               // Abfrage Schleife Start
                switch (Farbe) { 
                    case 1: {
                            digitalWrite (RGB1_blau, HIGH);            // Spiel RGB-LED ein
                            if (digitalRead (Taster_Blau) == LOW) {    // Richtige Taste betätigt?
                                Richtige_Taste = true;                 // Hilfsvariable auf TRUE
                            }
                            break;
                        }
                    case 2: {
                            digitalWrite (RGB1_rot, HIGH); 
                            digitalWrite (RGB1_gruen, HIGH); 
                            if (digitalRead (Taster_Gelb) == LOW) {
                                Richtige_Taste = true;
                            }
                            break;
                        }
                    case 3: {
                            digitalWrite (RGB1_gruen, HIGH);  
                            if (digitalRead (Taster_Gruen) == LOW) {
                                Richtige_Taste = true;
                            }
                            break;
                        }
                    case 4: {
                            digitalWrite (RGB1_rot, HIGH);   
                            if (digitalRead (Taster_Rot) == LOW) {
                                Richtige_Taste = true;
                            }
                            break;
                        }                
                }
                Verloren = true;                                       // "Verloren" mit TRUE vorbelegen
                if (Richtige_Taste) {                                  // Richtige Taste betätigt?
                    Verloren = false;                                  // Ja. Spiel geht weiter.
                }                
                delay (5);                                             // Wartezeit 
            }
        }
    }
    if (Verloren) {                                                    // Falsche Taste oder zu spät
        digitalWrite (RGB2_rot, HIGH);                                 // Spiel Aus, rote LED an.
    }
}

void Display_Ausgabe (int Zaehler) {                                   // Aktuellen Zählerstand anzeigen
  
    String Ausgabe = String (Zaehler);                                 // Zahl in String umwandeln
    display.showNumberDecEx(Ausgabe.toInt(), 0b00000000, false, 4, 4); // Ausgabe Display
}

void Alles_Aus () {                                                    // Hilfsprogramm alle LEDs aus
             
    digitalWrite (RGB1_rot, LOW); 
    digitalWrite (RGB1_gruen, LOW);
    digitalWrite (RGB1_blau, LOW);
    digitalWrite (RGB2_rot, LOW);
    digitalWrite (RGB2_gruen, LOW);
}

// *****************************************************************************************       
      

Das Spiel wird mit dem Taster S5 gestartet. Gleich nachdem der Taster betätigt wurde, leuchtet die Leuchtdiode RGB-LED2 fünf Mal grün auf. Direkt danach geht das Programm in eine Endlosschleife (while (!Verloren)), die nur dann verlassen werden kann, wenn die Variable „Verloren“ auf TRUE geht. Dies geschieht dann, wenn der Spieler es nicht geschafft hat, den vorgegebenen Taster in dem festgelegten Zeitintervall zu betätigen. Sonst wird nach jedem richtigen Tastendruck via Zufall eine neue Farbe gewählt und damit dem Spieler eine neue Aufgabe gestellt.
Jeder erfolgreiche Tastendruck wird von dem Spielzähler (Variable Zähler) erfasst. Der Zählerstand wird dann jeweils um 1 inkrementiert. Der aktuelle Zählerstand wird auf einer 7-Segmentanzeige angezeigt.
Mit der Variable „Level“ wird das Zeitintervall, in dem der richtige Taster gedrückt werden muss, festgelegt. Die Variable „Level“ bestimmt Anzahl der Durchläufe der FOR-Schleife, die nach jedem Durchlauf mit delay(5) kurz angehalten wird. Die Variable „Level“ kann mit dem Taster S6 bestimmt werden. In der Ausführung stehen zwei Spiellevel zur Verfügung. Bei Bedarf können mit weiteren Schaltern mehrere Spiellevels eingeführt werden.
In dem Beispiel sind die Taster S5 und der Schalter S6 an die analogen Eingänge des Arduino angeschlossen. Sie werden im Programm als digitalen Eingänge behandelt und ausgewertet.

Die Testschaltung

Testschaltung

Testschaltung

Kurzvideo


Weitere Themen:


Google-Suche auf MEINE-SCHALTUNG.de :


Home Impressum Datenschutz