Cuprins:

State Machine pe Arduino - un semafor pietonal: 6 pași (cu imagini)
State Machine pe Arduino - un semafor pietonal: 6 pași (cu imagini)

Video: State Machine pe Arduino - un semafor pietonal: 6 pași (cu imagini)

Video: State Machine pe Arduino - un semafor pietonal: 6 pași (cu imagini)
Video: 🚨FlipFlop-ul nextEdu - prezentare instrucțiuni de asamblare #nextedu 2024, Noiembrie
Anonim
State Machine pe Arduino - un semafor pietonal
State Machine pe Arduino - un semafor pietonal

Hei, acolo! Vă voi arăta cum să programați un semafor pietonal pentru Arduino în C ++ cu o mașină de stare finită folosind YAKINDU Statechart Tools. Acest lucru va demonstra puterea mașinilor de stat și poate fi folosit ca model pentru proiecte ulterioare.

Provizii

Ai nevoie doar de un Arduino, câteva butoane, LED-uri, jumper și rezistențe.

Hardware

  • 2x Buton
  • 2 semafoare sau puteți utiliza LED-uri cu rezistențe de 220 Ohm
  • 2x rezistențe de 10k Ohm
  • Pană de pâine
  • Săritor
  • Arduino Uno / Mega (sau oricare altul, care are cel puțin 8 GPIO)

Software

  • Instrumente YAKINDU Statechart
  • Eclipse C ++ IDE pentru Arduino

Pasul 1: definiți cum funcționează: semafor pentru pietoni

La început, trebuie să specificăm cum ar trebui să funcționeze semaforul pentru pietoni. Am încercat să rezum punctele glonț:

  • Se folosesc două semafoare - unul pentru mașini, celălalt pentru pietoni
  • Semaforul poate fi aprins folosind un buton
  • Pietonii pot solicita traversarea străzii apăsând un buton
  • Semaforul oprit este indicat prin clipirea ambelor LED-uri galbene
  • După aprindere, semaforul așteaptă 10 secunde în modul sigur
  • După modul de siguranță, mașinile au întotdeauna o fază verde până când un pieton începe o cerere
  • Cererea de trecere a pietonilor este indicată de un LED galben alternativ

În plus, există unele evenimente temporale, în funcție de modul în care funcționează un semafor.

Pasul 2: Construiți circuitul

Construiește circuitul
Construiește circuitul

Să începem să configurăm circuitul. În exemplul meu, după cum puteți vedea pe imaginea de previzualizare, am folosit un Arduino Mega 2560, dar orice alt Arduino cu cel puțin opt GPIO ar trebui să fie bine. În plus, am cumpărat câteva semafoare de 5V de la Amazon. Căutați doar semafor Arduino. În caz contrar, puteți utiliza pur și simplu șase LED-uri diferite. Mai mult, aveți nevoie de două butoane și două rezistențe de 10 k Ohm.

Cele trei LED-uri din stânga sunt utilizate pentru traficul auto și cele trei LED-uri din dreapta pentru pietoni, unde cel galben poate indica o solicitare.

Pasul 3: Crearea mașinii de stat

Crearea mașinii de stat
Crearea mașinii de stat

Deci, după cum puteți vedea, există două stări principale cu membri compuși - state on și state off. Puteți comuta între ambele stări utilizând evenimentul onOff, care este conectat la butonul ON / OFF. În starea inițială, starea oprită, ambele LED-uri galbene încep să clipească în fiecare secundă. Odată ce semaforul a fost aprins, acesta începe în Safestate. După 10 secunde va fi gestionat comportamentul tipic al semaforelor. LED-ul roșu și galben va fi aprins în starea StreetPrepare, iar semaforul devine verde după încă 2 secunde. De acum înainte, mașina de stat așteaptă evenimentul pedestrianRequest, care este conectat la al doilea buton. După trimiterea evenimentului, cererea va fi indicată prin comutarea LED-ului galben în fiecare secundă în starea PedWating. 7 secunde mai târziu, semaforul va fi trecut mai întâi în galben și apoi în roșu până când pietonii primesc semnalul pentru a merge în starea PedestrianGreen. După aceasta, PedestrianRed este activat și ciclul se repetă. Acest lucru poate fi întrerupt doar prin oprirea din nou a semaforului.

Pasul 4: Rularea exemplului

Pasul 5: Cod generat C ++

Codul C ++ generat este un caz de comutare clasic pentru a gestiona logica mașinii de stare. Acesta este doar un fragment de cod despre cum arată:

void TrafficLightCtrl:: runCycle () {clearOutEvents (); for (stateConfVectorPosition = 0; stateConfVectorPosition <maxOrthogonalStates; stateConfVectorPosition ++) {switch (stateConfVector [stateConfVectorPosition]) {case main_region_on_r1_StreetGreen: {main_region_on_r1_StreetGreen_rea; pauză; } case main_region_on_r1_PedWaiting_r1_waitOn: {main_region_on_r1_PedWaiting_r1_waitOn_react (adevărat); pauză; } implicit: break; } clearInEvents (); }

Pasul 6: Obțineți exemplul

Întregul exemplu este gata pentru a compila și rula. Vine cu YAKINDU Statechart Tools, care este gratuit pentru utilizare necomercială. După descărcare, puteți importa exemplul direct în instrument:

Fișier -> Nou -> Exemplu -> Exemple de diagrame YAKINDU -> Următor -> Semafor (C ++) pentru Arduino

> AICI puteți descărca YAKINDU Statechart Tools <<

Puteți începe cu o perioadă de încercare de 30 de zile. Ulterior, trebuie să obțineți o licență, care este gratuită pentru utilizare necomercială!

Recomandat: