Πίνακας περιεχομένων:
- Βήμα 1: Πώς διαβιβάζεται το μητρώο
- Βήμα 2:.. Αλλά πριν…
- Βήμα 3: Επεξεργασία των αντικειμένων Nextion
Βίντεο: Μια διαφορετική προσέγγιση με επόμενο: 3 βήματα
2024 Συγγραφέας: John Day | [email protected]. Τελευταία τροποποίηση: 2024-01-30 08:35
Στο πρώτο μου έργο με το Arduino Nano συνδεδεμένο με την οθόνη αφής Nextion, είχα γράψει μια μακρά σειρά εντολών για να επικοινωνήσω στο Nextion μέσω της σειριακής θύρας και αυτό είναι αναπόφευκτο αν χρειαστεί να στείλουμε εντελώς ανεξάρτητες εντολές, σε τυχαίες στιγμές.
Πρέπει επίσης να παραδεχτώ ότι πέρασα περισσότερο χρόνο σε «μάχες» με τις Βιβλιοθήκες από οτιδήποτε άλλο. Έτσι άρχισα σταδιακά να δουλεύω εντελώς χωρίς τις βαριές βιβλιοθήκες του ITEAD.
Σύντομα συνειδητοποίησα ότι δεν είχα καμία επείγουσα ανάγκη να ανακοινώσω στον Nextion τις αλλαγές στα χαρακτηριστικά των οπτικών αντικειμένων, αλλά προτιμώ να περιμένω μέχρι να τα συλλέξω και να τα στείλω στο Nextion συνολικά, όταν έχω μια πλήρη ομάδα.
Θα προσπαθήσω να εξηγήσω καλύτερα τον εαυτό μου.
Όταν στο έργο μου που αποτελείται από 16 ενδείξεις κειμένου θέλω να ενεργοποιήσω ή να απενεργοποιήσω κάποιες από αυτές, το κάνω εκμεταλλευόμενος το χαρακτηριστικό «bco» που για ενεργοποίηση, περνά (για παράδειγμα) από σκούρο γκρι σε λευκό (εάν είναι ένα μαύρο ορθογώνιο) και αντίστροφα για απενεργοποίηση.
Στην εφαρμογή μου βρήκα άχρηστο να στέλνω 16 εντολές στη σειριακή θύρα σε 16 διαφορετικές στιγμές, μία για κάθε «bco» από τα 16 σήματα.
Προτιμώ το Arduino να συλλέγει ποια σήματα πρέπει να είναι "on" (HIGH) και ποια πρέπει να είναι "off" (LOW) σε έναν καταχωρητή 16 bit, όπου κάθε bit αντιστοιχεί σε ένα από τα 16 σήματα του Nextion.
Μετά την ενημέρωση κάθε δυαδικού ψηφίου του καταχωρητή, μεταβιβάζω την τιμή του στο Nextion, ένα μόνο μήνυμα που περιέχει συλλογικές πληροφορίες σχετικά με 16 στοιχεία.
Με αυτόν τον τρόπο η επικοινωνία από το Arduino και το Nextion μειώνεται σημαντικά επειδή σε αυτό το μόνο μήνυμα που μεταδίδεται στο σειριακό στο Nextion, συλλέγονται πληροφορίες που διαφορετικά θα απαιτούσαν τη μετάδοση 16 μηνυμάτων.
Είναι αλήθεια ότι δεν είναι πάντα απαραίτητο να ενημερώσετε όλες τις αναφορές, αλλά είμαι βέβαιος ότι διαφορετικά θα χάσει περισσότερο χρόνο.
Φυσικά, κάθε bit που περιέχεται στον ακέραιο αριθμό που λαμβάνει το Arduino, η οθόνη Nextion θα πρέπει να το συσχετίσει με το επιθυμητό χαρακτηριστικό.
Αυτό σημαίνει ότι ο κωδικός πρέπει να είναι γραμμένος στην οθόνη Nextion, αλλά δεν πρέπει να φοβάται: αν τα κατάφερα…
Στη συνέχεια, υπάρχει ένα διπλό πλεονέκτημα: το Arduino θα έχει έναν ελαφρύτερο κωδικό και θα ασχολείται λιγότερο με τη σειριακή επικοινωνία με το Nextion.
Το Nextion αφού λάβει τα δεδομένα σε ένα μόνο μήνυμα, θα τα χρησιμοποιήσει πολύ πιο γρήγορα από ό, τι αν περίμενε 16 μηνύματα. Η ενεργοποίηση ή απενεργοποίηση 16 σημάτων θα είναι επομένως σχεδόν ταυτόχρονη σε σχέση με την πιο συνηθισμένη λειτουργία, στην οποία ο χρόνος για έναν άγνωστο αριθμό μηνυμάτων μεσολαβεί μεταξύ της εκτέλεσης της εντολής για την πρώτη σηματοδότηση και της εντολής για την τελευταία σηματοδότηση.
Στην οθόνη Nextion δημιούργησα αυτό το σύστημα με τον κλασικό τρόπο, δηλαδή, η περιστροφή ενός καταχωρητή «μάσκας» κάθε φορά σας επιτρέπει να εξετάσετε καθένα από τα 16 bit. Όταν το bit που εξετάζεται είναι Υ HIGHΗΛΟ, το σήμα που σχετίζεται με αυτό το bit ανάβει στην οθόνη και απενεργοποιείται όταν το bit είναι LOW.
Η «αρνητική» πλευρά αυτού του συστήματος είναι ότι ο κώδικας που γράφεται στην οθόνη Nextion είναι λιγότερο βολικός για τεκμηρίωση από τον κώδικα Arduino. Επιπλέον, ο κώδικας Nextion κινδυνεύει να διασκορπιστεί σε διάφορα αντικείμενα. Πρέπει να ληφθεί μέριμνα για να τεκμηριωθεί αυτό που κάνετε αμέσως.
Χρησιμοποιώ το Σημειωματάριο ++ για να γράψω τον κώδικα τον οποίο στη συνέχεια αντιγράφω στο αντικείμενο Nextion που βρίσκεται σχεδόν αποκλειστικά στο tm0 της σελίδας 0.
Η σύνταξη της γλώσσας Nextion έχει πολλούς περιορισμούς, αλλά καταφέρνει να τους ξεπεράσει ή να τους ξεπεράσει με ελάχιστο κόπο και να προσπαθήσει να δει τα προβλήματα από άποψη που είναι επίσης ασυνήθιστα.
Για παράδειγμα, αναφέρω τον τρόπο με τον οποίο το Arduino γράφει το μητρώο προς μετάδοση, γραμμένο από εμένα με τον πιο στοιχειώδη δυνατό τρόπο.
Βήμα 1: Πώς διαβιβάζεται το μητρώο
Στο αρχείο ArduinoCode. PDF εμφανίζω όλο το σκίτσο μου. (Διαβάζοντας τον κώδικα εδώ κάτω δεν είναι τόσο σαφές)
Εδώ κάτω, θέλω μόνο να δείξω με ποιον τρόπο το Arduino στέλνει το 16 bit Register στο Nextion, χωρίς τη βοήθεια των βιβλιοθηκών, αλλά τηρώντας τη σύνταξη που περιγράφει το ITEAD.
//***************************************************************************************
άκυρο NexUpd ()
//***************************************************************************************
{
SRSerial.print ("vINP.val =");
SRSerial.print (InpReg); // μεταδώστε τα 16 συγκεντρωμένα bits στην Nextion Display
SRSerial.print (InpReg); // μεταδώστε τα 16 συγκεντρωμένα bits στην Nextion Display
SRSerial.write (τερματικό); // 255
SRSerial.write (τερματικό); // 255
SRSerial.write (τερματικό); // 255
}
//***************************************************************************************
Βήμα 2:.. Αλλά πριν…
Φυσικά ο κώδικας ξεκινά με όλες τις δηλώσεις και το setup ().
Οι είσοδοι είναι INPUT_PULLUP, επομένως οι διακόπτες εισόδου είναι κανονικά ανοιχτοί και όταν κλείνουν, εφαρμόζουν το GND στην αντίστοιχη είσοδο.
(Αυτό είναι το πρώτο μου πρόγραμμα με οδηγίες και λυπάμαι που σας παρουσιάζω τον κωδικό μου με αυτόν τον κακό τρόπο. Κατεβάστε το αρχείο ArduinoCode. PDF ότι είναι πολύ σαφές.
Επιτρέψτε μου να μιλήσω περισσότερο για αυτό
Έχω αναπτύξει τον δικό μου τρόπο να "πω" στην οθόνη Nextion τι πρέπει να κάνει. Συνήθως το MCU (το Arduino στην περίπτωσή μου) στέλνει ένα μήνυμα για κάθε παραλλαγή να ισχύει για το χαρακτηριστικό οποιουδήποτε αντικειμένου. Αυτή η μέθοδος σπαταλά πολύ χρόνο για να κάνει πράγματα όχι πάντα τόσο επείγοντα για τη συνεχή φόρτωση της σειριακής γραμμής. Βρήκα πιο βολικό ότι το Arduino συλλέγει σε καταχωρητές 16 bit τις πληροφορίες σχετικά με τα χαρακτηριστικά που διαφέρουν στο Nextion. Περίπου κάθε 500 mS, το Arduino μου στέλνει στο Nextion ένα μήνυμα που περιέχει τα 16 bit που περιέχονται σε κάθε καταχωρητή κάθε φορά. Προφανώς στο Nextion χρειαζόμαστε τον κώδικα που χειρίζεται αυτό που πρέπει να εκτελεστεί. Αυτή η κατανομή της εργασίας (και του κώδικα) ας πάρει πολλά άλλα πλεονεκτήματα. Για παράδειγμα, σκεφτείτε πώς να κάνετε το φως να αναβοσβήνει! Με την προσέγγισή μου είναι εύκολο: μπείτε λίγο στο μητρώο Arduino και στείλτε το στο Nextion. Οι δίδυμοι καταχωρητές Nextion θα μπορούσαν να ενημερώνονται από το Arduino πολύ σπάνια, επειδή η συχνότητα αναλαμπής είναι ανεξάρτητη από την επικοινωνία. η συχνότητα αναλαμπής εξαρτάται από ένα αντικείμενο Χρονοδιακόπτη στο Nextion και μπορεί να τρέξει με την ελάχιστη χρονική βάση κοντά στα 50 mS. Έτσι, με τη μέθοδό μου μπορούμε να αναβοσβήνουμε ένα φως στο Nextion σε συχνότητα σχετικά υψηλή (ας υποθέσουμε 2 Hz), ακόμη και αν το Arduino μου στέλνει μηνύματα κάθε 10 δευτερόλεπτα, μόνο για ένα ακραίο παράδειγμα. Αυτό μπορεί να προτείνει το αντίθετο πρόβλημα: πώς να το κάνετε εάν η επικοινωνία αποτύχει; Αυτό δεν είναι το αντικείμενο αυτής της συζήτησης, αλλά έχω ήδη λύσει αυτό το πρόβλημα με ένα είδος Watch Dog: ένα μέσα στον κώδικα Arduino, ένα άλλο στον κώδικα Nextion.
Το αναβοσβήνει ρυθμίζεται από τον κώδικα Nextion, όπου κάθε φως ακολουθεί τους κατάλληλους κανόνες του: ON/OFF ή GREEN/RED ή επίσης αλλάζει το γραμμένο μέσα (ή άλλο περισσότερο). Θα μπορούσα να πω κάποια άλλα πράγματα για το έργο μου, αλλά προτιμώ να περιμένω τις ερωτήσεις σας, πριν προσθέσω πάρα πολλές λέξεις που δεν είναι τόσο εύκολο για μένα να μεταφράσω καλά όπως θα ήθελα.
Βήμα 3: Επεξεργασία των αντικειμένων Nextion
Εδώ είναι ένα μέρος του κώδικα που έγραψα με το Nextion Editor στο αντικείμενο tm0.
Δεν μας διαφεύγει ότι με τα 16 bits που λαμβάνονται από το Arduino, η οθόνη Nextion δεν ενεργοποιεί και απενεργοποιεί απλώς τα σήματα. Προς το παρόν παραλείπω τις εξηγήσεις για να μην περιπλέξω την κατανόηση.
Είμαι αρχάριος και επομένως είναι καλύτερο να κατεβάσετε τον κώδικα Nextion. Αντί για να διαβάσετε τον μπερδεμένο κώδικα εδώ. (Λυπάμαι που είναι η πρώτη μου διδάσκουσα)
Εάν επιθυμείτε, μπορείτε να κατεβάσετε τον πλήρη κωδικό "HMI" για αυτήν την εφαρμογή μου. Το όνομα αρχείου αυτού του κωδικού είναι POW1225. HMI. Μπορεί να τρέξει στην οθόνη Nextion NX4024T032, αλλά για να το καταλάβετε πρέπει να κολυμπήσετε σε πολλά αντικείμενα και να δείτε τον κώδικα μέσα στο μικρό παράθυρο του προγράμματος επεξεργασίας. Έτσι νομίζω ότι θα είναι πιο εύκολο να δούμε τον κύριο κώδικα, γραμμένο στο αρχείο Nextion code. PDF
// Έργο POW1225. HMI 15 Μαΐου 2019
// vACC (va0) Συσσωρευτής
// vINP (va1) Μητρώο εισόδου xxxx xxxx xxxx xxxx
tm0.en = 1 // tm0 Έναρξη
tm0.tim = 50 // tm0 Βάση χρόνου 50 mS
// RDY ***************
vACC.val = vINP.val & 0x0001 // Μάσκα
εάν (vACC.val! = 0) // Δοκιμή RDY
{
tRDY.pco = ΜΠΛΕ // ΚΟΚΚΙΝΟ
}αλλού
{
tRDY.pco = ΓΚΡΙ // σκούρο ΓΚΡΙ
}
// PWR ***************
vACC.val = vINP.val & 0x0002
εάν (vACC.val! = 0) // Δοκιμή PWR
{
tPWR.pco = ΠΡΑΣΙΝΟ // ανοιχτο ΠΡΑΣΙΝΟ
tPON.txt = "ON" // ON
tPON.pco = ΠΡΑΣΙΝΟ // ανοιχτο ΠΡΑΣΙΝΟ
}αλλού
{
tPWR.pco = ΓΚΡΙ // σκούρο ΓΚΡΙ 33808
tPON.txt = "OFF" // OFF
tPON.pco = ΓΚΡΙ // σκούρο ΓΚΡΙ 33808
}
// ΞΗΡΟΣ ***************
vACC.val = vINP.val & 0x0004
εάν (vACC.val! = 0) // Δοκιμή ΣΤΕΓΝΗΣ
{
tDRV.pco = ΜΠΛΕ // ΜΠΛΕ
tDRY.pco = ΜΠΛΕ // ΜΠΛΕ
}αλλού
{
tDRV.pco = ΓΚΡΙ // σκούρο ΓΚΡΙ 33808
tDRY.pco = ΓΚΡΙ // σκούρο ΓΚΡΙ 33808
}
// ΤΡΕΞΙΜΟ ***************
vACC.val = vINP.val & 0x0018
if (vACC.val! = 0) // Test RUN
{
tRUN.bco = RED // MARCIA RED (on)
tRUN.pco = ΜΑΥΡΟ // στο ΜΑΥΡΟ
tDIR.bco = RED // DIR RED
tDIR.pco = ΜΑΥΡΟ // στο ΜΑΥΡΟ
}αλλού
{
tRUN.bco = 32768 // MARCIA GRAY (απενεργοποιημένο)
tRUN.pco = ΓΚΡΙ // σε ΓΚΡΙ
tDIR.bco = 32768 // DIR σκούρο ΠΡΑΣΙΝΟ 1024
tDIR.pco = ΓΚΡΙ // ΝΤΡΙ ΓΚΡΙ
tDIR.txt = "---" // STOP
}
// ΑΡΙΣΤΕΡΑ **************
vACC.val = vINP.val & 0x0008
if (vACC.val! = 0) // Test RUN Right
{
tDIR.txt = "<<<" // DIR ΑΡΙΣΤΕΡΑ
}
// ΣΩΣΤΑ *************
vACC.val = vINP.val & 0x0010
if (vACC.val! = 0) // Test RUN Left
{
tDIR.txt = ">>>" // DIR ΔΕΞΙΑ
}
// ΚΑΙ ΤΑ ΔΥΟ **************
vACC.val = vINP.val & 0x0018
if (vACC.val == 24) // Test RUN και τα δύο
{
tDIR.txt = ">>! <<" // ΝΤΥΡΑ ΚΑΙ ΤΑ ΔΥΟ
}
// ΔΟΚΙΜΗ **************
vACC.val = vINP.val & 0x0020
εάν (vACC.val! = 0) // ΔΟΚΙΜΗ ΔΟΚΙΜΗΣ
{
tTEST.pco = ΛΕΥΚΟ // ΛΕΥΚΟ
tsw tTEST, 1 // Ενεργοποίηση συμβάντων αφής
}αλλού
{
tTEST.pco = ΓΚΡΙ // σκούρο ΓΚΡΙ 33808
tsw tTEST, 0 // Απενεργοποίηση συμβάντων αφής
}
// ΒΛΑΒΗ *************
vACC.val = vINP.val & 0x0040
εάν (vACC.val == 0) // Δοκιμή Βλάβης
{
tFLT.pco = ΓΚΡΙ // ΒΛΑΒΟΣ απουσιάζει
}
εάν (vACC.val! = 0)
{
tFLT.pco = ΚΙΤΡΙΝΟ // ΒΛΑΒΟΣ παρόν
}
// EME ***************
vACC.val = vINP.val & 0x0080
if (vACC.val == 0) // Δοκιμή EME
{
tEME.pco = ΓΚΡΙ // Η ΕΜΕ απουσιάζει
}
εάν (vACC.val! = 0)
{
tEME.pco = RED // EME παρόν
}
}
// FERMO *************
vACC.val = vINP.val & 0x0100
εάν (vACC.val! = 0) // Δοκιμή FERMO
{
tFER.pco = ΜΑΥΡΟ // ΜΑΥΡΟ
tFER.bco = ΠΡΑΣΙΝΟ // ΠΡΑΣΙΝΟ
}αλλού
{
tFER.pco = ΓΚΡΙ // ΓΚΡΙ
tFER.bco = 672 // σκούρο ΠΡΑΣΙΝΟ
}
// *******************
Αναγνώριση
Θέλω να δώσω τις ευχαριστίες μου στον Gideon Rossouwv γιατί διαβάζοντας το Instructables του έχω κερδίσει γρήγορα μέρος των στόχων μου. Ευχαριστώ κ. Γκίντεον Ροσούββ
Συνιστάται:
Η διαφορετική άχρηστη μηχανή: 6 βήματα (με εικόνες)
Το διαφορετικό άχρηστο μηχάνημα: Με τόσα πολλά άχρηστα μηχανήματα γύρω, προσπάθησα να φτιάξω ένα που είναι λίγο διαφορετικό. Αντί να έχω έναν μηχανισμό που σπρώχνει τον διακόπτη εναλλαγής, αυτό το μηχάνημα περιστρέφει απλώς τον διακόπτη 180 μοίρες, σε αυτό το έργο χρησιμοποίησα ένα Nema 17 steppermotor, το οποίο
Η μέτρηση του καρδιακού ρυθμού σας βρίσκεται στην άκρη του δακτύλου σας: Προσέγγιση φωτοπληθυσμογραφίας για τον προσδιορισμό του καρδιακού ρυθμού: 7 βήματα
Η μέτρηση του καρδιακού ρυθμού σας βρίσκεται στην άκρη του δακτύλου σας: Προσέγγιση φωτοπληθυσμογραφίας για τον προσδιορισμό του καρδιακού ρυθμού: Ο φωτοπληθυσμογράφος (PPG) είναι μια απλή και χαμηλού κόστους οπτική τεχνική που χρησιμοποιείται συχνά για τον εντοπισμό αλλαγών στον όγκο αίματος σε μια μικροαγγειακή κλίνη ιστού. Χρησιμοποιείται κυρίως μη επεμβατικά για την πραγματοποίηση μετρήσεων στην επιφάνεια του δέρματος, συνήθως
HeadBot-ένα αυτο-εξισορροπητικό ρομπότ για εκμάθηση STEM και προσέγγιση: 7 βήματα (με εικόνες)
HeadBot-ένα αυτο-εξισορροπητικό ρομπότ για STEM Learning and Outreach: Το Headbot-ένα ύψος δύο ποδιών, ρομπότ που εξισορροπεί-είναι το πνευματικό τέκνο της South Eugene Robotics Team (SERT, FRC 2521), μια ανταγωνιστική ομάδα ρομποτικής λυκείου στην ΠΡΩΤΗ Διαγωνισμός ρομποτικής, από το Eugene, Oregon. Αυτό το δημοφιλές ρομπότ προσέγγισης κάνει
Δημιουργήστε επαγγελματικά μπροστινά πλαίσια για το επόμενο έργο DIY: 7 βήματα (με εικόνες)
Φτιάξτε επαγγελματικά μπροστινά πλαίσια για το επόμενο έργο DIY: Η κατασκευή επαγγελματικών μπροστινών πλαισίων για έργα DIY δεν πρέπει να είναι δύσκολη ή δαπανηρή. Με κάποιο ΔΩΡΕΑΝ λογισμικό, προμήθειες γραφείου και λίγο χρόνο μπορείτε να δημιουργήσετε επαγγελματικά μπροστινά πάνελ στο σπίτι για να δημιουργήσετε το επόμενο έργο σας
Δημιουργήστε μια συσκευή Apple HomeKit Temperature Sensor (DHT22) χρησιμοποιώντας μια RaspberryPI και μια DHT22: 11 βήματα
Δημιουργήστε μια συσκευή Apple HomeKit Temperature Sensor (DHT22) χρησιμοποιώντας μια RaspberryPI και μια DHT22: Έψαχνα για έναν χαμηλού κόστους αισθητήρα θερμοκρασίας / υγρασίας που θα μπορούσα να χρησιμοποιήσω για να παρακολουθήσω τι συμβαίνει στον ανιχνευτικό μου χώρο, καθώς διαπίστωσα ότι αυτή την άνοιξη ήταν πολύ υγρό , και είχε πολύ υγρασία. Έτσι έψαχνα έναν αισθητήρα σε λογικές τιμές που θα μπορούσα να