Hallo zusammen,
wenn ich in meinem Testscatch einmal lcd.clear(); verwende ist alles ok. Wenn ich es aber ein zweites mal verwende bekomme ich ein Fehler, und kann nicht mehr compalieren.
#include <Wire.h> // Wire Bibliothek hochladen
#include <LiquidCrystal_I2C.h> // Vorher hinzugefügte LiquidCrystal_I2C Bibliothek hochladen
#if defined(ARDUINO) && ARDUINO >= 100
#define printByte(args) write(args);
#else
#define printByte(args) print(args,BYTE);
#endif
LiquidCrystal_I2C lcd(0x24, 20, 4); //Hier wird das Display benannt (Adresse/Zeichen pro Zeile/Anzahl Zeilen). In unserem Fall „lcd“. Die Adresse des I²C Displays kann je nach Modul variieren.
/* Grundbildschirm = 1
Statusanzeige = 2
Menüseite 1 = 10
*/
byte nDisplayPage = 0;
byte nPageOld = 0;
byte nMenueLine = 0;
//
const int nAktZeitTemp = 1000; //Aktualisierungszeit Themperatur
const int DispBgOut = 30000;
float Temp1;
float Temp2;
bool bHeizung1;
bool bHeizung2;
bool bLampe1;
bool bLampe2;
void setup() {
lcd.init(); //Im Setup wird der LCD gestartet
lcd.backlight(); //Hintergrundbeleuchtung einschalten (0 schaltet die Beleuchtung aus).
lcd.init();
Serial.begin(9600);
Serial.println("setup");
/*
Erzeuge Startbildschirm!!!
|*****************************|
| Aquariumsteuerung
| Version 1.0
| Christian Biegel */
//**********************************************
lcd.setCursor(1, 1);
lcd.print("Aquariumsteuerung");
Serial.println("Aquariumsteuerung");
lcd.setCursor(5, 2);
lcd.print("Version 1.0");
Serial.print("Version 1.0");
lcd.setCursor(3, 3);
//**********************************************
}
void loop() {
Serial.println("loop");
DisplayAnzeigen();
delay (2000);
// END VOID
}
void DisplayAnzeigen() {
/***************************************************************
Anzeigebildschirme auswählen
***************************************************************/
Serial.print("DisplayAnzeigen, ");
Serial.print("Seite: ");
Serial.print(nDisplayPage);
Serial.print(", alte Seite: ");
Serial.println(nPageOld);
// Wenn displaywert = 0 oder 1 dann Erzeuge Grundbildschirm einmal
if ((nDisplayPage = 1) || (nDisplayPage = 0)) {
if (nPageOld != 1) {
lcd.clear();
CreateGrundbildschirm(); //Wenn noch nicht angezeigt wurde dann schreibe einmal und dort wird nPageOld auf Seite
}
AcktGrundbildschirm();
}
// Wenn displaywert = 2 dann Erzeuge Statusanzeige einmal,
if (nDisplayPage = 2) {
if (nPageOld != 2) {
lcd.clear();
CreateStatusanzeige(); //Wenn noch nicht angezeigt wurde dann schreibe einmal und dort wird nPageOld auf Seite
}
acktStatusanzeige();
}
}
/***************************************************************
Bildschirme erzeugen
***************************************************************/
void CreateGrundbildschirm() {
Serial.println("CreateGrundbildschirm");
nPageOld == 1;
//lcd.clear();
//leereDisplay();
lcd.setCursor (5, 0);
lcd.print ("11.03.2019 Mo");
lcd.setCursor (7, 1);
lcd.print ("13:06:05");
lcd.setCursor (0, 2);
lcd.print ("Temp:");
lcd.setCursor (0, 3);
lcd.print ("Temp:");
lcd.setCursor (11, 2);
lcd.printByte(223);
lcd.setCursor (12, 2);
lcd.print ("C");
lcd.setCursor (11, 3);
lcd.printByte(223);
lcd.setCursor (12, 3);
lcd.print ("C");
lcd.setCursor (15, 2);
lcd.print ("H:");
lcd.setCursor (15, 3);
lcd.print ("H:");
delay(1000);
}
void CreateStatusanzeige() {
// Statusanzeige = Page 2
// Zeile 1 & 2 Aquarium 1
nPageOld == 2;
Serial.println("CreateStatusanzeige");
//leereDisplay();
lcd.setCursor (0, 0);
lcd.print ("Temp:");
lcd.setCursor (0, 1);
lcd.print ("Heiz:");
lcd.setCursor (11, 1);
lcd.print ("Licht:");
// Zeile 3 & 4 Aquarium 2
lcd.setCursor (0, 2);
lcd.print ("Temp:");
lcd.setCursor (0, 3);
lcd.print ("Heiz:");
lcd.setCursor (11, 3);
lcd.print ("Licht:");
}
/***************************************************************
Bildschirme Aktualisuerung
***************************************************************/
void AcktGrundbildschirm() {
Serial.println("AcktGrundbildschirm");
lcd.setCursor (17, 2);
lcd.print ("An");
lcd.setCursor (17, 3);
lcd.print ("aus");
lcd.setCursor (6, 2);
lcd.print ("20.5");
lcd.setCursor( 6, 3);
lcd.print ("22.1");
Temp1 = 20.5;
Temp2 = 22.3;
for (int i = 1; i <= 10; i++) {
Serial.print("forschleife: ");
Serial.println(i);
lcd.setCursor (6, 2);
lcd.print (Temp1);
lcd.setCursor( 6, 3);
lcd.print (Temp2);
Temp1 = 20.5 + i;
Temp2 = 22.3 + i;
Serial.print("Temp1: ");
Serial.println(Temp1);
Serial.print("Temp2: ");
Serial.println(Temp2);
delay(1000);
}
}
void acktStatusanzeige() {
// Aktualisiere Temperatur
lcd.setCursor(7, 0);
lcd.print(Temp1);
lcd.setCursor(7, 2);
lcd.print(Temp2);
lcd.setCursor(7, 1);
if (bHeizung1 = true) {
lcd.print("AN");
}
else {
lcd.print("AUS");
}
lcd.setCursor(7, 2);
if (bHeizung2 = true) {
lcd.print("AN");
}
else {
lcd.print("AUS");
}
lcd.setCursor(17, 1);
if (bLampe1 = true) {
lcd.print("AN");
}
else {
lcd.print("AUS");
}
lcd.setCursor(17, 3);
if (bLampe2 = true) {
lcd.print("AN");
}
else {
lcd.print("AUS");
}
}
woran kann das liegen? ich habe es an verschinden stellen versucht, aber immer das selbe. Sold 2 mal lcd.clear verwendet wird kommt die Fehlermeldung:
C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino\Print.cpp: In function 'println.constprop':
C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\cores\arduino\Print.cpp:143:1: internal compiler error: Segmentation fault
}
^
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.
lto-wrapper.exe: fatal error: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\hardware\tools\avr/bin/avr-gcc returned 1 exit status
compilation terminated.
c:/program files/windowsapps/arduinollc.arduinoide_1.8.21.0_x86__mdqgnx93n4wtt/hardware/tools/avr/bin/../lib/gcc/avr/5.4.0/../../../../avr/bin/ld.exe: error: lto-wrapper failed
collect2.exe: error: ld returned 1 exit status
Bibliothek Wire in Version 1.0 im Ordner: C:\Program Files\WindowsApps\ArduinoLLC.ArduinoIDE_1.8.21.0_x86__mdqgnx93n4wtt\hardware\arduino\avr\libraries\Wire wird verwendet
Bibliothek LiquidCrystal_I2C in Version 1.1.2 im Ordner: C:\Users\c.biegel\Documents\Arduino\libraries\LiquidCrystal_I2C wird verwendet
exit status 1
Fehler beim Kompilieren für das Board Arduino Nano.
kann es sein, dass ich lcd.clear nur einmal verwenden darf?
oder habe ich einfach irgendetwas übersehen?
Gruß Chrisbie