im Nextion Display Textfeld Fließkommazahlen anzeige (wie geht das )

Wie kann ich einen Messwert mit Kommastellen im Nextion Display darstellen.

Mit den Nummernfeld gehen nur Zahlen ohne Komme das funktioniert auch bei mir .

Die Ausgabe über den seriellen Monitor auch. Die Zahl kann ich mit und ohne Komma anzeigen lassen.

Jetzt füge ich ein Textfeld statt ein Nummern Feld hinzu wie steuere ich dieses Feld jetzt über mein Arduino an .

//#include <LiquidCrystal.h>
#include "Nextion.h"

//LCD Display
//LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

#define wert1 110 //108
#define temp1 0 //Grad Celsius/10
#define wert2 93 //99
#define temp2 310 //230 //Grad Celsius/10

#define wert3 110 //108
#define temp3 0 //Grad Celsius/10
#define wert4 93 //610
#define temp4 310 //Grad Celsius/10

#define wert5 110 //108
#define temp5 0 //Grad Celsius/10
#define wert6 93
#define temp6 310 //Grad Celsius/10

#define aIn1 A0
NexNumber n0 = NexNumber(0, 1, "n0");

#define aIn1 A1
NexNumber n1 = NexNumber(0, 2, "n1");

#define aIn2 A2
NexNumber n2 = NexNumber(0, 3, "n2");

#define aIn3 A3
NexNumber n3 = NexNumber(0, 4, "n3");

NexTouch *nex_listen_list[] =
{
// &h0,

NULL
};
uint32_t attenuation;
uint16_t analogValue;
void h0PopCallback(void *ptr)
{
// h0.getValue(&attenuation);
}

void setup() {
nexInit();
//lcd.begin(16, 2);
//Serial.begin(9600);
//Serial.print("dims = 50");
//Serial.write(NexInit,3);

}

void loop() {

// lese Wert vom Analogpin in Variable
int analogValue = analogRead(0);
analogValue=map(analogValue,wert1,wert2,temp1,temp2);
// gebe das Ergebnis mit einer Nachkommastelle aus:
//Serial.print("Temperatur: ");
//Serial.println((analogValue/10.0),0);

//lcd.setCursor(0, 0);
//lcd.print("Temperatur:");

//lcd.setCursor(11, 0);
//lcd.print((analogValue/10.0),1);

n0.setValue(analogValue/10.0);
// Warte 1 Sekunde bevor der nächste Wert gelesen wird
delay(1000);

// lese Wert vom Analogpin in Variable
int analogValue1 = analogRead(1);
analogValue1=map(analogValue1,wert3,wert4,temp3,temp4);
// gebe das Ergebnis mit einer Nachkommastelle aus:
//Serial.print("Temperatur1: ");
//Serial.println((analogValue1/10.0),1);

//lcd.setCursor(0, 1);
//lcd.print("Temperatur:");

//lcd.setCursor(11, 1);
//lcd.print((analogValue1/10.0),1);

n1.setValue(analogValue1/10.0);

// Warte 1 Sekunde bevor der nächste Wert gelesen wird
delay(1000);

// lese Wert vom Analogpin in Variable
int analogValue2 = analogRead(2);
analogValue2=map(analogValue2,wert5,wert6,temp5,temp6);
// gebe das Ergebnis mit einer Nachkommastelle aus:
//Serial.print("Temperatur2: ");
//Serial.println((analogValue2/10.0),1);

//lcd.setCursor(0, 1);
//lcd.print("Temperatur:");

//lcd.setCursor(11, 1);
//lcd.print((analogValue2/10.0),1);

n2.setValue(analogValue2/10.0);

// Warte 1 Sekunde bevor der nächste Wert gelesen wird
delay(1000);
}

dtostrf():

https://www.mikrocontroller.net/topic/86391

Setze Deinen Sketch bitte in Codetags (</> oben links im Editor), damit er auch auf mobilen Geräten lesebar ist.

Gruß Tommy

//#include <LiquidCrystal.h>
#include "Nextion.h"
 
//LCD Display
//LiquidCrystal lcd(12, 11, 5, 4, 3, 2);


#define wert1 110 //108
#define temp1 0  //Grad Celsius/10
#define wert2 93  //99
#define temp2 310 //230 //Grad Celsius/10 

#define wert3 110 //108
#define temp3 0   //Grad Celsius/10
#define wert4 93 //610
#define temp4 310 //Grad Celsius/10


#define wert5 110 //108
#define temp5 0   //Grad Celsius/10
#define wert6 93
#define temp6 310 //Grad Celsius/10


#define aIn1 A0  
  NexNumber n0 = NexNumber(0, 1, "n0");
  
#define aIn1 A1  
  NexNumber n1 = NexNumber(0, 2, "n1");

  #define aIn2 A2  
  NexNumber n2 = NexNumber(0, 3, "n2");

  #define aIn3 A3  
  NexNumber n3 = NexNumber(0, 4, "n3");
  
 
 NexTouch *nex_listen_list[] =
 {
//  &h0,


  NULL
 };
 uint32_t attenuation;
 uint16_t analogValue;
void h0PopCallback(void *ptr)
 {
//  h0.getValue(&attenuation);
 }

void setup() {
  nexInit();
  //lcd.begin(16, 2);
  //Serial.begin(9600); 
  //Serial.print("dims = 50");
  //Serial.write(NexInit,3);
 
}

void loop() {
  
  // lese Wert vom Analogpin in Variable
  int analogValue = analogRead(0);
  analogValue=map(analogValue,wert1,wert2,temp1,temp2);
  // gebe das Ergebnis mit einer Nachkommastelle aus:
  //Serial.print("Temperatur: ");
  //Serial.println((analogValue/10.0),0);
  
//lcd.setCursor(0, 0);
//lcd.print("Temperatur:");
 
//lcd.setCursor(11, 0);
//lcd.print((analogValue/10.0),1);

 n0.setValue(analogValue/10.0);
   // Warte 1 Sekunde bevor der nächste Wert gelesen wird
  delay(1000);

  // lese Wert vom Analogpin in Variable
  int analogValue1 = analogRead(1);
  analogValue1=map(analogValue1,wert3,wert4,temp3,temp4);
  // gebe das Ergebnis mit einer Nachkommastelle aus:
  //Serial.print("Temperatur1: ");
  //Serial.println((analogValue1/10.0),1);
  
//lcd.setCursor(0, 1);
//lcd.print("Temperatur:");
 
//lcd.setCursor(11, 1);
//lcd.print((analogValue1/10.0),1);

n1.setValue(analogValue1/10.0);


// Warte 1 Sekunde bevor der nächste Wert gelesen wird
  delay(1000);

    // lese Wert vom Analogpin in Variable
  int analogValue2 = analogRead(2);
  analogValue2=map(analogValue2,wert5,wert6,temp5,temp6);
  // gebe das Ergebnis mit einer Nachkommastelle aus:
  //Serial.print("Temperatur2: ");
  //Serial.println((analogValue2/10.0),1);
  
//lcd.setCursor(0, 1);
//lcd.print("Temperatur:");
 
//lcd.setCursor(11, 1);
//lcd.print((analogValue2/10.0),1);

n2.setValue(analogValue2/10.0);


// Warte 1 Sekunde bevor der nächste Wert gelesen wird
  delay(1000);
}

Wirf doch erst mal alles raus, was Du nicht brauchst (Du hast kein LCD).
Dann erlangst Du evtl. etwas Überblick.

Hast Du Dir die Links angeschaut und verstanden?

Gruß Tommy

Hallo,
das geht so:

float MeinWert;
char NextionWert[15];

    dtostrf(MeinWert, 0, 1, NextionWert);
    Serial2.print("MeinTextFeld.txt=\"");
    Serial2.print(NextionWert);
    Serial2.write('"');
    Serial2.write(NexT,3);

funktioniert nicht? Dokumentation lesen.
Gruß und Spaß
Andreas

"width" kann man auch schön dazu verwenden den String auf eine konstante Breite zu formatieren. Wenn das größer ist als die benötigten Zeichen wird mit Leerzeichen aufgefüllt.

ich komme nicht weiter

Das ist eine Nullaussage.

Was hast Du gemacht, was passiert, was passiert nicht?

Wir können nicht auf Deinen Rechner schauen und können Hilfe nur anhand der Infos geben, die Du uns gibst.
Keine vernünftige Info -> keine vernünftige Hilfe möglich.

Gruß Tommy

Andi1884:
Jetzt füge ich ein Textfeld statt ein Nummern Feld hinzu wie steuere ich dieses Feld jetzt über mein Arduino an

Die Antwort dazu ist die Zahl in einen C String zu formatieren. Das wurde erklärt.

Andi1884:
ich komme nicht weiter

Warum auch gleich mit der Brechstange.
Als "Anfänger" sollte man klein anfangen und nach und nach dazu lernen.

Hallo,
DER- hat keine Lust zum lesen...
Gruß Andreas

Sorry aber ich habe gestern so viel probiert und es nicht hin bekommen . Die Wiedergabe mit den Nummer Feld im nextion klappt ja schon . Das mit der dtostrf Funktion verstehe ich schon . Aber warum kommt beim Überprüfen bei Serial2.write(NexT,3) ein Fehler . Was bedeutet NexT,3 . Und mit serial2 das geht doch beim Uno nicht . Der nextion hmi ist über rx tx mit den Uno verbunden . Ich lese mich schon in die Materie ein und Frage nur wenn ich gar nicht mehr weiter weiß . Denn mein Englisch ist auch nicht gerade das beste und man findet nichts wie ich das Textfeld vom nextion ansteuern kann

Wenn du selbst mal googeln würdest, hier findest du reichlich Informationen.
Nextion Display

Was das Serial2 betrifft, das kannst du doch selbst anpassen, oder ?

Den Rest findest du hier.

Ich habe die ganze Dokumentation von Böcker und auch nach danach aufgebaut mit den Nummer Feld aber das mit den Text Feld um dort da meinen Messwert in Komma dazustellen will irgendwie nicht klappen . Und überall finde ich den Befehl
Serial2.write(NexT,3); was bedeutet das NexT,3 da kommt bei mir immer ein Fehler . Ich werde es weiter versuchen .

Andi1884:
Ich habe die ganze Dokumentation von Böcker und auch nach danach aufgebaut mit den Nummer Feld aber das mit den Text Feld um dort da meinen Messwert in Komma dazustellen will irgendwie nicht klappen . Und überall finde ich den Befehl
Serial2.write(NexT,3); was bedeutet das NexT,3 da kommt bei mir immer ein Fehler . Ich werde es weiter versuchen .

Du musst einfach mal lesen, was in diesem Beitrag (Post #5) geschrieben wurde.
Das steht hier schon drin.
Und natürlich musst du das für deinen Arduino und Sketch anpassen.
Oder sollen wir dir alles exakt vorschreiben ?

Und im verlinkten Beitrag (Post #13) steht es, was "NexT,3" bedeutet.
Nur da steht "byte NextionTerminator[3] = {255,255,255};"

Bitte immer alles durchlesen und es steht ja in deutsch geschrieben.

In dem Tutorial benutzt der Herr Böcker oder wie auch immer er heisst nicht die Library.

Er kommuniziert nur über Serial mit dem Nextion, das ist auch deutlich einfacher als mit der library.

Ich kann dir später mal ein paar Codeschnipsel zeigen wenn ich wieder zuhause bin.

also soweit bin ich jetzt

dtostrf(analogValue, 0, 3, analogValue);
Serial.print("t0.txt=""); //"MeinTextFeld.txt=""
Serial.print(analogValue/10.0,1); //NextionWert
Serial.write('"');
Serial.write(NexT,3);

gibt mir den messwert in komma im textfeld wieder wird aber nur so lange immer aktualiesiert solange ich den seriellen Monitor geöffnet habe. was muss ich noch tun das es ohne verbindung zum pc funktioniert

Andi1884:
also soweit bin ich jetzt

dtostrf(analogValue, 0, 3, analogValue);
Serial.print("t0.txt=""); //"MeinTextFeld.txt=""
Serial.print(analogValue/10.0,1); //NextionWert
Serial.write('"');
Serial.write(NexT,3);

gibt mir den messwert in komma im textfeld wieder wird aber nur so lange immer aktualiesiert solange ich den seriellen Monitor geöffnet habe. was muss ich noch tun das es ohne verbindung zum pc funktioniert

Na das ist doch mal was....

Aber was hat dein serieller Monitor damit zu tun ?

Zeig doch mal den aktuellen Sketch.

#include "Nextion.h"
 

#define wert1 110 //108
#define temp1 0  //Grad Celsius/10
#define wert2 93  //99
#define temp2 310 //230 //Grad Celsius/10 

#define wert3 110 //108
#define temp3 0   //Grad Celsius/10
#define wert4 93 //610
#define temp4 310 //Grad Celsius/10


#define wert5 110 //108
#define temp5 0   //Grad Celsius/10
#define wert6 93
#define temp6 310 //Grad Celsius/10


#define aIn1 A0  
  NexNumber n0 = NexNumber(0, 1, "n0");
  
#define aIn1 A1  
  NexNumber n1 = NexNumber(0, 2, "n1");

#define aIn2 A2  
  NexNumber n2 = NexNumber(0, 3, "n2");

#define aIn3 A3  
  NexNumber n3 = NexNumber(0, 4, "n3");

//NexText tempDisplay1 = NexText(0, 5, "t0"); // Temperatur anzeige
 
 NexTouch *nex_listen_list[] =
 {
//  &h0,
//&t0,


  NULL
 };
 uint32_t attenuation;
 uint16_t analogValue;
void h0PopCallback(void *ptr)
 {
//  h0.getValue(&attenuation);
 }
int Nextion;
byte NexT[3] = {255, 255, 255};



void setup() {
  nexInit();
   Serial.begin(9600); 
  //Serial.print("dims = 50");
  
}

void loop() {
  
  // lese Wert vom Analogpin in Variable
  int analogValue = analogRead(0);
  analogValue=map(analogValue,wert1,wert2,temp1,temp2);
  // gebe das Ergebnis mit einer Nachkommastelle aus:
  //Serial.print("Temperatur: ");
  //Serial.println((analogValue/10.0),1);
  

    dtostrf(analogValue, 0, 3, analogValue);
    Serial.print("t0.txt=\""); //"MeinTextFeld.txt=\""
    Serial.print(analogValue/10.0,1);  //NextionWert
    Serial.write('"');
    Serial.write(NexT,3);
 //n0.setValue(analogValue/10.0);
 // Warte 1 Sekunde bevor der nächste Wert gelesen wird
  delay(1000);

  // lese Wert vom Analogpin in Variable
  int analogValue1 = analogRead(1);
  analogValue1=map(analogValue1,wert3,wert4,temp3,temp4);
  // gebe das Ergebnis mit einer Nachkommastelle aus:
  //Serial.print("Temperatur1: ");
  //Serial.println((analogValue1/10.0),1);
  
n1.setValue(analogValue1/10.0);
// Warte 1 Sekunde bevor der nächste Wert gelesen wird
  delay(1000);

    // lese Wert vom Analogpin in Variable
  int analogValue2 = analogRead(2);
  analogValue2=map(analogValue2,wert5,wert6,temp5,temp6);
  // gebe das Ergebnis mit einer Nachkommastelle aus:
  //Serial.print("Temperatur2: ");
  //Serial.println((analogValue2/10.0),1);

n2.setValue(analogValue2/10.0);


// Warte 1 Sekunde bevor der nächste Wert gelesen wird
  delay(1000);
}
[code]