#include<TM1637Display.h>
/* Ein- und Ausgänge definiert */
int time_up = 1;
int reset = 2;
int led_red = 3;
int led_blue = 4;
int led_green = 5;
int button_red = 6;
int button_blue = 7;
int lcd_red = 8;
int clock_red = 9;
int lcd_blue = 10;
int clock_blue = 11;
int hupe = 12;
byte leds = 0;
TM1637Display displayR (clock_red, lcd_red); /* ROTES DISPLAY definiert */
TM1637Display displayB (clock_blue, lcd_blue); /* BLAUES DISPLAY definiert */
// Noch Display-Zustände definieren:
uint8_t all_on[] = {0xff, 0xff, 0xff, 0xff};
uint8_t all_off[] = {0x00, 0x00, 0x00, 0x00};
uint8_t digi_S[] = {0x6d, 0x00, 0x00, 0x00};
uint8_t dots[] = {0x80, 0x80, 0x80, 0x80};
const uint8_t OFF[] = {0b10111111, 0b10111111, 0b10111111, 0b10111111};
// TasterVariablen
int timeup;
int reset_taster;
// SpielVariablen
int rot;
int blau;
// FLAGS
bool rotangezeigt;
bool blauangezeigt;
// ZeitVariablen
int startDauer = 1;
unsigned long timeLimit;
unsigned long timeRemainingR;
unsigned long timeRemainingB;
int minutenR;
int sekundenR;
int minutenB;
int sekundenB;
void setup()
{
Serial.begin(9600);
displayR.setBrightness(0x0f);
displayR.setSegments(OFF);
displayB.setBrightness(3);
displayB.setSegments(OFF);
pinMode(time_up, INPUT_PULLUP); /*Digitalpin 1 wird time_up */
pinMode(reset, INPUT_PULLUP); /*Digitalpin 2 wird reset */
pinMode(led_red, OUTPUT); /*Digitalpin 3 wird led_red */
pinMode(led_blue, OUTPUT); /*Digitalpin 4 wird led_blue */
pinMode(led_green, OUTPUT); /*Digitalpin 5 wird led_green */
pinMode(button_red, INPUT_PULLUP); /*Digitalpin 6 wird button_red */
pinMode(button_blue, INPUT_PULLUP); /*Digitalpin 7 wird button_blue */
pinMode(lcd_red, OUTPUT); /*Digitalpin 8 wird lcd_red */
pinMode(clock_red, OUTPUT); /*Digitalpin 9 wird clock_red */
pinMode(lcd_blue, OUTPUT); /*Digitalpin 10 wird lcd_green */
pinMode(clock_blue, OUTPUT); /*Digitalpin 11 wird clock_green */
pinMode(hupe,OUTPUT); /*Digitalpin 12 wird hupe */
timeup = digitalRead(time_up);
reset_taster = digitalRead(reset);
// Ausgangsstellung Spielstart
timeLimit = startDauer;
displayR.showNumberDecEx(timeLimit, 0x50, true, 2, 4);
displayB.showNumberDecEx(timeLimit, 0x50, true, 2, 4);
timeRemainingR = timeLimit;
timeRemainingB = timeLimit;
digitalWrite(led_red, LOW); //led_red leuchtet nicht, Signal auf LOW
digitalWrite(led_blue, LOW); //led_blue leuchtet nicht, Signal auf LOW
digitalWrite(led_green, HIGH); //led_green leuchtet, Signal auf HIGH
minutenR = (timeRemainingR - 1);
sekundenR = 59;
minutenB = (timeRemainingB - 1);
sekundenB = 59;
blau = 0;
rot = 0;
rotangezeigt = true;
blauangezeigt = true;
}
void countdownR() {
if (rotangezeigt) {
displayR.showNumberDecEx(minutenR, 0x50, true, 2, 0);
rotangezeigt = false;
sekundenR = 59;
displayR.showNumberDecEx(sekundenR, 0, true, 2, 2);
delay(1000);
}
sekundenR = (sekundenR - 1);
displayR.showNumberDecEx(sekundenR, 0, true, 2, 2);
delay(1000);
if (sekundenR == 0) {
if (minutenR >= 1) {
minutenR = (minutenR - 1);
sekundenR = 59;
displayR.showNumberDecEx(minutenR, 0x50, true, 2, 0);
displayR.showNumberDecEx(sekundenR, 0, true, 2, 2);
} else {
blau = 1;
displayR.showNumberDecEx(0, 0x50, true, 2, 2);
displayR.showNumberDecEx(0, 0x50, true, 2, 0);
}
}
}
void countdownB() {
if (blauangezeigt) {
displayB.showNumberDecEx(minutenB, 0x50, true, 2, 0);
blauangezeigt = false;
sekundenB = 59;
displayB.showNumberDecEx(sekundenB, 0, true, 2, 2);
delay(1000);
}
sekundenB = (sekundenB - 1);
displayB.showNumberDecEx(sekundenB, 0, true, 2, 2);
delay(1000);
if (sekundenB == 0) {
if (minutenB >= 1) {
minutenB = (minutenB - 1);
sekundenB = 59;
displayB.showNumberDecEx(minutenB, 0x50, true, 2, 0);
displayB.showNumberDecEx(sekundenB, 0, true, 2, 2);
} else {
rot = 1;
int zahl = 0;
displayB.showNumberDecEx(zahl, 0x50, true, 2, 2);
displayB.showNumberDecEx(zahl, 0x50, true, 2, 0);
}
}
}
void timerhoch() {
if (timeup == HIGH) {
if (timeLimit <= 98) {
timeLimit++;
displayR.showNumberDecEx(timeLimit, 0x50, true, 2, 4);
displayB.showNumberDecEx(timeLimit, 0x50, true, 2, 4);
} else {
timeLimit = 1;
displayR.showNumberDecEx(timeLimit, 0x50, true, 2, 4);
displayB.showNumberDecEx(timeLimit, 0x50, true, 2, 4);
}
timeRemainingR = timeLimit;
timeRemainingB = timeLimit;
minutenR = (timeRemainingR - 1);
minutenB = (timeRemainingB - 1);
}
delay(200);
}
void loop() {
if (digitalRead(time_up) == LOW) {
timerhoch();
}
// TEAM ROT
if (digitalRead(button_red) == LOW && digitalRead(button_blue) == HIGH) //Abfrage der Bedingung, ob an Pin6 ein LOW Signal vorliegt =>Taster gedrückt
//Abfrage der Bedingung, ob an Pin7 ein LOW Signal vorliegt =>Taster nicht gedrückt
{
rot = 1;
blau = 0;
digitalWrite(led_red, HIGH); //led_red leuchtet, Signal auf HIGH
digitalWrite(led_blue, LOW); //led_blue leuchtet nicht, Signal auf LOW
}
// TEAM BLAU
if (digitalRead(button_red) == HIGH && digitalRead(button_blue) == LOW) //Abfrage der Bedingung, ob an Pin6 ein LOW Signal vorliegt =>Taster nicht gedrückt
//Abfrage der Bedingung, ob an Pin7 ein LOW Signal vorliegt =>Taster gedrückt
{
blau = 1;
rot = 0;
digitalWrite(led_red, LOW); //led_red leuchtet nicht, Signal auf LOW
digitalWrite(led_blue, HIGH); //led_blue leuchtet, Signal auf HIGH
}
// COUNTDOWN
if (blau == 1 && rot == 1)
{
digitalWrite(led_red, HIGH); //led_red leuchtet
digitalWrite(led_blue, LOW);
delay(500);
digitalWrite(led_blue, HIGH); //led_blue leuchtet
digitalWrite(led_red, LOW);
delay(500);
digitalWrite(led_red, HIGH); //led_red leuchtet
digitalWrite(led_blue, LOW);
delay(500);
digitalWrite(led_blue, HIGH); //led_blue leuchtet
digitalWrite(led_red, LOW);
delay(500);
digitalWrite(hupe, HIGH); //Hupe ist an
delay(500);
digitalWrite(hupe, LOW); //Hupe ist aus
delay(500);
}
if (rot == 1 && blau == 0) {
countdownR(); // Countdown für ROT läuft
}
if (blau == 1 && rot == 0) {
countdownB(); // Countdown für Blau läuft
}
// RESET SPIELZEIT
if (digitalRead(reset) == LOW) //Abfrage der Bedingung, ob an Pin6 ein LOW Signal vorliegt =>Taster nicht gedrückt
{
if (reset_taster == 1) {
{
displayR.setSegments(OFF);
displayB.setSegments(OFF);
delay(500);
timeLimit = startDauer;
minutenR = (timeLimit - 1);
minutenB = (timeLimit - 1);
sekundenR = 59;
sekundenB = 59;
displayR.showNumberDecEx(timeLimit, 0x50, true, 2, 0);
displayB.showNumberDecEx(timeLimit, 0x50, true, 2, 0);
displayR.showNumberDecEx(0, 0x50, true, 2, 2);
displayB.showNumberDecEx(0, 0x50, true, 2, 2);
blau = 0;
rot = 0;
blauangezeigt = true;
rotangezeigt = true;
}
}
digitalWrite(led_red, LOW); //led_red leuchtet nicht, Signal auf LOW
digitalWrite(led_blue, LOW); //led_blue leuchtet nicht, Signal auf LOW
digitalWrite(led_green, HIGH); //led_green leuchtet , Signal auf HIGH
}
}