Interaktiva LED öl Pong tabell (57 / 87 steg)
Steg 57: Programvara: hur bollen bricka koden fungerar
Obs:
När bollen blåses ur avsluta hålet, ser IR-sensorn bollen förbi men det kommer inte se bollen när det svävar över toppen av avsluta hålet. För att få bollen bricka att fungera ordentligt, satt vi fläkten fläkten att köra för tre sekunder efter exit IR-sensorn ser bollen passera det, detta sätt spelaren har tillräckligt med tid att greppa ping pong bollen innan fläkten stängs av och det faller tillbaka ner i röret. Om spelaren inte ta det, bollen brickan identifierar det falla tillbaka ner i röret och spränga den tillbaka. Det kommer att göra för en viss tid innan den tiden ute och sätter en fel flagga.
Det finns egentligen bara två situationer där det kommer att gå fel. Den första situationen är om en boll sätts i inträde hål men det kommer aldrig ut ur röret att resa utmatningssensor och avsluta funktionen. I det här fallet skulle boll brickan bara hålla igång tills någon trippade exit sensorn manuellt eller vände bort tabellen. Den andra situationen händer när ping pong boll har kommit ut från exit hål och resa sensorn men spelaren inte greppa bollen så bollen brickan stängs av och bollen faller tillbaka ner i röret. Om en annan boll sätts in i det samma boll bricka det kan jam upp så nu blir det två bollar i var röret istället för en som är vad den avsedd för. I alla dessa fall, vill vi inte spelare att fortsätta att försöka använda bollen brickan och göra situationen värre, vi vill istället göra oduglig bricka bollen tills problemet har åtgärdats.
Vi kommer att programmera tabellen så att om en boll fastnar i rör eller om en boll faller tillbaka ner i röret, bollen brickan helt inaktiveras tills problemet har lösts och spelaren "återställer" bollen brickan. Om en spelare försöker sätta en boll i bollen brickan när den är inaktiverad, bollen bricka LED ringen kommer att blinka på och av fem gånger som anger att bollen bricka har fastnat. Jag har bifogat fyra flödesscheman som förklarar varje beslut och process som mikrokontroller utför för att hantera dessa fel. Här är en kort genomgång:
Situationen #1
En boll tappas i posten hålet på bollen bricka #2 men det fastnar i rör och inte avsluta bollen brickan. Ball brickan timeout och stänger men spelaren försöker sätta en annan boll i bollen brickan. Den punkt där spelaren sätter andra bollen i är deonoted av **.
Ball_Washers_Detect (UINT8 upptäckt)
1) kontrollera för att se till att BW2_JAM inte in från tidigare bollen. Det rensas, så fortsätt till nästa steg.
2) ange BW_ACTIVE = 1 så att någon funktion som använder bollen brickan LED ringar för animationer inte kommer att använda dem.
3) vända på posten LED ringen och bollen bricka vattenpumpen.
4) tillåter två sekunder att passera så att pumpen har tillräckligt med tid att skjuta bollen till den andra änden av röret.
5) stänga av bollen bricka pumpen och slå på fläkten fläkten i normal hastighet.
6) kontrollera att se om bollen har passerat utmatningssensor ännu.
7) det har inte, låt två sekunder passera och hålla övervakning sensorn för att se om det passerar.
8) det loopar fem gånger (ca 10 sekunder) men gånger ut som bollen inte kom ur det avsluta hålet.
9) ange BW2_JAM = 1 så att om en annan boll upptäcks på posten hålet av bollen brickan programmet vet att det har fastnat.
** Spelaren sätter i andra ping pong bollen i fastnat bollen brickan.
10) Ball_Washers_Detect(detection) upptäcker andra bollen och börjar fungera igen.
11) det första som kontrollerar den om det är om BW2_JAM är inställd och det är.
12) ange den globala variabeln "error_code" till BW2_JAM_ERROR_CODE.
13) ange DIAGNOSE_ERROR = 1 (The Timer3 avbrott rutin tar hand om resten nu när DIAGNOSE_ERROR är inställd).
Timer3()
11) Timer3 avbryter och kontrollerar om DIAGNOSE_ERROR == 1.
12) det finns ett fel, anropa funktionen Display_Error(error_code) och omfattar den globala variabeln som innehåller felkoden.
Display_Error(Error)
13) Kontrollera felkoden för att se vilken typ av fel måste visas.
14) det är en BW2_JAM_ERROR_CODE, anropa funktionen Ball_Washer_Jam_Error(error) att informera spelaren av felet.
Ball_Washer_Jam_Error(Error)
15) är bollen bricka #2 in- och utresa sensorer både blockerat? (Detta är hur en användare "återställer" bollen brickan).
16) de är inte båda blockerat, ge BW_ACTIVE 1 så inga andra animeringar använder bollen brickan LED ringar.
17) blinka in- och utresa ringar av bollen bricka #2 på och av fem gånger, detta informerar spelaren att det finns en sylt.
18) klart DIAGNOSE_ERROR för 0 och avmarkera BW_ACTIVE till 0.
Nu när du har en idé om hur bollen bricka koden är formaterad, har jag postat en video nedan för situationen #2 där bollen är aldrig tog från avsluta hålet. Fläkt fläkthastigheten reduceras innan den stängs av så att om bollen inte har varit grep det kommer falla tillbaka ner i röret och trip exit sensorn igen. Fläkt fläkt kommer sedan vara rusade upp till dess normal hastighet och blås bollen tillbaka ur bollen brickan, det kommer att upprepa detta upp till tre gånger och om bollen inte har varit tog tag av tredje gången det kommer att stänga av och sätta en boll bricka sylt fel flagga.
Du kan justera hastigheterna som motor för din boll brickor i huvudfilen miscellaneous.h under definierade konstanterna BWx_PUMP_SPEED och BWx_FAN_SPEED ("x" är bollen bricka #1 eller #2).