void hilfe_Digole() { const unsigned char digole[] PROGMEM = { 'C','L','E','D','P',25,30,'T','T','H','A','L','L','E',0}; for (uint8_t i=0; i<15; i++) { char wert=digole[ i]; // uint8_t wert=digole[ i]; mySerial.print(wert); Serial.print("wert"); Serial.println(wert,DEC); } mySerial.write(End0); delay(2000); mySerial.print("CLETP"); //mySerial.print(25);mySerial.print(30); mySerial.write(25);mySerial.write(30); mySerial.print("TTHALLE"); mySerial.write(End0); delay(2000); } Wollte jetzt erstmals mit einen Arduino das Serielle UART Display ansteuer. Dieses Prog wird wird nur zum Test nachdem das Display schon arbeitet , aufgerufen. Mich interessiert hier nur warum die Zeilen und spalten Aufrufe nicht ausgeführt werden, wenn aus dem Array gelesen wird. Der Text wird immer im Display links oben angezeigt. z.Z. habe ich auch nicht die Möglichkeit myseriel.print zur Kontrolle mitzu lesen
char wert=digole[ i]; // uint8_t wert=digole[ i]; mySerial.print(wert); Serial.print("wert"); Serial.println(wert,DEC); Mit dem Monitor werden Spalte und Zeile aber richtig ausgegeben! nur Dieser Befehl mySerial.print(wert); wird scheinbar nicht richtig ausgeführt.
Fritz schrieb: > void hilfe_Digole() > { > > const unsigned char digole[] PROGMEM = { > 'C','L','E','D','P',25,30,'T','T','H','A','L','L','E',0}; Schon mal was von Strings gehört?
1 | const unsigned char digole[] PROGMEM = { |
2 | "CLEDP" "\x19" "\x1E" "'TTHALLE"}; |
Die abschließende '0' ergänzt der Compiler automatisch. Das Zauberwort lautet Escape Sequence, damit kann man HEX-Zahlen direkt in einen String packen.
1 | char wert=digole[ i]; |
Das geht so nicht. Auf PROGMEM-Variablen muss man anders zugreifen. https://www.arduino.cc/reference/en/language/variables/utilities/progmem/
:
Bearbeitet durch Moderator
Fritz schrieb: > const unsigned char digole[] PROGMEM = { > 'C','L','E','D','P',25,30,'T','T','H','A','L','L','E',0}; > > for (uint8_t i=0; i<15; i++) > { > char wert=digole[ i]; Hm... Array mit PROGMEM, aber Zugang zu Array wie zu RAM? Dann sollte man statt PROGMEM anders schreiben: const __flash unsigned char digole[] = {
:
Bearbeitet durch User
Arduino nutzt den C++ Compiler. Der kennt leider kein __flash.
Nico W. schrieb: > Arduino nutzt den C++ Compiler. Man kann aber Arduino auf C programmieren. Außer Flash bekommt man als Bonus eine Möglichkeit für Debug, die bei Arduino-Umgebung gar nicht vorgesehen wurde.
:
Bearbeitet durch User
Maxim B. schrieb: >> Arduino nutzt den C++ Compiler. > Man kann aber Arduino auf C programmieren. Du hast das Thema verfehlt. Der C++-Compiler versteht kein __flash. Auch, wenn du ihm sonst C gibst.
S. R. schrieb: > Der C++-Compiler versteht kein __flash. Dann sollte man den Compiler nehmen, der Flash versteht.
Falk B. schrieb: > char wert=digole[ i]; >Das geht so nicht. Auf PROGMEM-Variablen muss man anders zugreifen. ich habe aber jetzt alles richtig auslesen können. Mir geht es auch nur darum die Befehle und Daten aus den Array zu lesen und zum seriellen Display zu schicken. ...-und das geht erst mal jetzt.Hatte nur in einen Befehl einen Fehler!
Nico W. schrieb: > Arduino nutzt den C++ Compiler. Der kennt leider kein __flash. Ihr seid verwirrt! Arduino kann auf der C++ Seite natürlich kein __flash. Allerdings kann einen keiner daran hindern C Dateien einzubinden, und dann tuts das natürlich schon, im Rahmen dessen.
Fritz schrieb: > ich habe aber jetzt alles richtig auslesen können Das ist schön. Behalt's für dich. Das kann man verstdhen, niemand walzt eigene Fehler gerne aus.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.