Mit der Bibliothek LiquidCrystal_I2C
Wenn kein Arduino UNO R3 verwendet wird, führt die Bibliothek bei anderen Mikrocontrollern beim Kompilieren zu einer Fehlermeldung:
Bibliothek LiquidCrystal I2C behauptet auf avr Architektur(en) ausgeführt werden zu können und ist möglicherweise inkompatibel mit Ihrer derzeitigen Platine
In der Regel funktioniert das Programm dennoch einwandfrei.
Verwende bei anderen Mikrocontrollern besser die Bibliothek LCDI2C
#include "LiquidCrystal_I2C.h"
#include "OneButton.h"
LiquidCrystal_I2C 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 starten
lcd.init();
// Hintergrundbeleuchtung einschalten
lcd.backlight();
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);
// NameTaster.setPressTicks(500);
// NameTaster.setClickTicks(200);
// 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 ++;
}
}
void langerDruckStopp()
{
AnzahlRunden = 1;
TasterStatus = true;
Neustart = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Neustart: Runde 1");
}
Mit der Bibliothek LCDI2C

#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);
// Standardwerte können anpasst werden
// NameTaster.setPressTicks(500);
// NameTaster.setClickTicks(200);
// 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 ++;
}
}
void langerDruckStopp()
{
AnzahlRunden = 1;
TasterStatus = true;
Neustart = true;
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Neustart: Runde 1");
}
Letzte Aktualisierung: