tmphs, temperatur headsink heißen, wahrscheinlich kühlkörper
tmpms ist die temperatur vom Motor
ist das selbe
nur hat man bei 0.01 mehr zeichen
Mach mal:
uint16_t hCell = 32124;
float ergebnis;
void setup()
{
Serial.begin(115200);
Serial.println(F("\r\nStart...\r\n"));
ergebnis=hcell/10;
Serial.print(F("hcell / 10 = "));
Serial.println(ergebnis);
ergebnis=hcell*0.1;
Serial.print(F("\r\nhcell * 0.1 = "))
Serial.println(ergebnis);
}
void loop()
{}
C:\Users\Medi\Desktop\Arduino_forum\Arduino_forum.ino: In function 'void setup()':
C:\Users\Medi\Desktop\Arduino_forum\Arduino_forum.ino:8:12: error: 'hcell' was not declared in this scope; did you mean 'hCell'?
8 | ergebnis=hcell/10;
| ^~~~~
| hCell
C:\Users\Medi\Desktop\Arduino_forum\Arduino_forum.ino:12:40: error: expected ';' before 'Serial'
12 | Serial.print(F("\r\nhcell * 0.1 = "))
| ^
| ;
13 | Serial.println(ergebnis);
| ~~~~~~
exit status 1
Compilation error: 'hcell' was not declared in this scope; did you mean 'hCell'?
ein kleiner fehler
19:05:40.642 ->
19:05:40.642 -> Start...
19:05:40.642 ->
19:05:40.642 -> hcell / 10 = 3212.00
19:05:40.642 ->
19:05:40.642 -> hCell * 0.1 = 3212.40
Siehst Du jetzt den Unterschied?
Wenn Du nicht durch 10 sondern wie hier:
durch 100 teilst und mit 0.01 multiplizierst, siehst Du was da passiert...
aha, ich seh da ein unterschied, aber warum ??
Weil der Compiler anders rechnet als Du und ich.
Wenn auf der rechten Seite nicht explizit angegeben ist, mit welchem Wertetyp gerechnet werden soll, dann wird mit int gerechnet.
Und int geht nur von -32768 bis 32767 was Dir dann ganz schnell auf die Füsse fällt, weil es unter anderem zu einem Überlauf kommt, der nicht abgefangen wird und damit ein absolut anderes Ergebnis rauskommt, als man erwartet.
Und in Deinem fall würde die Anzeige immer nur vor dem Komma geändert und nach dem Komma wäre es immer .000
ahaa, jetzt versteh ich, krass
Ja, dass sind so kleine Dinge, die merkt man sich, wenn das zum ersten Mal richtig schief geht
Bekomm ich noch die Textobjekte zugeordnet die an das Nextion dann gehen sollen?
page 0 (Hauptbildschirm)
ladezustand (SOC) n1
spannung (PACKi) n2
abgerufene leistung (power) n3
fahrstufe t4
höchste temperatur (high_tmp) x1
diffenez (CELLDIFF) x2
page 1 (Zellenüberwachung-Spannung)
zellenspannung x3 - x98
maximalspannung (hCELL) x100
minimalspannung (lCELL) x101
diffenez (CELLDIFF) x102
page 2 (Zellenüberwachung-Temperatur)
sensoren x103 - 134
maximaltemp (high_tmp) x135
minimaltemp (low_tmp) x136
temp.durchschnitt (avr) x137
page 3 (Alle Temperaturen)
motor_vorlauf x141
motor_rücklauf x142
Lader_vorlauf x139
Lader_rücklauf x140
DC/DC_vorlauf x137
DC/DC_rücklauf x138
akku_vorlauf (low_tmp) x135
akku_rücklauf (high_tmp) x136
page 4 (Leistung und rekuparation)
ecoTaste b20
normalTaste b21
sportTaste b22
powerAnzeige n5
page 5 (Ladestatus)
ladezustand (SOC) n6
spannung PACKi n7
Stromstärke (pCURR) n8
diffenez (CELLDIFF) x143
akkuzustand (health) n9
maximaltemp (high_tmp) x146
minimaltemp (low_tmp) x147
maximalspannung (hCELL) x148
minimalspannung (lCELL) x149
eingangsspannung x150
interne temperatur iTMP) x151
page 6 (isolationsüberwachung)
ADC (isoDC) x152
wave (isoWAVE) x153
page 7 (Alarme und Fehlermeldungen)
noch nicht belegt
page 8 (Status Motordaten)
modus (opmode) t77
status (status) t78
Motorspannung (udc) n10
Motorleistung (idc) n11
Speed (rpm) n12
fahrrichtung (dir) t84
inverterTemp (tmphs) x154
Motortemperatur (tmpm) x155
page 9 (Tankklappe)
taste auf b33
taste zu b34
hab das noch mit den ides korrigiert, sollte passen jetzt
Na mal sehen, was ich daraus mache...
@wno158 sage mal, ich bin immer noch unsicher, ob es nicht doch geht, dass man mehrere Dinge an den Nextion übertragen kann und erst nach dem letzten die Endekennung kommen muss.
Kann das mal irgendwie ausprobiert werden?
was ich so probiert hab, ist das wenn werte an eine seite gesendet werden, also wenns lokal deklariert ist, und man wechselt die seiten, gehen auch die daten verloren, scheinbar aber nicht wenns global deklariert ist
Ja, das ist richtig und auch gut so.
Bei der Menge könnte es sonst zu kurzen Spratzern mit Defaultwerten kommen.
Meine Idee ist jetzt die Werte so schnell wie möglich aus dem CAN aufzunehmen und bei jedem Umlauf durch loop() einen aktuellen Datensatz zu senden, wenn der sich geändert hat und alle 100-200ms alle Daten komplett.
Darum wäre es gut, ob zum Beispiel sowas hier ginge:
Serial2.print("p61.aph=0"); //mil
Serial2.print("p60.aph=0"); //balance
Serial2.print("t60.pco=2016"); //ready grün
Serial2.print("t61.pco=33808"); //charge grau
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff);
jeder geschriebe wert will glaub ich immer die
Serial2.write(0xff);
Serial2.write(0xff);
Serial2.write(0xff); haben
dazu steht auch hier einiges Datenbefehle - Böcker Systemelektronik
Ich glaube eher nicht - jedenfalls nicht im Standardformat.
Habe es im Emulator mit dem alten HMI-File ausprobiert, da kann man die "Instructions" ja einzeln eingeben. Habe als Trenner auch Semikolon probiert, wird ebenfalls mit Fehlermeldung quittiert.
Ok. Schade. Dann müssen die 3 Bytes jedes mal mit.
Schade dass es den Simu nicht für *unixoide gibt ...
@kozmonautic
Für mich ist dann jetzt Schluß.
Morgen ist auch noch ein Tag - und gestreikt wird auch.
Mal sehen, was mir noch so einfällt.
mach dir kein kopf, hast echt genug getan, wünsch dir ein schönen abend
Och, das wäre zu prüfen (ich fahre gerade meine Ubuntu-VM hoch...)
Der Simu steckt im Editor, vielleicht läuft er ja unter Wine.
Es gibt noch einen "Protocol Reparse" Modus, wo man wohl selbst das Datenformat festlegen kann und durch Code auf dem Display auswerten lassen kann. Habe ich aber (noch) nicht verstanden.
Kannst ja probieren, kann ich aber auf dem kleinen Netbook nicht machen.
Da sowieso snprintf zur Anwendung kommt, wär es schön, wenn ich die Zeichenfolge einfach mit anhängen könnte...