Innehållsförteckning:

State Machine on Arduino - ett fotgängartrafikljus: 6 steg (med bilder)
State Machine on Arduino - ett fotgängartrafikljus: 6 steg (med bilder)

Video: State Machine on Arduino - ett fotgängartrafikljus: 6 steg (med bilder)

Video: State Machine on Arduino - ett fotgängartrafikljus: 6 steg (med bilder)
Video: Reguleringsteknikk-3AU 2024, Juli
Anonim
State Machine on Arduino - ett fotgängartrafikljus
State Machine on Arduino - ett fotgängartrafikljus

Hej! Jag ska visa dig hur du programmerar ett trafikljus för Arduino i C ++ med en slutlig tillståndsmaskin med hjälp av YAKINDU Statechart Tools. Detta kommer att visa kraften hos statliga maskiner och kan användas som en plan för ytterligare projekt.

Tillbehör

Du behöver bara en Arduino, några tryckknappar, lysdioder, bygel och motstånd.

Hårdvara

  • 2x tryckknapp
  • 2x trafikljus eller så kan du använda lysdioder med 220 Ohm motstånd
  • 2x 10k Ohm motstånd
  • Bakbord
  • Hoppare
  • Arduino Uno/Mega (eller någon annan, som fick minst 8 GPIO)

programvara

  • YAKINDU Statechart -verktyg
  • Eclipse C ++ IDE för Arduino

Steg 1: Definiera hur det fungerar: Trafikljus för fotgängare

Till en början måste vi ange hur trafikljuset för fotgängare ska fungera. Jag har försökt sammanfatta punkterna:

  • Två trafikljus används - ett för bilarna, det andra för fotgängarna
  • Trafikljus kan tändas med en knapp
  • Fotgängare kan begära att korsa gatan genom att trycka på en knapp
  • Släckt trafikljus indikeras genom att båda gula lysdioderna blinkar
  • Efter att ha tänt väntar trafikljuset i 10 sekunder i säkert läge
  • Efter säkert läge har bilar alltid en grön fas tills en fotgängare startar en begäran
  • Fotgängares begäran om korsning indikeras av växlande gul lysdiod

Dessutom finns det vissa tidshändelser beroende på hur ett trafikljus fungerar.

Steg 2: Bygg kretsen

Bygg kretsen
Bygg kretsen

Låt oss börja konfigurera kretsen. I mitt exempel, som du kan se på förhandsgranskningsbilden, har jag använt en Arduino Mega 2560, men varannan Arduino med minst åtta GPIO borde vara bra. Dessutom har jag köpt några 5V -trafikljus på Amazon. Sök bara efter Traffic Light Arduino. Annars kan du helt enkelt använda sex olika lysdioder. Dessutom behöver du två tryckknappar och två 10k Ohm motstånd.

De tre vänstra lysdioderna används för biltrafiken och de tre högra lysdioderna för fotgängarna, där den gula kan indikera en begäran.

Steg 3: Skapa State Machine

Skapa statsmaskinen
Skapa statsmaskinen

Så som du kan se finns det två huvudstater med sammansatta medlemmar - state on och state off. Du kan växla mellan båda tillstånden genom att använda händelsen onOff, som är ansluten till ON/OFF -knappen. I utgångsläget, avstängt, börjar båda gula lysdioderna blinka varje sekund. När trafikljuset har tänts startar det i Safestate. Efter 10 sekunder hanteras trafikljusets normala beteende. Den röda och gula lysdioden tänds i StreetPrepare -tillståndet och trafikljuset blir grönt efter 2 sekunder till. Från och med nu väntar statsmaskinen på fotgängarförfrågan, som är ansluten till den andra knappen. Efter att ha skickat händelsen kommer förfrågan att indikeras genom att växla den gula lysdioden varannan sekund i PedWating -tillståndet. 7 sekunder senare byts trafikljuset till gult först och sedan till rött tills fotgängarna får signalen att gå i fotgängargrönt tillstånd. Efter detta aktiveras PedestrianRed och cykeln upprepas. Detta kan bara avbrytas genom att släcka trafikljuset igen.

Steg 4: Kör exemplet

Steg 5: Genererad C ++ - kod

Den genererade C ++-koden är ett klassiskt switch-case för att hantera tillståndsmaskinen. Detta är bara ett kodavsnitt av hur det ser ut:

void TrafficLightCtrl:: runCycle () {clearOutEvents (); för (stateConfVectorPosition = 0; stateConfVectorPosition <maxOrthogonalStates; stateConfVectorPosition ++) {switch (stateConfVector [stateConfVectorPosition]) {case main_region_on_r1_StreetGreen: {main_region_on_r1_StreetGreen_rea (ha sönder; } case main_region_on_r1_PedWaiting_r1_waitOn: {main_region_on_r1_PedWaiting_r1_waitOn_react (true); ha sönder; } standard: paus; } clearInEvents (); }

Steg 6: Få exemplet

Hela exemplet är redo att kompilera och köra. Den levereras med YAKINDU Statechart Tools, som är gratis för icke-kommersiellt bruk. Efter nedladdning kan du importera exemplet direkt i verktyget:

Arkiv -> Ny -> Exempel -> YAKINDU Statechart Exempel -> Nästa -> Trafikljus (C ++) för Arduino

> HÄR kan du ladda ner YAKINDU Statechart Tools <<

Du kan börja med en 30 dagars provperiod. Efteråt måste du få en licens, som är gratis för icke-kommersiellt bruk!

Rekommenderad: