# include "LCDIC2.h"
# include "OneButton.h"
LCDIC2 lcd(0x27, 20, 4);
int TASTER = 7;
// Name des Tasters
OneButton NameTaster(TASTER, true);
// Variablen der Zeit
float StartZeit;
float VerstricheneZeit;
float Sekunden;
int AnzahlRunden = 1;
// muss als Konstante definiert werden
// -> Größe des Arrays darf nicht gändert werden
const int RundenMax = 5;
// Array Runden
String RundenZeit[RundenMax];
// TasterStatus sorgt für Start/Neustart
bool TasterStatus = true;
bool Neustart = false;
void setup()
{
lcd.begin();
// Cursor "verstecken"
lcd.setCursor(false);
lcd.setCursor(0, 0);
lcd.print("Taste -> Start");
lcd.setCursor(0, 1);
lcd.print("--------------------");
// Aktionen dem Modus des Tasters zuordnen
NameTaster.attachClick(einKlick);
NameTaster.attachDoubleClick(DoppelKlick);
NameTaster.attachLongPressStop(langerDruckStopp);
/*
Anzahl der Millisekunden festlegen
Standardwerte gesetzt:
PressTicks: 1000
ClickTicks: 600
DebounceTicks: 50
wenn die Standardwerte gesetzt werden sollen
können die nächsten Zeilen auskommentiert werden
*/
NameTaster.setPressTicks(1000);
NameTaster.setClickTicks(500);
NameTaster.setDebounceTicks(50);
}
void loop()
{
// Taster alle 10 Millisekunden abfragen
NameTaster.tick();
delay(10);
}
void einKlick()
{
if (TasterStatus)
{
// beim Neustart Variablen auf Standard zurücksetzen
// Rundenzeiten löschen
if (Neustart)
{
AnzahlRunden = 1;
// String leeren
for (int i = 1; i < RundenMax; i ++)
{
RundenZeit[i] = "";
}
Neustart = false;
}
StartZeit = millis();
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Runde: " + String(AnzahlRunden));
lcd.setCursor(0, 1);
lcd.print("Taste -> Stopp");
}
else
{
// Zeit berechnen
float Sekunden;
VerstricheneZeit = millis() - StartZeit;
Sekunden = VerstricheneZeit / 1000;
// Sekunden in String umwandeln
// damit . durch , ersetzt werden kann
String AnzahlSekunden = String(Sekunden);
// . durch , ersetzen
AnzahlSekunden.replace(".", ",");
// Ausgabe LCD
lcd.clear();
lcd.print("Runde: " + String(AnzahlRunden));
lcd.setCursor(0, 1);
lcd.print("Weiter -> Taste");
lcd.setCursor(0, 3);
lcd.print(AnzahlSekunden + " Sekunden");
// letzte Runde -> Ergebnis anzeigen
if (AnzahlRunden == RundenMax - 1)
{
RundenZeit[AnzahlRunden] = AnzahlSekunden;
lcd.clear();
Neustart = true;
DoppelKlick();
}
else
{
RundenZeit[AnzahlRunden] = AnzahlSekunden;
AnzahlRunden ++;
}
}
// Tasterstatus umkehren
TasterStatus = !TasterStatus;
}
void DoppelKlick()
{
lcd.clear();
int Zeile = 0;
for (int i = 1; i <= RundenMax - 1; i ++)
{
lcd.setCursor(0, Zeile);
if (RundenZeit[i] != "") lcd.print(String(i) + ": " + RundenZeit[i] + " Sekunden");
Zeile ++;
// Serieller Monitor
if (RundenZeit[i] != "") Serial.println(String(i) + ": " + RundenZeit[i] + " Sekunden");
}
}
void langerDruckStopp()
{
AnzahlRunden = 1;
TasterStatus = true;
Neustart = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Neustart: Runde 1");
}
Letzte Aktualisierung: