Fehlermeldung bei lcd.clear()

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

Offensichtlich ein Fehler in der Toolchain, oder im Betriebssystem.
Dein Arduino Sketch hat damit nichts zu tun.

Abhilfe:
Toolchain auswechseln, gegen eine ältere, oder neuere.

Die ältere findest du im Boardsmanager.
Werkzeuge -->> Board -->> Boardverwalter

Für die Arduino AVR Boards eine ältere Version installieren.

Hallo,

das sieht doch wiedermal nach der App-Versione der IDE aus? Da gab es doch schon mehrfach Probleme.
IDE 1.8.8 von Arduino runterladen und installieren könnte also helfen.

Gruß aus Berlin
Michael

Tut mit leid, das sagen zu müssen.
Aber hier ist der Win App Server usw. unschuldig.

Das passiert mit jeder 1.8.8 Version.
Die Toolchain 1.6.23 ist für Win 10(?) Defekt

Mittlerweile steht die 1.8.9 zum Download bereit.
Ob die den Fehler auch noch hat?
Ich hoffe nicht.

Hallo,

@combie: Danke für den Hinweis auf die 1.8.9, mal testen.
Zum Win10 Thema: merke ich mir mal, nutze hier immernoch Win7.

Gruß aus Berlin
Michael

@combie: Danke für den Hinweis auf die 1.8.9, mal testen.

Gerne doch.
Habe gerade ein Update gemacht.
Auch die 1.8.9 nutzt die 1.6.23 AVR Boarddefinition.

Tipp:
Im Einstellungen Dialog die extra URL:
http://downloads.arduino.cc/packages/package_avr_7.3.0_index.json
eintragen.

Dann im Boardmanager die AVR Boardefinition 1.6.209 installieren
Diese inoffizielle Version hat DEN Fehler nicht.

Weitere Vorteile:

  • erzeugt schlankeren/schnelleren Code (AVR-GCC 7.3.0)
  • unterstützt C++14 und C++17 vollständig (soweit ich getestet habe)
  • C++20 wird teilweise unterstützt.

Nachtrag:
Die Arduino IDE 1.9.0-Beta hat den neuen Kompiler schon dabei.
-Man könne ein Update wagen-

Danke für die schnelle Hilfe:

Tipp:
Im Einstellungen Dialog die extra URL:
http://downloads.arduino.cc/packages/package_avr_7.3.0_index.json
eintragen.

Dann im Boardmanager die AVR Boardefinition 1.6.209 installieren
Diese inoffizielle Version hat DEN Fehler nicht.

nach dem Update funktioniert es!

Gruß Chrisbie