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

State Machine on Arduino - a Pedestrian Traffic Light: 6 Steps (with Pictures)
State Machine on Arduino - a Pedestrian Traffic Light: 6 Steps (with Pictures)

Βίντεο: State Machine on Arduino - a Pedestrian Traffic Light: 6 Steps (with Pictures)

Βίντεο: State Machine on Arduino - a Pedestrian Traffic Light: 6 Steps (with Pictures)
Βίντεο: Making Traffic Lights with Arduino Uno - Beginner Level (algorithm, coding, circuit design) 2024, Ιούλιος
Anonim
State Machine στο Arduino - φανάρι πεζών
State Machine στο Arduino - φανάρι πεζών

Γεια σας! Θα σας δείξω πώς να προγραμματίσετε ένα φανάρι πεζών για το Arduino σε C ++ με ένα μηχάνημα πεπερασμένης κατάστασης χρησιμοποιώντας το YAKINDU Statechart Tools. Αυτό θα καταδείξει τη δύναμη των κρατικών μηχανών και μπορεί να χρησιμοποιηθεί ως σχέδιο για περαιτέρω έργα.

Προμήθειες

Χρειάζεστε μόνο ένα Arduino, μερικά κουμπιά, LED, Jumper και αντιστάσεις.

Σκεύη, εξαρτήματα

  • 2x κουμπί
  • 2x φανάρια ή μπορείτε να χρησιμοποιήσετε LED με αντιστάσεις 220 Ohm
  • 2x αντιστάσεις 10k Ohm
  • Breadboard
  • Αλτης
  • Arduino Uno/Mega (ή οποιοδήποτε άλλο, που έχει τουλάχιστον 8 GPIO)

Λογισμικό

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

Βήμα 1: Ορίστε πώς λειτουργεί: Φανάρι πεζών

Αρχικά, πρέπει να καθορίσουμε πώς πρέπει να λειτουργεί το φανάρι πεζών. Προσπάθησα να συνοψίσω τα σημεία:

  • Χρησιμοποιούνται δύο φανάρια - το ένα για τα αυτοκίνητα και το άλλο για τους πεζούς
  • Ο φωτεινός σηματοδότης μπορεί να ανάψει χρησιμοποιώντας ένα κουμπί
  • Ο πεζός μπορεί να ζητήσει τη διέλευση του δρόμου πατώντας ένα κουμπί
  • Το σβηστό φανάρι υποδεικνύεται αναβοσβήνοντας και τα δύο κίτρινα LED
  • Αφού ανάψει, το φανάρι περιμένει για 10 δευτερόλεπτα σε ασφαλή λειτουργία
  • Μετά την ασφαλή λειτουργία, τα αυτοκίνητα έχουν πάντα πράσινη φάση έως ότου ένας πεζός ξεκινήσει ένα αίτημα
  • Το αίτημα πεζών για διέλευση υποδεικνύεται με εναλλαγή κίτρινου LED

Επιπλέον, υπάρχουν ορισμένες χρονικές εκδηλώσεις ανάλογα με τον τρόπο λειτουργίας του φανάρι.

Βήμα 2: Δημιουργήστε το κύκλωμα

Κατασκευάστε το κύκλωμα
Κατασκευάστε το κύκλωμα

Ας ξεκινήσουμε τη ρύθμιση του κυκλώματος. Στο παράδειγμά μου, όπως μπορείτε να δείτε στην εικόνα προεπισκόπησης, έχω χρησιμοποιήσει ένα Arduino Mega 2560, αλλά κάθε άλλο Arduino με τουλάχιστον οκτώ GPIO θα πρέπει να είναι εντάξει. Επιπλέον, έχω αγοράσει μερικά φανάρια 5V στο Amazon. Απλώς αναζητήστε το Φανάρι Arduino. Διαφορετικά, μπορείτε απλά να χρησιμοποιήσετε έξι διαφορετικά LED. Επιπλέον, χρειάζεστε δύο κουμπιά και δύο αντιστάσεις 10k Ohm.

Τα τρία αριστερά LED χρησιμοποιούνται για την κυκλοφορία του αυτοκινήτου και τα τρία δεξιά LED για τους πεζούς, όπου το κίτρινο μπορεί να υποδείξει ένα αίτημα.

Βήμα 3: Δημιουργία της κρατικής μηχανής

Δημιουργία της κρατικής μηχανής
Δημιουργία της κρατικής μηχανής

Έτσι, όπως μπορείτε να δείτε, υπάρχουν δύο κύριες καταστάσεις με σύνθετα μέλη - κατάσταση ενεργοποίησης και απενεργοποίησης. Μπορείτε να κάνετε εναλλαγή μεταξύ των δύο καταστάσεων χρησιμοποιώντας το συμβάν onOff, το οποίο είναι ενσύρματο στο κουμπί ON/OFF. Στην αρχική κατάσταση, την κατάσταση απενεργοποίησης, και οι δύο κίτρινες λυχνίες LED αρχίζουν να αναβοσβήνουν κάθε δευτερόλεπτο. Μόλις ανάψει το φανάρι, ξεκινά στο Safestate. Μετά από 10 δευτερόλεπτα θα αντιμετωπιστεί η τυπική συμπεριφορά των φανών. Η κόκκινη και κίτρινη λυχνία LED θα ανάψει στην κατάσταση StreetPrepare και το φανάρι θα γίνει πράσινο μετά από 2 δευτερόλεπτα ακόμη. Από εδώ και στο εξής, το κρατικό μηχάνημα περιμένει την εκδήλωση pedestrianRequest, η οποία είναι συνδεδεμένη στο δεύτερο κουμπί. Μετά την αποστολή του συμβάντος, το αίτημα θα υποδεικνύεται με εναλλαγή του κίτρινου LED κάθε δευτερόλεπτο στην κατάσταση PedWating. 7 δευτερόλεπτα αργότερα, το φανάρι θα αλλάξει πρώτα σε κίτρινο και έπειτα σε κόκκινο έως ότου οι πεζοί λάβουν το σήμα να μεταβούν στην κατάσταση PedestrianGreen. Μετά από αυτό, το PedestrianRed ενεργοποιείται και ο κύκλος επαναλαμβάνεται. Αυτό μπορεί να διακοπεί μόνο αν σβήσετε ξανά το φανάρι.

Βήμα 4: Εκτέλεση του Παραδείγματος

Βήμα 5: Δημιουργήθηκε κώδικας C ++

Ο κωδικός C ++ που δημιουργείται είναι μια κλασική θήκη μεταγωγής για τη διαχείριση της λογικής του μηχανήματος κατάστασης. Αυτό είναι μόνο ένα απόσπασμα κώδικα για το πώς φαίνεται:

void TrafficLightCtrl:: runCycle () {clearOutEvents (); για (stateConfVectorPosition = 0; stateConfVectorPosition <maxOrthogonalStates; stateConfVectorPosition ++) {switch (stateConfVector [stateConfVectorPosition])) {case main_region_on_r1_StreetGreen: {main_region_on_r1_rere_rere_rere_rere_rere_re1_StreetGreen_re1_StreetGreen_re1_StreetGreen: Διακοπή; } case main_region_on_r1_PedWaiting_r1_waitOn: {main_region_on_r1_PedWaiting_r1_waitOn_react (true); Διακοπή; } προεπιλογή: break; } clearInEvents (); }

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

Ολόκληρο το παράδειγμα είναι έτοιμο για μεταγλώττιση και εκτέλεση. Έρχεται με YAKINDU Statechart Tools, το οποίο είναι δωρεάν για μη εμπορική χρήση. Μετά τη λήψη, μπορείτε να εισαγάγετε το παράδειγμα απευθείας στο εργαλείο:

Αρχείο -> Νέο -> Παράδειγμα -> Παραδείγματα YACINDU Statechart -> Επόμενο -> Φανάρι (C ++) για Arduino

> ΕΔΩ μπορείτε να κατεβάσετε το YAKINDU Statechart Tools <<

Μπορείτε να ξεκινήσετε με δοκιμή 30 ημερών. Στη συνέχεια, πρέπει να λάβετε μια άδεια, η οποία είναι δωρεάν για μη εμπορική χρήση!

Συνιστάται: