Innholdsfortegnelse:

State Machine on Arduino - et fotgjengerlys: 6 trinn (med bilder)
State Machine on Arduino - et fotgjengerlys: 6 trinn (med bilder)

Video: State Machine on Arduino - et fotgjengerlys: 6 trinn (med bilder)

Video: State Machine on Arduino - et fotgjengerlys: 6 trinn (med bilder)
Video: #BB5 Moving your Arduino to a multi-tasking State Machine - Easy Intro 2024, November
Anonim
State Machine on Arduino - et trafikklys for fotgjenger
State Machine on Arduino - et trafikklys for fotgjenger

Hei! Jeg skal vise deg hvordan du programmerer et trafikklys for fotgjenger for Arduino i C ++ med en endelig datamaskin ved å bruke YAKINDU Statechart Tools. Dette vil demonstrere kraften til statlige maskiner og kan brukes som en plan for videre prosjekter.

Rekvisita

Du trenger bare en Arduino, noen trykknapper, lysdioder, jumper og motstander.

Maskinvare

  • 2x trykknapp
  • 2x trafikklys eller du kan bruke lysdioder med 220 Ohm motstander
  • 2x 10k Ohm motstander
  • Brødbrett
  • Genser
  • Arduino Uno/Mega (eller andre som har minst 8 GPIOer)

Programvare

  • YAKINDU Statechart Tools
  • Eclipse C ++ IDE for Arduino

Trinn 1: Definer hvordan det fungerer: Trafikklys for fotgjenger

Først må vi spesifisere hvordan fotgjengerlyset skal fungere. Jeg har prøvd å oppsummere punktene:

  • To trafikklys brukes - ett for bilene, det andre for fotgjengere
  • Trafikklys kan slås på med en knapp
  • Fotgjengere kan be om å krysse gaten ved å trykke på en knapp
  • Slått av trafikklys indikeres ved å blinke begge gule lysdiodene
  • Etter å ha slått på, venter trafikklyset i 10 sekunder i sikker modus
  • Etter sikker modus har biler alltid en grønn fase til en fotgjenger starter en forespørsel
  • Fotgjengerforespørsel om kryssing er indikert med vekslende gul LED

I tillegg er det noen tidshendelser avhengig av måten et trafikklys fungerer på.

Trinn 2: Bygg kretsen

Bygg kretsen
Bygg kretsen

La oss begynne å sette opp kretsen. I eksempelet mitt, som du kan se på forhåndsvisningsbildet, har jeg brukt en Arduino Mega 2560, men annenhver Arduino med minst åtte GPIO bør være bra. I tillegg har jeg kjøpt noen 5V trafikklys på Amazon. Bare søk etter Traffic Light Arduino. Ellers kan du ganske enkelt bruke seks forskjellige lysdioder. Videre trenger du to trykknapper og to 10k Ohm motstander.

De tre venstre lysdiodene brukes for biltrafikk og de tre høyre lysdiodene for fotgjengere, der den gule kan indikere en forespørsel.

Trinn 3: Opprette State Machine

Opprette statsmaskinen
Opprette statsmaskinen

Så, som du kan se, er det to hovedstater med sammensatte medlemmer - tilstand på og av. Du kan bytte mellom begge tilstandene ved å bruke hendelsen onOff, som er koblet til PÅ/AV -knappen. I utgangstilstanden, av -tilstanden, begynner begge gule lysdiodene å blinke hvert sekund. Når trafikklyset er slått på, starter det i Safestate. Etter 10 sekunder vil den typiske oppførselen til trafikklysene bli håndtert. Den røde og gule LED -lampen slås på i StreetPrepare -tilstanden, og trafikklyset blir grønt etter 2 sekunder til. Fra nå av venter statsmaskinen på fotgjengerforespørselen, som er koblet til den andre knappen. Etter at hendelsen er sendt, vil forespørselen bli indikert ved å veksle den gule LED -en hvert sekund i PedWating -tilstanden. 7 sekunder senere byttes trafikklyset til gult først og deretter til rødt til fotgjengere får signalet om å gå i fotgjengergrønn tilstand. Etter dette aktiveres PedestrianRed og syklusen gjentas. Dette kan bare avbrytes ved å slå av trafikklyset igjen.

Trinn 4: Kjøre eksemplet

Trinn 5: Generert C ++ - kode

Den genererte C ++-koden er en klassisk switch-case for å håndtere logikken til tilstandsmaskinen. Dette er bare en kodebit av hvordan det ser ut:

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; gå i stykker; } case main_region_on_r1_PedWaiting_r1_waitOn: {main_region_on_r1_PedWaiting_r1_waitOn_react (true); gå i stykker; } standard: pause; } clearInEvents (); }

Trinn 6: Få eksemplet

Hele eksemplet er klart til å kompilere og kjøre. Den leveres med YAKINDU Statechart Tools, som er gratis for ikke-kommersiell bruk. Etter nedlasting kan du importere eksemplet direkte i verktøyet:

Fil -> Ny -> Eksempel -> YAKINDU Statechart -eksempler -> Neste -> Trafikklys (C ++) for Arduino

> HER kan du laste ned YAKINDU Statechart Tools <<

Du kan starte med en 30 dagers prøveperiode. Etterpå må du få en lisens, som er gratis for ikke-kommersiell bruk!

Anbefalt: