Gespeicherten Text auf Bildschirm ausgeben

Hallo, die Frage ist etwas komisch da es ja bereits viele Antworten drauf gibt, aber irgendwie komm ich bei den ganzen gegebenen Antworten immer durcheinander und es kommt bei mir nie zur Lösung.

Es geht um eine im EEPROM abgespeicherte Variable. Wenn diese Variable 1 ist, dann soll am Bildschirm "EIN" erscheinen, bei 0 "AUS" . In meinem Fall erscheinen die als char deklarierten Arrays nur im Ascii-Format, also bei EIN erscheint am Bildschirm 58, bei AUS 62.

Hier der relevante Ausschnitt aus dem Code:

#include <EEPROM.h>
#include <LiquidCrystal.h>

byte  menge1, zeit1, menge2, zeit2;
bool modus1, modus2;
char status1, status2;

LiquidCrystal lcd(12, 11, 5, 4, 3, 6);

void setup() {
lcd.begin(20, 4); 
 zeit1 = EEPROM.read(0);
 menge1 = EEPROM.read(1);
 modus1 = EEPROM.read(2);
 zeit2 = EEPROM.read(3);
 menge2 = EEPROM.read(4);
 modus2 = EEPROM.read(5);

if(modus1){
   status1 = "EIN"; }
   else status1 = "AUS";
if(modus2){
  status2 = "EIN"; }
  else status2 = "AUS";

 
char line1[20];
char line2[20];
sprintf(line1, "#1: %02d:00  %02dL   %d", zeit1, menge1, status1);
sprintf(line2, "#1: %02d:00  %02dL   %d", zeit2, menge2, status2);
lcd.setCursor(0,2);
lcd.print(line1);
lcd.setCursor(0,3);
lcd.print(line2);
}

void loop{}

Was passiert, wenn Du aus bool modus1, modus2; ein byte machst?
Aufgabenstellung falsch verstanden.

Neu:
sprintf(line1, "#1: %02d:00 %02dL %s", zeit1, menge1, status1);

da hats mehr.

 status1 = "EIN";

status1 ist ein char. Das kann nur ein Zeichen speichern. EIN sind 3 Zeichen + ein Nulllimiter. Das passt nicht in ein char!

Aktiviere in den Einstellungen die Compiler Warrnings "Alle" und behebe alle Warnings die der Compiler dir mitteilt.

Das heißt ich muss hier einen C-String verwenden mit

char status1[ ] = "EIN";

?

ja und das sprintf ändern.

wenn du das so beibehalten willst ja.

Aber wozu Information redundant in modus1 und status1 halten?
ich würde da vermutlich ein Array anlegen

const char *txtStatus[] {"AUS", "EIN"};

und dann einfach über den modus ausgeben.

Nur als Beispiel:

Serial.println(txtStatus[modus1]);

wobei so variablen wie modus1, modus2 und menge1 und menge2 per se schon sehr fragwürdig sind.

Besonders wenn man das noch hardcoded aus EEPROM Adressen auslesen will.

Weist du was C++ Arrays sind?
Weist du was C++ Strukturen sind?

Hallo lukiluk

Probier mal:

Serial.println(EEPROM.read(0)?"An":"Aus");

Ich wünsche einen geschmeidigen Tag und viel Spass beim Programmieren in C++.

1 Like

das hat nicht funktioniert, bei %s kam dann immer nur eine Fehlermeldung.

@paulpaulson Ich hab alles ein bisschen umgeschrieben und die Variablen vereinheitlicht und so

probiert, damit hats jetzt wunderbar geklappt.

@noiasca Mit Arrays und Structs hab ich mich noch sehr wenig beschäftigt, da muss ich mich auf jeden Fall mehr hineinlesen damit das in Zukunft auch funktioniert.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.