Πίνακας περιεχομένων:

Arduino HMI χρησιμοποιώντας μηχανήματα κατάστασης: 9 βήματα
Arduino HMI χρησιμοποιώντας μηχανήματα κατάστασης: 9 βήματα

Βίντεο: Arduino HMI χρησιμοποιώντας μηχανήματα κατάστασης: 9 βήματα

Βίντεο: Arduino HMI χρησιμοποιώντας μηχανήματα κατάστασης: 9 βήματα
Βίντεο: #14 Επικοινωνία OP320 HMI Modbus | Outseal Arduino PLC 2024, Νοέμβριος
Anonim
Arduino HMI χρησιμοποιώντας κρατικές μηχανές
Arduino HMI χρησιμοποιώντας κρατικές μηχανές

Σε αυτό το Instructable, θα σας δείξω πώς να χρησιμοποιήσετε τα Εργαλεία YAKINDU Statechart για να πραγματοποιήσετε ένα απλό και επεκτάσιμο HMI χρησιμοποιώντας ασπίδα πληκτρολογίου LCD 16x2 για Arduino.

Οι μηχανές πεπερασμένης κατάστασης (FSM) είναι ένα ισχυρό μοτίβο σχεδιασμού για την ανάπτυξη πολύπλοκων διεπαφών ανθρώπινων μηχανών (HMI). Καθώς η λειτουργικότητα ενός HMI μπορεί να αυξηθεί, είναι χρήσιμο να χρησιμοποιήσετε ένα μοτίβο σχεδίασης όπως μηχανές κατάστασης.

Το πλήρες παράδειγμα είναι ενσωματωμένο στο YAKINDU Statechart Tools. Επιπλέον, το Eclipse C ++ IDE για το Arduino Plugin έχει χρησιμοποιηθεί για τη μεταγλώττιση και αναβοσβήνει στο IDE.

Μια σύντομη σύνοψη των YAKINDU Statechart Tools

Με αυτό το εργαλείο, είναι δυνατή η δημιουργία μηχανών γραφικής κατάστασης. Επιτρέπει στο χρήστη να δημιουργήσει κώδικα C, C ++ ή Java από τον κρατικό υπολογιστή. Με αυτήν την προσέγγιση, το μοντέλο μπορεί να αλλάξει ή να επεκταθεί και ο χρήστης μπορεί απλά να δημιουργήσει ξανά τον κώδικα και δεν χρειάζεται να γράψει απλό πηγαίο κώδικα.

Προμήθειες

Μέρη:

  • Arduino (Uno, Mega)
  • Καλώδιο USB
  • Ασπίδα πληκτρολογίου LCD 16x2

Εργαλεία:

  • Εργαλεία YAKINDU Statechart
  • Eclipse C ++ IDE για Arduino

Βήμα 1: Το υλικό

Image
Image

Η ασπίδα πληκτρολογίου LCD μπορεί απλά να συνδεθεί στο Arduino. Διαθέτει οθόνη LCD 16x2 και πρόσθετα έξι κουμπιά:

  • Αριστερά
  • σωστά
  • Πάνω
  • Κάτω
  • Επιλέγω
  • (Επαναφορά)

Προφανώς, πέντε από αυτά μπορούν να χρησιμοποιηθούν. Τα πλήκτρα είναι ενσύρματα σε ένα διαχωριστή τάσης και ανιχνεύονται χρησιμοποιώντας τον ακροδέκτη A0 ανάλογα με την τάση. Έχω χρησιμοποιήσει λογισμικό αποσύνδεσης για να τα εντοπίσω σωστά.

Βήμα 2: Καθορίστε πώς πρέπει να λειτουργεί

Έλεγχος HMI
Έλεγχος HMI

Η εφαρμογή θα πρέπει να μπορεί να κάνει τρία πράγματα.

  1. Εδώ θέλω να χρησιμοποιήσω τα κουμπιά για πλοήγηση μεταξύ πέντε καταστάσεων: επάνω, μεσαία, κάτω, αριστερά και δεξιά
  2. Χρονόμετρο Ένα απλό χρονόμετρο, το οποίο μπορεί να ξεκινήσει, να σταματήσει και να μηδενιστεί. Θα πρέπει να αυξάνεται κάθε 100 χιλιοστά του δευτερολέπτου
  3. CounterThe τρίτο μέρος περιέχει ένα απλό πάνω/κάτω μετρητή. Θα πρέπει να μπορεί να μετρά θετικούς αριθμούς και θα πρέπει να μπορεί να επαναρυθμιστεί

Το ενεργό μενού (ή η κατάσταση) θα εμφανιστεί στην οθόνη LCD 16x2 στην επάνω γραμμή. Η εφαρμογή (κατάσταση, χρονοδιακόπτης ή μετρητής) θα εμφανιστεί στην κάτω γραμμή. Για πλοήγηση, πρέπει να χρησιμοποιείτε το αριστερό και το δεξί κουμπί.

Βήμα 3: Διασύνδεση της κρατικής μηχανής

Τα κουμπιά θα καταργηθούν και θα συνδεθούν με το μηχάνημα κατάστασης. Μπορούν να χρησιμοποιηθούν όπως σε εκδηλώσεις στην κρατική μηχανή. Επιπλέον, οι λειτουργίες ορίζονται για την εμφάνιση του τρέχοντος μενού. Και ορίζονται τουλάχιστον δύο μεταβλητές, μία για το χρονόμετρο και μία για τον μετρητή.

διεπαφή:

// κουμπιά ως συμβάντα εισόδου σε συμβάν δεξιά σε περίπτωση αριστερά σε συμβάν κάτω στο συμβάν επιλέξτε // εμφάνιση HMI συγκεκριμένων τιμών λειτουργίας displayLCDString (τιμή: συμβολοσειρά, μήκος: ακέραιος, θέση: ακέραιος) οθόνη λειτουργίας LCDInteger (τιμή: ακέραιος, θέση: ακέραιος) λειτουργία clearLCDRow (θέση: ακέραιος) εσωτερικός: // μεταβλητές για αποθήκευση var cnt: ακέραιος var χρόνος Cnt: ακέραιος = 0

Μετά τη δημιουργία του κώδικα C ++, τα συμβάντα πρέπει να καταργηθούν και να συνδεθούν στη διεπαφή. Αυτό το απόσπασμα κώδικα δείχνει πώς να το κάνετε αυτό.

Αρχικά, θα καθοριστούν τα κουμπιά:

#define NONE 0 #define SELECT 1 #define LEFT 2 #define DOWN 3 #define UP 4 #define RIGHT 5

Στη συνέχεια, υπάρχει μια λειτουργία που έχει οριστεί για ανάγνωση του κουμπιού. Οι τιμές ενδέχεται να διαφέρουν, ανάλογα με τον κατασκευαστή του LCD Shield.

static int readButton () {int αποτέλεσμα = 0; αποτέλεσμα = analogRead (0); εάν (αποτέλεσμα <50) {επιστροφή ΔΕΞΙΑ? } if (αποτέλεσμα <150) {return UP; } if (αποτέλεσμα <300) {return DOWN? } if (αποτέλεσμα <550) {return LEFT? } if (αποτέλεσμα <850) {return SELECT; } επιστροφή ΚΑΝΕΝΑ? }

Στο τέλος, τα κουμπιά θα καταργηθούν. Έκανα καλά αποτελέσματα με 80 ms. Μόλις απελευθερωθεί ένα κουμπί, θα ανεβάσει το αντίστοιχο σε περίπτωση.

int oldState = NONE; static void raiseEvents () {int buttonPressed = readButton (); καθυστέρηση (80)? oldState = buttonPressed; if (oldState! = NONE && readButton () == NONE) {switch (oldState) {case SELECT: {stateMachine-> raise_select (); Διακοπή; } περίπτωση ΑΡΙΣΤΕΡΑ: {stateMachine-> raise_left (); Διακοπή; } περίπτωση ΚΑΤΩ: {stateMachine-> raise_down (); Διακοπή; } case UP: {stateMachine-> raise_up (); Διακοπή; } case RIGHT: {stateMachine-> raise_right (); Διακοπή; } προεπιλογή: {break; }}}}

Βήμα 4: Έλεγχος HMI

Κάθε κατάσταση χρησιμοποιείται για ένα μέρος του μενού. Υπάρχουν υπο -κράτη, όπου η εφαρμογή - για παράδειγμα το χρονόμετρο - θα εκτελεστεί.

Με αυτόν τον σχεδιασμό, η διεπαφή μπορεί εύκολα να επεκταθεί. Πρόσθετα μενού μπορούν απλά να προστεθούν χρησιμοποιώντας το ίδιο μοτίβο σχεδίασης. Η ανάγνωση μιας αξίας ενός αισθητήρα και η εμφάνισή του σε ένα τέταρτο στοιχείο μενού δεν είναι μεγάλη υπόθεση.

Προς το παρόν, μόνο αριστερά και δεξιά χρησιμοποιούνται ως χειριστήριο. Αλλά πάνω και κάτω μπορεί επίσης να χρησιμοποιηθεί ως επέκταση πλοήγησης στο κύριο μενού. Μόνο το κουμπί επιλογής θα χρησιμοποιηθεί για την εισαγωγή ενός συγκεκριμένου στοιχείου μενού.

Βήμα 5: Χειριστείτε καταστάσεις

Χειριστείτε τα κράτη
Χειριστείτε τα κράτη

Το μενού καταστάσεων λαβής χρησιμοποιείται μόνο ως επιπλέον παράδειγμα πλοήγησης. Η χρήση πάνω, κάτω, δεξιά ή αριστερά επιτρέπει την εναλλαγή μεταξύ των καταστάσεων. Η τρέχουσα κατάσταση θα εκτυπώνεται πάντα στη δεύτερη γραμμή της οθόνης LCD.

Βήμα 6: Χρονόμετρο

Χρονόμετρο
Χρονόμετρο

Το χρονόμετρο είναι αρκετά απλό. Αρχικά, η τιμή του χρονοδιακόπτη θα επαναρυθμιστεί. Το χρονόμετρο μπορεί να ξεκινήσει χρησιμοποιώντας το αριστερό κουμπί και να αλλάξει χρησιμοποιώντας αριστερά και δεξιά. Η χρήση επάνω ή κάτω επαναφέρει το χρονόμετρο. Μπορείτε επίσης να ρυθμίσετε το χρονόμετρο στο μηδέν χρησιμοποιώντας το κουμπί επιλογής δύο φορές - αφήνοντας το μενού και εισάγοντάς το ξανά, καθώς ο χρονοδιακόπτης θα μηδενιστεί με την αρχική εισαγωγή του χρονόμετρου.

Βήμα 7: Μετρητής

Μετρητής
Μετρητής

Τουλάχιστον, υπάρχει ένας μετρητής που εφαρμόζεται. Η είσοδος στην κατάσταση μετρητή επαναφέρει τον μετρητή. Μπορεί να ξεκινήσει χρησιμοποιώντας οποιοδήποτε κουμπί, εκτός από το κουμπί επιλογής. Εφαρμόζεται ως απλός μετρητής πάνω/κάτω, η τιμή του οποίου δεν μπορεί να είναι μικρότερη από 0.

Βήμα 8: Προσομοίωση

Βήμα 9: Λάβετε το Παράδειγμα

Μπορείτε να κατεβάσετε το IDE εδώ: YAKINDU Statechart Tools

Αφού κατεβάσετε το IDE, θα βρείτε το παράδειγμα μέσω αρχείου -> N ew -> Παράδειγμα

Είναι δωρεάν για χομπίστες, αλλά μπορείτε επίσης να χρησιμοποιήσετε μια δοκιμή 30 ημερών.

Συνιστάται: