Go Down

Topic: Nextion Display (Read 1 time) previous topic - next topic

HotSystems

Moin,
vielleicht haben wir aneinander vorbei geredet, ich meinte das val-Attribut um Werte für Nummernfelder und co zuzuweisen, also sprich so: (Formate stets Arduinotauglich)
"page0.n1.val=12345" im Gegensatz zu Textfeldern mit "page0.t1.txt=\"Test1\""
Beim verändern von z.B. Formateigenschaften, sei es Buttons, Nummernfelder oder auch Textfelder, wird statt "val" direkt die Bezeichnung angegeben:
"page0.n1.bco=12345" weil "page0.n1.bco.val=12345" nicht funktionieren wird.

Oder meinst du mit Value und "val" einfach nur das eine Ganzzahl übertragen werden soll?

Wenn ich mir bei einem Befehl nicht sicher bin, teste ich den mit der Autovervollständigung vom Next-Editor, funktioniert der da nicht, ist es falsch! ;)
Ich habe natürlich nicht alle Möglichkeiten durchgespielt, aber eins funktioniert ganz sicher.
So wie in meinem obigen Beispiel funktioniert eine Änderung der Farbe direkt (Ganzzahl angegeben) oder per Variable.

Ich habe nicht getestet, ob es ohne "val oder value" auch funktioniert.
Wie schon geschrieben, habe ich mich da an der Dokumentation orientiert.

Da halte ich mich auch lieber an der Doku. Versuche, ob es mit weniger Infos auch geht, mache ich da nicht, wäre mir auch zu unsicher.
Gruß Dieter

I2C = weniger ist mehr: weniger Kabel, mehr Probleme. 8)

Doctor236

Schonmal danke für eure Mühe. Soweit läuft jetzt auch alles. Ich kann Textfelder beschriften und auch die färben von Buttons ändern.

Nun möchte ich noch gerne die Helligkeit dimmen. In der Nextion Übersicht steht ja, dass es mit z.b.: dim=10 funktionieren sollte.

Also bin ich hergegangen und analog zu den Textfeldern das hier eingefügt, aber ohne Wirkung...

Code: [Select]

  mySerial.print("dim=\"");
  mySerial.print("10");
  mySerial.print("\"");
  mySerial.write(0xff);
  mySerial.write(0xff);
  mySerial.write(0xff);

postmaster-ino

... wahrscheinlich versteh das Nextion Dich nicht.

dim wird eine Eigenschaft von irgendwem sein - Dessen Namen wirst Du wohl dem dim voranstellen müssen.
Wie Du auch den zahlenwert nicht einfach so ins Nextion reinschreist, sondern sagst, WER diesen Zahlenwert bekommen soll.

Habe zwar auch ein Nextion hier rumfliegen, aber noch original verpackt ... das Ding müsste doch einen Error-Code zurück geben, wenn man mit Ihm schwätzt, oder?

MfG

wapjoe

Ich habe natürlich nicht alle Möglichkeiten durchgespielt, aber eins funktioniert ganz sicher.
So wie in meinem obigen Beispiel funktioniert eine Änderung der Farbe direkt (Ganzzahl angegeben) oder per Variable.

Ich habe nicht getestet, ob es ohne "val oder value" auch funktioniert.
Wie schon geschrieben, habe ich mich da an der Dokumentation orientiert.

Da halte ich mich auch lieber an der Doku. Versuche, ob es mit weniger Infos auch geht, mache ich da nicht, wäre mir auch zu unsicher.

Im Endeffekt mache ich es ja auch nicht anders, ich nutze für immer wieder genutzte Befehle sogar eigene Funktionen:
Code: [Select]
//Werte für Textfelder an Display senden
void NextionText(const char* Page, const char* Obj, const char* Value, const char* Addon)
{
  if (mySerial.isListening())                                       //Wird nur ausgeführt, wenn SoftwareSerial aktiv ist
  {
    mySerial.print(Page); mySerial.print(F(".")); mySerial.print(Obj);
    mySerial.print(F(".txt=\"")); mySerial.print(Value); mySerial.print(Addon); mySerial.print(F("\""));
    mySerial.write(NexT,3);
  }
}

//Werte für Number/ProgressBar/Slider etc. an Display senden
void NextionVal(const char* Page, const char* Obj, int Value)
{
  if (mySerial.isListening())                                       //Wird nur ausgeführt, wenn SoftwareSerial aktiv ist
  {
    mySerial.print(Page); mySerial.print(F(".")); mySerial.print(Obj);
    mySerial.print(F(".val=")); mySerial.print(Value);
    mySerial.write(NexT,3);
  }
}

mySerial.isListening() nutze ich, weil ich das Nextion nach ca. 60 Sekunden schlafen schicke (sleep=1) und die SoftwareSerial-Verbindung beende (mySerial.end();), da ich es mit Akku betreibe. Sollte das Display schlafen und es kommen Werte dafür rein, ist es für meine Anwendung egal dass die nicht übertragen werden.

Aber es stimmt schon, das man nicht nur einfach Testen sollte, sondern auf wissen sollte, was man da macht, aber etwas experimentieren, besonders wenn nicht jede Beispielanwendung im Tut beschrieben wurde, halte ich für legetim. ;)

Doctor236

das Ding müsste doch einen Error-Code zurück geben, wenn man mit Ihm schwätzt, oder?
MfG
Zum auslesen von den Buttons habe ich folgenden Code:
Code: [Select]


void recieveDisplay()
{
  static uint8_t bIndex;
  static uint8_t buffer[bufferSize];
  bool allesDa = false;
  if (NextionSerial.available()) {
    uint8_t inChar = NextionSerial.read();
    buffer[bIndex++] = inChar;
    if (inChar == 0xFF && (bIndex >= (*buffer == 0x71 ? 8 : 3)) &&
        buffer[bIndex - 2] == 0xFF && buffer[bIndex - 3] == 0xFF) {
      allesDa = true;
    } else {
      allesDa = (bIndex == bufferSize);
    }
  }
  if (allesDa) {
    if (*buffer != 0x65) {
      Serial.println(F("No TouchEvent"));
    } else {
      Serial.print(F("TouchEvent: page "));
      ReadPage = buffer[1];
      Serial.print(ReadPage);
      Serial.print(F(", id "));
      ReadId = buffer[2];
      Serial.println(ReadId);
      //Serial.print(F(", event "));
      //Serial.println(buffer[3] ? F("PRESS") : F("RELEASE"));
    }
    bIndex = 0;
  }
}


Hier bekomme ich dann nur als Fehler "No TouchEvent"...

wapjoe

Schonmal danke für eure Mühe. Soweit läuft jetzt auch alles. Ich kann Textfelder beschriften und auch die färben von Buttons ändern.

Nun möchte ich noch gerne die Helligkeit dimmen. In der Nextion Übersicht steht ja, dass es mit z.b.: dim=10 funktionieren sollte.

Also bin ich hergegangen und analog zu den Textfeldern das hier eingefügt, aber ohne Wirkung...

Code: [Select]

  mySerial.print("dim=\"");
  mySerial.print("10");
  mySerial.print("\"");
  mySerial.write(0xff);
  mySerial.write(0xff);
  mySerial.write(0xff);

dim wird als Zahl und nicht als Text übertragen, sprich dim=10 oder in deinem Code:
Code: [Select]

  mySerial.print("dim=");
  mySerial.print(10);  //Oder als Variable, aber mySerial.print("dim=10"); geht auch.
  mySerial.write(0xff);
  mySerial.write(0xff);
  mySerial.write(0xff);

also dafür keine escaped Anführungszeichen (\"\") benutzen.

Doctor236

dim wird als Zahl und nicht als Text übertragen, sprich dim=10 oder in deinem Code:
Code: [Select]

  mySerial.print("dim=");
  mySerial.print(10);  //Oder als Variable, aber mySerial.print("dim=10"); geht auch.
  mySerial.write(0xff);
  mySerial.write(0xff);
  mySerial.write(0xff);

also dafür keine escaped Anführungszeichen (\"\") benutzen.
Perfekt, das war es. Danke dir ;)

postmaster-ino

Hi

@wapjoe
Das F-Makro F(".") spart Dir keinen Speicher (wobei Einzelzeichen eh zwischen ' gehören),. erst ab zwei Zeichen spart man was ein.
Wenn Du identische Textteile hast, mach es ggf. Sinn, Diese  in Funktionen auszulagern und 'zusammen zu stückeln'.
Jedes F-Makro braucht Platz - ab wie vielen Zeichen ein mehrfacher Funktionsaufruf 'billiger kommt' wäre anzutesten - je länger der Mehrfach-Text ist, desto günstiger ist eine Funktion.

MfG

wapjoe

Perfekt, das war es. Danke dir ;)
Kein Thema! :)

Ach ja, den Teil
Code: [Select]
  mySerial.write(0xff);
  mySerial.write(0xff);
  mySerial.write(0xff);

kannst du vereinfachen, z.B.:
Code: [Select]
byte NexT[] = {255,255,255};                          //Send 0xff, 0xff, 0xff, global im Header deklariert

  mySerial.write(NexT,3);                          //anstatt 3x "mySerial.write(0xff);"

Spart zumindest Zeilen und wirkt übersichtlicher ;)

wapjoe

#39
Jan 26, 2020, 03:48 pm Last Edit: Jan 26, 2020, 04:07 pm by wapjoe
Hi

@wapjoe
Das F-Makro F(".") spart Dir keinen Speicher (wobei Einzelzeichen eh zwischen ' gehören),. erst ab zwei Zeichen spart man was ein.
Wenn Du identische Textteile hast, mach es ggf. Sinn, Diese  in Funktionen auszulagern und 'zusammen zu stückeln'.
Jedes F-Makro braucht Platz - ab wie vielen Zeichen ein mehrfacher Funktionsaufruf 'billiger kommt' wäre anzutesten - je länger der Mehrfach-Text ist, desto günstiger ist eine Funktion.

MfG
Ok, so gut beherrsche ich es auch noch nicht, aber ich lerne gerne dazu. ;) Ich meine dass das F()-Makro im Unterschied zu Einzelzeichen in "" schon Speicher spart, allerdings habe ich es noch nie mit Hochkommata getestet.

Edit: Grad schnell getestet, F(".") und '.' bewirken das selbe, nur gegenüber "." spart F() lagert F() Speicher aus. Da es aber nicht korrekt ist, werde ich mir die Syntax merken. Danke für den Hinweis :)

Go Up