Nextion zu Serial viel zu langsam

tmphs, temperatur headsink heißen, wahrscheinlich kühlkörper
tmpms ist die temperatur vom Motor

1 Like

ist das selbe :slight_smile:

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 :slight_smile:

ahaa, jetzt versteh ich, krass

Ja, dass sind so kleine Dinge, die merkt man sich, wenn das zum ersten Mal richtig schief geht :slight_smile:
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

1 Like

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.

1 Like

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. :wink:

mach dir kein kopf, hast echt genug getan, wünsch dir ein schönen abend

HA! Einen noch:

 Serial2.print("p61.aph=0\xFF\xFF\xFF”);

Geht sowas?

Quelle

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...