Programm mit der Bibliothek TM1637_AKJ
// benötigte Bibliotheken
#include "TM1637.h"
#include "Bounce2.h"
// Spieler*in 1
int TASTER1 = 7;
// Spieler*in 2
int TASTER2 = 6;
// Definition Display
TM1637 Anzeige(2, 3);
// Summe der Augen der beiden Spieler*innen
int SummeSpieler1;
int SummeSpieler2;
// Anzahl der Runden, Start mit 1
int Runde = 1;
int Zahl;
// Reihenfolge der Spieler*innen festlegen, Spieler1 startet
bool StartSpieler1 = true;
bool StartSpieler2 = false;
// formatierter String für die Anzeige der Punkte
String Ergebnis;
// Bibliothek Bounce2
// "Prellverhinderer" für die Tasten starten
Bounce SP1 = Bounce();
Bounce SP2 = Bounce();
void setup()
{
pinMode(TASTER1, INPUT_PULLUP);
pinMode(TASTER2, INPUT_PULLUP);
// Instanzen des Objekts Bounce für jede Taste zuordnen
// Zeitintervall einstellen
SP1.attach(TASTER1);
SP1.interval(20);
SP2.attach(TASTER2);
SP2.interval(20);
// Modul starten
Anzeige.begin();
Anzeige.clearScreen();
// Helligkeit setzen(0-15)
Anzeige.setBrightness(4);
Anzeige.display("SP-1");
// Zufallsgenerator starten
randomSeed(analogRead(A0));
}
void loop()
{
// Minimum und Maximum der Würfelaugen
int Minimum = 1;
int Maximum = 7;
// 6 Runden spielen
while (Runde < 7)
{
// Spieler*in 1 ist an der Reihe StartSpieler1 -> true
if (StartSpieler1)
{
// Taste 1 gedrückt
if (SP1.update())
{
if (SP1.read() == LOW)
{
// Wechsel ⇒ Spieler2 ist an der Reihe
StartSpieler1 = !StartSpieler1;
StartSpieler2 = !StartSpieler2;
Anzeige.clearScreen();
// Aufruf der Funktion ZufallsZahl
SummeSpieler1 = SummeSpieler1 + ZufallsZahl(Minimum, Maximum);
// : einschalten
Anzeige.colonOn();
/*
Ergebnis formatieren:
beide Zahlen < 10 -> führende 0 setzen
eine der Zahlen < 10 -> führende 0 setzen
*/
if (SummeSpieler1 < 10 && SummeSpieler2 < 10) Ergebnis = "0" + String(SummeSpieler1) + "0" + String(SummeSpieler2);
else if (SummeSpieler1 >= 10 && SummeSpieler2 >= 10) Ergebnis = String(SummeSpieler1) + String(SummeSpieler2);
else if (SummeSpieler1 < 10) Ergebnis = "0" + String(SummeSpieler1) + String(SummeSpieler2);
else if (SummeSpieler2 < 10 ) Ergebnis = String(SummeSpieler1) + "0" + String(SummeSpieler2);
Anzeige.display(Ergebnis);
delay(2000);
// : ausschalten
Anzeige.colonOff();
Anzeige.display("SP-2");
}
}
}
// Spieler*in 2 ist an der Reihe StartSpieler2 -> true
if (StartSpieler2)
{
// Taste 2 gedrückt
if (SP2.update())
{
if (SP2.read() == LOW)
{
// Wechsel ⇒ Spieler1 ist an der Reihe
StartSpieler1 = !StartSpieler1;
StartSpieler2 = !StartSpieler2;
Anzeige.clearScreen();
// Aufruf der Funktion ZufallsZahl
SummeSpieler2 = SummeSpieler2 + ZufallsZahl(Minimum, Maximum);
Anzeige.colonOn();
if (SummeSpieler1 < 10 && SummeSpieler2 < 10) Ergebnis = "0" + String(SummeSpieler1) + "0" + String(SummeSpieler2);
else if (SummeSpieler1 >= 10 && SummeSpieler2 >= 10) Ergebnis = String(SummeSpieler1) + String(SummeSpieler2);
else if (SummeSpieler1 < 10) Ergebnis = "0" + String(SummeSpieler1) + String(SummeSpieler2);
else if (SummeSpieler2 < 10 ) Ergebnis = String(SummeSpieler1) + "0" + String(SummeSpieler2);
Anzeige.display(Ergebnis);
delay(2000);
Anzeige.colonOff();
Anzeige.clearScreen();
Anzeige.display("SP-1");
// nur bei Spieler2 Runde hochzählen, Spieler1 hat angefangen
Runde ++;
}
}
}
}
// unentschieden
if (SummeSpieler1 == SummeSpieler2)
{
Anzeige.clearScreen();
Anzeige.display(" = =");
delay(2000);
// alle Werte zurücksetzen
Runde = 1;
SummeSpieler1 = 0;
SummeSpieler2 = 0;
Anzeige.clearScreen();
Anzeige.display("SP-1");
}
// Sieger Spieler1
if (SummeSpieler1 > SummeSpieler2)
{
Anzeige.display("SIEG");
delay(2000);
Anzeige.clearScreen();
Anzeige.display("SP-1");
delay(2000);
// Punktestand anzeigen
Anzeige.clearScreen();
// Anzeige rechtsbündig formatieren
if (SummeSpieler1 < 10) Anzeige.display(SummeSpieler1, false, false, 3);
else Anzeige.display(SummeSpieler1, false, false, 2);
delay(2000);
// Neustart: alle Werte zurücksetzen, SP-1 anzeigen
Runde = 1;
SummeSpieler1 = 0;
SummeSpieler2 = 0;
Anzeige.clearScreen();
Anzeige.display("SP-1");
}
// Sieger Spieler2
if (SummeSpieler1 < SummeSpieler2)
{
Anzeige.display("SIEG");
delay(2000);
Anzeige.clearScreen();
Anzeige.display("SP-2");
delay(2000);
Anzeige.clearScreen();
if (SummeSpieler2 < 10) Anzeige.display(SummeSpieler2, false, false, 3);
else Anzeige.display(SummeSpieler2, false, false, 2);
delay(2000);
// Neustart: alle Werte zurücksetzen, SP-1 anzeigen
Runde = 1;
SummeSpieler1 = 0;
SummeSpieler2 = 0;
Anzeige.clearScreen();
Anzeige.display("SP-1");
}
}
int ZufallsZahl(int Minimum, int Maximum)
{
int Zahl = random(Minimum, Maximum);
return Zahl;
}
Programm mit der Bibliothek TM1637
Benötigte Bibliothek

#include "TM1637Display.h"
#include "Bounce2.h"
// Spieler*in 1
int TASTER1 = 7;
// Spieler*in 2
int TASTER2 = 6;
// Definition Display
TM1637Display Anzeige(2, 3);
// Summe der Augen der beiden Spieler*innen
int SummeSpieler1;
int SummeSpieler2;
// Anzahl der Runden, Start mit 1
int Runde = 1;
int Zahl;
// Reihenfolge der Spieler*innen festlegen, Spieler1 startet
bool StartSpieler1 = true;
bool StartSpieler2 = false;
// formatierter String für die Anzeige der Punkte
String Ergebnis;
// Bibliothek Bounce2
// "Prellverhinderer" für die Tasten starten
Bounce SP1 = Bounce();
Bounce SP2 = Bounce();
// Array für SP-1
byte SPIELER1[] =
{
SEG_A | SEG_F | SEG_G | SEG_C | SEG_D, // S
SEG_E | SEG_F | SEG_A | SEG_B | SEG_G, // P
SEG_G, // -
SEG_B | SEG_C, // 1
};
// Array für SP-2
const byte SPIELER2[] =
{
SEG_A | SEG_F | SEG_G | SEG_C | SEG_D, // S
SEG_E | SEG_F | SEG_A | SEG_B | SEG_G, // P
SEG_G, // -
SEG_A | SEG_B | SEG_G | SEG_E | SEG_D, // 2
};
// Array für SIEG
byte SIEG[] =
{
SEG_A | SEG_F | SEG_G | SEG_C | SEG_D, // S
SEG_B | SEG_C, // I
SEG_A | SEG_F | SEG_G | SEG_E | SEG_D, // E
SEG_A | SEG_F | SEG_E | SEG_D | SEG_C | SEG_G, // G
};
// Array für UNENTSCHIEDEN
byte UNENTSCHIEDEN[] =
{
SEG_G | SEG_D, // =
};
// Array für alle Segmente löschen
byte AnzeigeLoeschen[] = { 0, 0, 0, 0 };
void setup()
{
pinMode(TASTER1, INPUT_PULLUP);
pinMode(TASTER2, INPUT_PULLUP);
// Instanzen des Objekts Bounce für jede Taste zuordnen
// Zeitintervall einstellen
SP1.attach(TASTER1);
SP1.interval(20);
SP2.attach(TASTER2);
SP2.interval(20);
Anzeige.setSegments(AnzeigeLoeschen);
// Helligkeit setzen(0-15)
Anzeige.setBrightness(2);
// Spieler 1 beginnt
Anzeige.setSegments(SPIELER1);
// Zufallsgenerator starten
randomSeed(analogRead(0));
}
void loop()
{
// Minimum und Maximum der Würfelaugen
int Minimum = 1;
int Maximum = 7;
// 6 Runden spielen
while (Runde < 7)
{
// Spieler 1 ist an der Reihe StartSpieler1 → true
if (StartSpieler1)
{
// Taste 1 gedrückt
if (SP1.update())
{
if (SP1.read() == LOW)
{
// Wechsel → Spieler2 ist an der Reihe
StartSpieler1 = !StartSpieler1;
StartSpieler2 = !StartSpieler2;
delay(200);
Anzeige.setBrightness(2);
Anzeige.clear();
// Aufruf der Funktion ZufallsZahl
SummeSpieler1 = SummeSpieler1 + ZufallsZahl(Minimum, Maximum);
/*
Punkte anzeigen
showNumberDecEx(Zahl, Doppelpunkt anzeigen
(64 oder hexadezimal 0x40),
false/true(führende 0 verbergen/anzeigen),
Position (1-4), 0 (rechtsbündig))
*/
Anzeige.showNumberDecEx(SummeSpieler2, 64, true, 4, 0);
Anzeige.showNumberDecEx(SummeSpieler1, 64, true, 2, 0);
delay(2000);
Anzeige.setSegments(SPIELER2);
}
}
}
// Spieler 2 ist an der Reihe StartSpieler2 → true
if (StartSpieler2)
{
if (SP2.update())
{
if (SP2.read() == LOW)
{
// Wechsel → Spieler1 ist an der Reihe
StartSpieler1 = !StartSpieler1;
StartSpieler2 = !StartSpieler2;
delay(200);
Anzeige.setBrightness(2);
Anzeige.clear();
// Aufruf der Funktion ZufallsZahl
SummeSpieler2 = SummeSpieler2 + ZufallsZahl(Minimum, Maximum);
Anzeige.showNumberDecEx(SummeSpieler2, 64, true, 4, 0);
Anzeige.showNumberDecEx(SummeSpieler1, 64, true, 2, 0);
delay(2000);
Anzeige.setSegments(SPIELER1);
// nur bei Spieler2 Runde hochzählen, Spieler1 hat angefangen
Runde++;
}
}
}
}
// unentschieden
if (SummeSpieler1 == SummeSpieler2)
{
Anzeige.clear();
Anzeige.setSegments(UNENTSCHIEDEN, 1, 2);
delay(2000);
Anzeige.setSegments(SPIELER1);
// alle Werte zurücksetzen
Runde = 1;
SummeSpieler1 = 0;
SummeSpieler2 = 0;
}
// Sieger Spieler1
if (SummeSpieler1 > SummeSpieler2)
{
Anzeige.setSegments(SIEG);
delay(2000);
Anzeige.setSegments(SPIELER1);
delay(2000);
Anzeige.showNumberDec(SummeSpieler1, false);
delay(2000);
Anzeige.setSegments(SPIELER1);
// alle Werte zurücksetzen
Runde = 1;
SummeSpieler1 = 0;
SummeSpieler2 = 0;
}
// Sieger Spieler2
if (SummeSpieler1 < SummeSpieler2)
{
Anzeige.setSegments(SIEG);
delay(2000);
Anzeige.setSegments(SPIELER2);
delay(2000);
Anzeige.showNumberDec(SummeSpieler2, false);
delay(2000);
Anzeige.setSegments(SPIELER1);
// alle Werte zurücksetzen
Runde = 1;
SummeSpieler1 = 0;
SummeSpieler2 = 0;
}
}
int ZufallsZahl(int Minimum, int Maximum)
{
int Zahl = random(Minimum, Maximum);
return Zahl;
}
Letzte Aktualisierung: