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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 | #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

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 | #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: