#define spieler1 3
#define spieler2 2
#include <Wire.h> // Wire Bibliothek einbinden
#include <LiquidCrystal_I2C.h> // LiquidCrystal_I2C Bibliothek einbinden
LiquidCrystal_I2C lcd(0x27, 16, 2); //Modell: 0x27 //Init LCD: Adresse, Zeichen pro Zeile, Anzahl Zeilen
int sekunden = 0;
int minuten = 0;
int counter1 = 0;
int counter2 = 0;
unsigned long previousMillis = 0; // will store last time LED was updated
const long interval = 1000; // 1 sekunde
int ButtonStatus = 1;
void setup()
{
pinMode(spieler1, INPUT_PULLUP);
pinMode(spieler2, INPUT_PULLUP);
//interruptNummer, ISR, mode
attachInterrupt(1,counter_1,FALLING); // 1.Parameter = 1=pin3,0=pin2 2.Parameter = funktion
attachInterrupt(0,counter_2,FALLING); // 3. Parameter = Zustandsbedienung
lcd.init(); // Im Setup wird der LCD gestartet
lcd.backlight(); // Hintergrundbeleuchtung einschalten (hellgruen)
lcdZeitausgabe(); // Zeitausgabe Funktion
lcdSpielstandanzeige(); // Spielstandanzeige Funktion
}
void loop()
{
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval)
{
previousMillis = currentMillis;
sekunden++;
if(sekunden >= 60)
{
sekunden = 0;
minuten++;
}
lcdZeitausgabe();
}
if (ButtonStatus == 1)
{
delay(100); // determines the length of checking time
ButtonStatus = 0;
int reading1 = digitalRead(spieler1);
int reading2 = digitalRead(spieler2);
if ((reading1 == HIGH)|| (reading2 == HIGH))
{
lcdSpielstandanzeige();
}
}
}
void lcdZeitausgabe()
{
//Spielzeit
lcd.setCursor(0, 0);
lcd.print("Zeit: ");
lcd.setCursor(7, 0);
lcd.print(minuten);
lcd.setCursor(9, 0);
lcd.print(":");
lcd.setCursor(10, 0);
if(sekunden < 10)
{
lcd.print("0"); //so werden Dezimalzahlen und Einheiten korrekter angezeigt
lcd.print(sekunden);
}
else
{
lcd.print(sekunden);
}
}
void lcdSpielstandanzeige()
{
lcd.setCursor(0, 1);
lcd.print("Stand: ");
lcd.setCursor(7, 1);
lcd.print(counter1);
lcd.setCursor(9, 1);
lcd.print(":");
lcd.setCursor(10, 1);
if(counter2 < 10)
{
lcd.print("0"); //so werden Dezimalzahlen und Einheiten korrekter angezeigt
lcd.print(counter2);
}
else
{
lcd.print(counter2);
}
}
void counter_1()
{
counter1++;
ButtonStatus = 1;
}
void counter_2()
{
counter2++;
ButtonStatus = 1;
} Lichtschranke und Taster sind bei Betätigung/Unterbrechung LOW.
Spieler 2
Spieler 1