FLProg + Nextion HMI. Lektion 3

  • Tutorial


In früheren Lektionen ( Lektion 1 , Lektion 2 ) habe ich erklärt, wie man die Benutzeroberfläche des Nextion-HMI-Panels zeichnet und wie man das Panel mit dem Arduino steuert. In diesem Tutorial zeige ich Ihnen, wie Sie das inverse Problem lösen - steuern Sie das Arduino-Board mit dem Nextion-HMI-Bedienfeld.
In der Lektion erweitern wir den Entwurf der vorherigen Lektion, fügen eine Lüftersteuerung hinzu, die sich einschaltet, wenn die Temperatur den angegebenen Grenzwert überschreitet, und schaltet sich aus, wenn die Temperatur unter den zweiten Grenzwert fällt. Die Einstellungen werden über das Bedienfeld festgelegt und im permanenten Speicher des Arduino Controllers gespeichert. Außerdem machen wir einen Lichtschalter auf dem Panel (zwei Wege) und eine Taste, mit der wir die Taschenlampe einschalten (um beispielsweise Aliens ein Signal zu geben).

Modifiziertes Schema aus der letzten Lektion. Die Laterne, das Licht und der Lüfter ahmen die LEDs nach.


Auch das Projekt des Panels wurde verbessert. Zwei Seiten hinzugefügt. Außerdem wurde die in das Panel geladene Schriftart ersetzt. Das Projekt für das Panel befindet sich im Archiv, zu dem am Ende des Artikels ein Link angegeben ist. In den Kommentaren zur vergangenen Lektion wurde ich zu Recht für den Mangel an Designtalent beschimpft. Ich stimme dem völlig zu, so dass die neuen Seiten kein Design haben, sondern reine Funktionalität.
Betrachten Sie neue Seiten.

Verwaltungsseite ("page3", ID = 3).


Beachten Sie die Elemente auf der Seite.

  1. Nur Textfelder. Nichts Interessantes.
  2. Sollwertventilator für Feldanzeige eingeschaltet. Wie ich bereits schrieb, weiß das Panel nicht, wie mit Bruchzahlen gearbeitet wird. Daher handelt es sich um Textfelder. Die Zeile für die Anzeige wird auf Arduinka vorbereitet. Elementparameter

    Da der Wert in diesem Feld vom Controller gesendet wird, machen wir ihn global (das Attribut „vscope“ ist auf „global“ gesetzt). Durch Klicken auf dieses Feld wird die Wertbearbeitungsseite geöffnet. Daher wird der folgende Code im Ereignis "Touch Press Event" aufgezeichnet.

    Wenn Sie auf ein Element klicken, geben Sie zuerst im Feld "Bearbeitbarer Wert" auf Seite 4 den aktuellen Wert ein.
    page4.evtemp.txt=onV.txt

    Geben Sie dann in der Variablen, in der der Bezeichner des bearbeitbaren Felds auf Seite 4 gespeichert ist, den Bezeichner des Feldes an, auf das Sie geklickt haben.
    page4.varN.val=0

    Gehen Sie auf die Seite zum Bearbeiten von Werten.
    page page4


  3. Anzeigefeld für den Lüfter. Fast identisch mit dem vorherigen Feld. Elementparameter

    Der Code im Ereignis "Touch Press Event".

    In diesem Code besteht der Unterschied zum vorherigen nur in der Feldbezeichnung.
    page4.varN.val=1


  4. Knopf zurück. Aus der letzten Lektion kopiert. Elementparameter

    Der Code im Ereignis "Touch Press Event".


  5. Zwei Positionsschalter („Dual-State-Taste“) - Lichtsteuerung.
    Elementparameter

    Der Zustandswert dieses Elements wird vom Controller gelesen, also das globale Element (das Attribut "vscope" und der Wert "global"). Als Hintergrundanzeigemodus wird der Bildmodus ausgewählt (das Attribut "sta" ist "image"). Bilder werden in den Attributen "pic0" für Status 0 und "pic1" für Status 1 festgelegt.

  6. Taste ("Taste") - Schalten Sie die Taschenlampe ein. Elementparameter

    Wir werden hier genauer aufhören. Wir werden die Tastendrücke vom Controller aus überwachen, um die Lampe zu steuern. Leider ist es in Arduino nicht möglich, eine Unterbrechung zu setzen, um ein Byte vom UART zu erhalten (zumindest durch Standards). Daher mussten wir das Speichern der Taste mit zwei Variablen (7 und 8) einprägen. Wir werden die Schaltfläche nicht direkt anwenden, daher kann dies sowohl lokal als auch global erfolgen (ich habe es nur für den Fall global gemacht). Der folgende Code wird in den Button-Click-Handler geschrieben ("Touch Press Event").

    Und im Button Release Handler ("Touch Release Event") z.

    Wir benötigen diese Variablen im Click-Tracking-Block im FLProg-Projekt.


Wertefenster bearbeiten (“page4”, ID = 4).

Überlegen Sie, was darin enthalten ist.
  1. Editierbares Wertfeld Elementparameter

    Der Wert dieses Feldes wird aus dem Controller gelesen. Dementsprechend machen wir ihn global (das Attribut "vscope" ist auf "global" gesetzt).

  2. Werteingabetasten. Alle diese Schaltflächen sind nahezu identisch und unterscheiden sich in der Beschriftung und im Code des Event-Handlers „Touch Press Event“. Wenn Sie auf eine dieser Schaltflächen klicken, wird das entsprechende Symbol zum aktuellen Wert des Felds für bearbeitbare Werte hinzugefügt.
    Der Code im Ereignis "Touch Press Event" für jede der Schaltflächen.
    "0"
    evtemp.txt=evtemp.txt+"0"

    "1"
    evtemp.txt=evtemp.txt+"1"

    "2"
    evtemp.txt=evtemp.txt+"2"

    "3"
    evtemp.txt=evtemp.txt+"3"

    "4"
    evtemp.txt=evtemp.txt+"4"

    "5"
    evtemp.txt=evtemp.txt+"5"

    "6"
    evtemp.txt=evtemp.txt+"6"

    "7"
    evtemp.txt=evtemp.txt+"7"

    "8"
    evtemp.txt=evtemp.txt+"8"

    "9"
    evtemp.txt=evtemp.txt+"9"

    "."
    evtemp.txt=evtemp.txt+"."


  3. Schaltfläche zum Löschen des Feldes. Durch Drücken von wird der Feldwert gelöscht.
    Der Code im Ereignis "Touch Press Event"
    evtemp.txt=""

  4. Schaltfläche zum Löschen des letzten Zeichens.
    Der Code im Ereignis "Touch Press Event"
    evtemp.txt=evtemp.txt-1

    Dies ist keine dokumentierte Funktion. Es entfernt das letzte Zeichen in der Zeichenfolge. Ich habe es in einem der Videos auf der Website des Herstellers ausspioniert. Im Allgemeinen habe ich fast keine Informationen zum Arbeiten mit Strings auf dem Panel gefunden.

  5. Schaltfläche zum Beenden der Bearbeitung des Werts.
    Durch Drücken dieser Schaltfläche wird auf dem Controller nachverfolgt, so dass zwei Variablen dafür erstellt werden ("endPress" und "endRel") und der Code in die Event-Handler geschrieben wird.
    Der Code im Ereignis "Touch Press Event"
    page4.endPress.val=1

    Der Code im Ereignis "Touch Release Event"
    page4.endRel.val=1


  6. Schaltfläche "Abbrechen". Durch Drücken dieser Taste kehren Sie einfach zur Steuerungsseite zurück.
    Der Code im Ereignis "Touch Press Event"
    page page3



Wenn das Panel fertig ist, wechseln Sie zum FLProg-Programm. Es verwendet auch ein Projekt aus der letzten Lektion ein wenig modifiziert. Die Projektdatei befindet sich im Archiv, der Link dazu ist am Ende des Beitrags angegeben.
Wie in der letzten Lektion zeige ich die fertigen Schaltpläne und erzähle, was auf ihnen passiert.
Fee 7 - "Laternenmanagement"



Alles ist einfach. Block B46 - „Click Tracking“ (Elementbibliothek, Ordner „Nextion HMI Panel“). An seinem Ausgang befindet sich ein Wert, der dem Status der überwachten Taste oder eines anderen Elements des Bedienfelds mit den Ereignissen „Touch Press Event“ und „Touch Release Event“ entspricht. Dieser Wert wird direkt am Ausgang der Lampe aufgezeichnet. Der Baustein wird mit dem Bausteineditor parametriert.



Im Blockeditor müssen Sie ein Bedienfeld auswählen, eine neue Seite erstellen und die erforderlichen Elemente darauf schreiben. Wie ich das mache, erzählte ich in der vorigen Lektion.



Sie sollten dieses Bild bekommen.



Wählen Sie als drückende Variable die Variable, in die die Einheit geschrieben werden soll, in der Schaltfläche „Touch Press Event“ und als Release-Variable die Variable über die Schaltfläche „Touch Release Event“.

Gebühr 8 - "Kontrolle des Lichts".



Gleiche sehr einfache Gebühr. Hier lesen wir die Schalterposition mit dem Block B47 - "Get Parameter" (Elementbibliothek -> Ordner Nextion HMI Panel -> Ordner Elements). Dieser Wert wird dann direkt an den an die Beleuchtung gebundenen Ausgangsblock gesendet. Der Baustein wird mit dem Bausteineditor parametriert.



Um die Belastung des Controllers zu reduzieren, wird der Status des Switches einmal pro Sekunde abgefragt.

Board 9 - "Ende der Bearbeitungsparameter".
Auf dieser Platine werden wir den Klick auf der Schaltfläche "Fertigstellen" auf der Seite "Parameter bearbeiten" bearbeiten.



Mit dem Block B48 - "Track clicks" (Elementbibliothek, Ordner "Nextion HMI Panel") bestimmen wir den Zeitpunkt des Klickens. Im Editor dieses Blocks erstellen wir die Seite 4 und füllen sie mit für uns interessanten Elementen.



Und konfigurieren Sie den Block.



Wählen Sie mit dem Block Â49 - “Rtrig” (Elementbibliothek, Ordner “Trigger”) die vordere Flanke des Signals, wenn Sie die Schaltfläche “Finish” drücken, und schreiben Sie in die Variable “Bearbeitungsende”.
Auch an dieser Front lesen wir den Wert der Variablen, die den Bezeichner des bearbeitbaren Felds speichert, mit Block B54 - „Get Parameter“ (Elementbibliothek -> Ordner Nextion HMI Panel -> Ordner Elements). Einstellungen blockieren.



Der resultierende Wert wird auf die Variable "Bearbeitbare Feldnummer" gesetzt.
Und für denselben Impuls lesen wir den neuen Wert direkt aus dem Textfeld mit dem B50-Block - "Get Parameter" (Elementbibliothek -> Ordner Nextion HMI Panel -> Ordner Elements). Einstellungen blockieren.



Wir wandeln den neuen Wert aus dem String in eine Zahl im Float-Format um. Verwenden Sie dazu den Block B51 - "String Conversion" (Bibliothek der Elemente, Ordner "Type Conversion"). Einstellungen blockieren.



Multiplizieren Sie die Zahl mit 10 mit dem Block B52 - "MUL (*)" (Elementbibliothek, Ordner "Mathematik"), ändern Sie den Typ in Ganzzahl mit dem Block B53 - "Float in Integer konvertieren" (Elementbibliothek, Ordner "Konvertierung von Typen"). und geben Sie die Variable "Neuer Wert" ein.

Gebühr 10 - "Bearbeiten der Ergebnisse der Bearbeitung von Werten"



Mit dem Block B55 - "Comparator" (Elementbibliothek, Ordner "Vergleich") legen wir fest, welches Feld bearbeitet wurde und schreiben je nach Ergebnis den Wert aus der Variablen "Neuer Wert" per Impuls in die Variable "Bearbeitungsende" in eine der beiden Variablen. in der "Fan off Einstellung x10" oder in der "Fan on Einstellung x10". Für den gleichen Impuls geben wir den Panel-Befehl, um mit dem B58-Block "Gehe zu Seite" (Element-Bibliothek, Ordner "Nextion HMI Panel" -> "Page" -Ordner) zur Steuerungsseite zu gelangen. Einstellungen blockieren.



Gebühr 11 - „Einstellungswerte für das Panel und das EEProm aufzeichnen“



Mit Hilfe des Blocks 59 - „Nummernänderungsdetektor“ (Elementbibliothek, Ordner „Basiselemente“) bestimmen wir, dass der Wert der Variablen „Lüfteraktivierungseinstellung x10“ geändert wird. Am Ausgang des Bausteins wird zum Zeitpunkt der Wertänderung am Eingang „Value“ ein kurzer Impuls gebildet. Dieser Impuls zeichnet den Wert im nichtflüchtigen Speicher des Controllers auf. Dies geschieht mit Hilfe des Blocks B65 - "Write to EEPROM" (Elementbibliothek, Ordner "EEPROM"). Der Block wird mit dem Blockeditor konfiguriert.



Bevor Sie eine Variable in das EEPROM schreiben, müssen Sie sie dort erstellen. Klicken Sie dazu im Blockeditor auf die Schaltfläche "Erstellen". Das Fenster zum Erstellen von Variablen wird geöffnet.



Darin legen wir den Namen der Variablen und ihren Typ fest. Nach dem Drücken der Taste kann der Block an diese Variable gebunden werden.



Durch das Signal einer Variablenänderung wird sein Wert in eine Konstante vom Typ Float mit dem Wert 10 mit Hilfe des Blocks В61 - „DIV (/)“ (Bibliothek der Elemente, Ordner „Mathematics“) mit dem Block B62 - „String-Konvertierung“ in einen String umgewandelt. (Elementbibliothek, Ordner „Typkonvertierung“), und wird mit Block B63 - „Set Parameter“ (Elementbibliothek, Ordner „Nextion HMI Panel“ -> Elementordner) im entsprechenden Feld an das Panel gesendet. Einstellungen dieses Geräts.



Die Logik der Variablensteuerung „Lüfter ausschalten x10“ ist ähnlich, die Einstellungen der Blöcke sind wie folgt.

Block b65.



Block B68.



Jetzt stellen wir sicher, dass die Einstellungen zum Zeitpunkt des Controller-Starts aus dem EEPROM gelesen werden. Um dies zu tun, fügen wir eine neue Platine ganz oben in das Projekt ein, so dass das darauf befindliche Schema zuerst ausgeführt wird. Wählen Sie dazu den ersten Plan aus und klicken Sie auf die Schaltfläche "Board vor dem ausgewählten einfügen".



Nennen wir die neue Karte "Lesen der Einstellungen aus dem EEPROM". Karte

1.



Mit Hilfe des Blocks B72 - "Rtrig" (Elementbibliothek, Ordner "Trigger") erzeugen wir einen kurzen Impuls, wenn der Controller eingeschaltet wird. Entsprechend diesem Impuls werden die aus dem nichtflüchtigen Speicher gelesenen Werte in die Variablen "Fan on setpoint x10" und "fan off point x10" geschrieben. Dies geschieht mit Hilfe der Bausteine ​​B71 und B73 - "Aus EEPROM lesen" (Elementbibliothek, Ordner "EEPROM"). Bausteine ​​werden mit dem Bausteineditor parametriert.



Parameterblock B71.



Die Auswahl einer lesbaren Variable im EEPROM erfolgt durch Drücken der „Select“ -Taste. Das Fenster zur Auswahl der Variablen wird geöffnet.



Blockieren Sie die Parameter von B73.



Nun, das letzte Board im Projekt.

Board 12. „



Lüftersteuerung Wenn die aktuelle Temperatur den Sollwert „Fan On Setpoint x10“ überschreitet, erkennt dies die Vergleichseinheit B69 und setzt den Trigger B70 in den Zustand 1, und wenn die Temperatur unter den Sollwert „Fan Off Setpoint x10“ abfällt, wird dies von Block B71 erkannt setzt den B70-Trigger auf den Zustand 0. Der Triggerzustand wird der mit dem Lüfter verbundenen Ausgabeeinheit zugeführt.

Archiv mit Quellcode von Projekten.

Videodemonstration


Jetzt auch beliebt: