Das kann ich machen, sind ein paar hundert Zeilen.
Und was soll dann anders sein, hier sind drei print-Befehle die hintereinander erscheinen müssen und mit IDE auch korrekt verarbeitet werden.
mach ein in sich geschlossenes Beispiel.
Wenn du jetzt glaubst dass sind die 7 Zeilen, dann wird es für dich ja ein Leichtes sein, den Rest dazuzubauen um daraus ein lauffähiges Beispiel zu machen.
Zeigt das Beispiel dann den Fehler nicht, weist du dass es an diesen Zeilen nicht liegt.
Wenn doch - kannst du einen vollständig kompilierbaren Sketch zeigen und es wird sich jemand das Problem ansehen.
In beiden Fällen gewinnst du - entweder findest du den Fehler selber - oder es kann dir jemand helfen.
Der Grund, warum ich nach dem Code gefragt habe, war, um zu sehen, ob Sie irgendwo ein Speicherproblem haben oder ob der Speicher begrenzt wird, was zu erratischem Verhalten führt.
VS mag es z.B. nicht wenn eine Funktion noch nicht definiert ist wenn sie aufgerufen wurde...
Ich hatte vor kurzem das gleiche: Code ging in der Arduino IDE, nicht aus VS... Was hatte ich vergessen: #include <Arduino.h>
Da kommt es aber schon zu Compilier (bzw. Linker) Fehler. Aber nicht zu Ausgabefehler während der Laufzeit.
Dennoch braucht es ein Beispielcode, damit andere das Fehlverhalten bestätigen können und/oder auf Fehler hinweisen können und/oder das Verhalten erklären können.
Es werden schon zu viele Werte angemeckert (?) und beim kompilieren .....
Die Suche hat mich dann aufs Glatteis geführt, was das erneute"byte" vor
nextion_data[4] = {0, 0,0, 0} erklärt.
Damit kriege ich m.E. die Werte zwar nicht nach "außen", aber innerhalb der while sollte das doch laufen? Was es in der IDE ja macht.
Der Übeltäter ist die Arrayzuweisung byte nextion_data[4] = {0, 0,0, 0}, lässt man die weg läuft es auch mit VS.
2x definiert. Einmal public gewollt. Beim 2. willst dieses Array vermeintlich nullen, machst es aber nicht, du legst es lokal neu an. Tipp. Wenn der Compiler Fehlermeldungen ausgibt, fange immer mit dem Ersten an diese zu beseitigen. Eine nach der anderen.
a) die gepostete nextion.h ist unvollständig. Da fehlt ein schließendes #endif.
Besser wäre sowieso der neuere include guard mit #pragma once
b) rest wurde eigentlich eh schon alles geschrieben.
Auch die Arduino IDE reklamiert als Warning
In file included from C:\Daten\myrepository\Arduino\Forum no SVN\sketch_dec29a\sketch_dec29a.ino:3:0:
C:\Daten\myrepository\Arduino\Forum no SVN\sketch_dec29a\nextion.h: In member function 'void NEXTION::read()':
C:\Daten\myrepository\Arduino\Forum no SVN\sketch_dec29a\nextion.h:59:10: warning: variable 'nextion_data' set but not used [-Wunused-but-set-variable]
byte nextion_data[4] = {0, 0, 0, 0};
^~~~~~~~~~~~
änderst du die Zeile in eine falsche Zuweisung
In file included from C:\Daten\myrepository\Arduino\Forum no SVN\sketch_dec29a\sketch_dec29a.ino:3:0:
C:\Daten\myrepository\Arduino\Forum no SVN\sketch_dec29a\nextion.h: In member function 'void NEXTION::read()':
nextion.h:59:34: error: cannot convert '<brace-enclosed initializer list>' to 'byte {aka unsigned char}' in assignment
nextion_data[4] = {0, 0, 0, 0};
^
exit status 1
cannot convert '<brace-enclosed initializer list>' to 'byte {aka unsigned char}' in assignment
if ((byte_command & 63) > command_0) { // anhängende Datenbytes
if ((byte_command & 63) > command_2) { // vier Datenbytes
number_databytes = 4;
}
else { // zwei Datenbytes
number_databytes = 2;
}
Das erste if entscheidet ob überhaupt Datenbytes kommen (oberhalb command_1), es also überhaupt benötigt wird.
Das zweite if legt 4 fest, da Befehl oberhalb von command_2 während else es für den Bereich zwischen command_1 und _2 auf zwei setzt.
Da das eine Testphase nach Erweiterung des Programms ist läuft alles über die gleiche Schnittstelle. Mit H-Term wird das Nextion simuliert.
In ähnlicher Form läuft das Programm über Serial2 mit einem Nextion.
Ich weiß, habe ich ja geschrieben, das war der Sinn des Ganzen.
Aber ich habe Null Ahnung warum hier zu viele Initialisierungswerte angemahnt werden? Array[4] sind m.E. Array[0] - Array[3]
Das lokale anlegen war eine falsche Fährte von
-> 4.
Ist im Original da, sorry.
Die ersten drei Zeilen Warnung in der IDE kommen natürlich bei mir auch, aber die habe ich als Hinweis verstanden, die Variable wird ja tatsächlich nicht verwendet.
Zur zweiten Fehlermeldung der IDE bin ich nicht gekommen da
for (int i = 0; i < 4; i++) {
nextion_data[i] = 0;
}
memset kannte ich nicht.
Funktioniert aber ...
Was ich aber nicht verstehe, was ist an meiner Zuweisung falsch?
Und warum bringt die lokale Variable in der while-Schleife diesen Fehler?
In der IDE hat die brav die Werte angenommen. die seriell reinkamen.