Indholdsfortegnelse:

State Machine on Arduino - et fodgænger -trafiklys: 6 trin (med billeder)
State Machine on Arduino - et fodgænger -trafiklys: 6 trin (med billeder)

Video: State Machine on Arduino - et fodgænger -trafiklys: 6 trin (med billeder)

Video: State Machine on Arduino - et fodgænger -trafiklys: 6 trin (med billeder)
Video: #BB5 Moving your Arduino to a multi-tasking State Machine - Easy Intro 2024, Juli
Anonim
Statsmaskine på Arduino - et trafiklys for fodgængere
Statsmaskine på Arduino - et trafiklys for fodgængere

Hej! Jeg vil vise dig, hvordan du programmerer et trafiklys til fodgængere til Arduino i C ++ med en endelig maskine ved hjælp af YAKINDU Statechart Tools. Dette vil demonstrere kraften i statsmaskiner og kan bruges som en plan for yderligere projekter.

Forbrugsvarer

Du behøver kun en Arduino, nogle trykknapper, lysdioder, jumper og modstande.

Hardware

  • 2x trykknap
  • 2x trafiklys eller du kan bruge lysdioder med 220 Ohm modstande
  • 2x 10k Ohm modstande
  • Brødbræt
  • Jumper
  • Arduino Uno/Mega (eller enhver anden, der fik mindst 8 GPIO'er)

Software

  • YAKINDU Statechart -værktøjer
  • Eclipse C ++ IDE til Arduino

Trin 1: Definer, hvordan det fungerer: Trafiklys for fodgængere

Først skal vi angive, hvordan trafiklys for fodgængere skal fungere. Jeg har forsøgt at opsummere punkterne:

  • Der bruges to lyskryds - det ene til bilerne, det andet til fodgængerne
  • Trafiklys kan tændes ved hjælp af en knap
  • Fodgænger kan anmode om at krydse gaden ved at trykke på en knap
  • Slukket trafiklys indikeres ved at blinke med begge gule lysdioder
  • Efter tændingen venter trafiklyset i 10 sekunder i sikker tilstand
  • Efter sikker tilstand har biler altid en grøn fase, indtil en fodgænger starter en anmodning
  • Fodgængers anmodning om krydsning er angivet med skiftende gul LED

Derudover er der nogle tidsbegivenheder afhængigt af, hvordan et lyskryds fungerer.

Trin 2: Byg kredsløbet

Byg kredsløbet
Byg kredsløbet

Lad os begynde at oprette kredsløbet. I mit eksempel, som du kan se på forhåndsvisningsbilledet, har jeg brugt en Arduino Mega 2560, men hver anden Arduino med mindst otte GPIO'er burde være i orden. Derudover har jeg købt nogle 5V lyskryds på Amazon. Bare søg efter Traffic Light Arduino. Ellers kan du simpelthen bruge seks forskellige lysdioder. Desuden har du brug for to trykknapper og to 10k Ohm modstande.

De tre venstre lysdioder bruges til biltrafikken og de tre højre lysdioder til fodgængerne, hvor den gule kan angive en anmodning.

Trin 3: Oprettelse af statsmaskinen

Oprettelse af statsmaskinen
Oprettelse af statsmaskinen

Så som du kan se, er der to hovedtilstande med sammensatte medlemmer - tilstand til og fra. Du kan skifte mellem begge tilstande ved at bruge hændelsen onOff, som er forbundet til ON/OFF -knappen. I den oprindelige tilstand, slukket tilstand, begynder begge gule lysdioder at blinke hvert sekund. Når lyskryds er tændt, starter det i Safestate. Efter 10 sekunder håndteres den typiske opførsel af lyskrydsene. Den røde og gule LED tændes i StreetPrepare -tilstanden, og trafiklyset bliver grønt efter 2 sekunder mere. Fra nu af venter statsmaskinen på fodgængerforespørgslen, som er forbundet til den anden knap. Efter afsendelse af begivenheden angives anmodningen ved at skifte den gule LED hvert sekund i PedWating -tilstand. 7 sekunder senere skifter trafiklyset først til gult og derefter til rødt, indtil fodgængerne får signal om at gå i fodgængergrøn tilstand. Herefter aktiveres PedestrianRed, og cyklussen gentages. Dette kan kun afbrydes ved at slukke for lyskryds igen.

Trin 4: Kørsel af eksemplet

Trin 5: Genereret C ++ - kode

Den genererede C ++-kode er en klassisk switch-case til at håndtere logikken i statsmaskinen. Dette er bare et kodestykke af, hvordan det ser ud:

ugyldig TrafficLightCtrl:: runCycle () {clearOutEvents (); for (stateConfVectorPosition = 0; stateConfVectorPosition <maxOrthogonalStates; stateConfVectorPosition ++) {switch (stateConfVector [stateConfVectorPosition]) {case main_region_on_r1_StreetGreen: {main_region_on_r1_StreetGreen_rea (pause; } case main_region_on_r1_PedWaiting_r1_waitOn: {main_region_on_r1_PedWaiting_r1_waitOn_react (sand); pause; } standard: pause; } clearInEvents (); }

Trin 6: Få eksemplet

Hele eksemplet er klar til at kompilere og køre. Den leveres med YAKINDU Statechart Tools, som er gratis til ikke-kommerciel brug. Efter download kan du importere eksemplet direkte i værktøjet:

Fil -> Ny -> Eksempel -> YAKINDU Statechart -eksempler -> Næste -> Trafiklys (C ++) til Arduino

> HER kan du downloade YAKINDU Statechart Tools <<

Du kan starte med en 30 dages prøveperiode. Bagefter skal du få en licens, som er gratis til ikke-kommerciel brug!

Anbefalede: