
Programmering av ett trafiksystem: Fordonsdetektion

Uppgradera för mer innehåll
Vilket meddelande skickas med radio till trafikljuset?
Det här är ett trafikljus. Det lyser rött. Här kommer en buss. Den är försenad. Tänk om bussen kunde komma ikapp sin tidtabell genom att slippa vänta vid rött ljus!
Om bussen kunde tala om för trafiksignalen att den är på väg... Nu ska vi programmera en buss som kan skicka ett meddelande till ett trafikljus. Vi ska använda radiosignaler för kommunikationen. Innan vi börjar programmera behöver vi: En mikrokontroller och tre dioder kopplade till den. Det har vi kopplat ihop i en annan film.
En till mikrokontroller, som representerar bussen. Och ett program till bussen. Vi börjar med bussens pseudokod. Bussen ska skicka en radiosignal till trafikljuset. För att trafikljuset ska kunna ta emot bussens radiosignal behöver de använda samma frekvens, samma radiogrupp.
Vi väljer radiogrupp “ett”. Så pseudokoden till bussens program börjar med: Starta program Sätt radiogrupp till “ett”. Bussen vill få grönt ljus. När bussen skickar meddelande “ett” betyder det “här kommer jag, slå om till grönt”. När ska bussen skicka sin “etta”?
Jo, när den närmar sig trafikljuset. Vi väljer att koppla det här till knappen A på mikrokontrollern. Om knapp A trycks ner, skicka en “etta”. Det är faktiskt allt vi behöver för bussens program. Nu till trafikljusets program.
Trafikljuset lyssnar på samma radiokanal som bussen sänder på. Så trafikljusets pseudokod blir: Starta program. Sätt radiogrupp till “ett”. Trafikljuset ska inte bara lyssna utan också reagera på alla meddelanden från bussen. För att hela tiden lyssna och reagera måste vi ha en kod som körs om och om igen.
Då använder vi en loop med ett villkor som alltid är sant. Den delen av koden ser ut så här: Just nu lyser trafikljuset bara rött hela tiden. När trafikljuset får meddelandet från bussen ska det slå om till grönt. Ge bussen förtur, eller prioritet. Skapa variabeln “prio” som håller koll på om bussen begär prioritet.
När “prio” är “sant” så har bussen prioritet annars är prio “falskt”. Vi lägger till det i pseudokoden: Om trafikljuset tar emot “ett” så sätt “prio” till “sant”. När “prio” är “sant” ska trafikljuset slå om till grönt. Annars ska trafikljuset lysa rött. Vi lägger till ett vilkor: Om “prio” är lika med “falskt” - bara då ska trafikljuset visa rött.
Vi drar in raden som hör ihop med om-raden. Men om “prio” inte är lika med “falskt”? Vi skriver: Annars släck rött ljus och tänd grönt. Vid start av programmet ska trafikljuset lysa rött, “prio” ska vara “falskt”. Ska vi testa vår pseudokod?
Först är “prio” “falskt” och trafikljuset är rött. Nu trycker busschauffören på knappen. "Prio” blir “sant”. Koden hoppar till “annars” och det blir grönt! Men det blir inte rött igen. Hmm...vi bestämmer aldrig hur länge grönt ljus ska lysa och “prio” blir aldrig “falskt” igen.
Vi låter bussen få tre sekunder på sig att köra förbi trafikljuset genom att lägga till tre sekunders paus här. Sen släcker vi grönt ljus och sätter “prio” till “falskt” så att rött ljus lyser igen. Alla de här raderna hör till annars-delen. Vi visar det genom att dra in dem. Vi testar igen. “Prio” är “falskt” och trafikljuset är rött.
Här kommer bussen som är försenad, knapp A trycks ned och “prio” blir “sant”. Programmet hoppar till “annars” och trafikljuset blir grönt. Efter tre sekunder blir “prio” “falskt” och trafikljuset blir rött igen. Även om vi aldrig programmerade gult ljus och det alltid är rött när ingen buss kommer, är det här ändå en bra början. Och den här bussen kommer kanske ikapp sin tidtabell. Bra!