Arduino cyklonen spelet (5 / 6 steg)
Steg 5: Kodning
I inställningarna för behöver programmerare fastställa syftet med varje används pin. Myservo har en metod för detta medan för alla andra kan du använda pinMode.
Slingan är där åtgärden börjar.
Den viktigaste variabeln i detta program är utan tvekan variabeln lightNum. Varje gång huvudloop upprepar, lightNum har ett annat värde mellan -1 och 5. Detta uppnås genom += uppdraget med dir. Variabel dir tilldelas alltid antingen 1 eller -1 så av += med lightNum värdet av ljus num är antingen genom en eller subtraheras från 1. Dir är 1 medan stigande och -1 medan fallande. Värdet av dir tilldelas i slutet av koden där den kontrollerar, i två om uttalanden, om lightNum är på det är max eller min (och behov till vara vände)
För att bestämma hur lightNum påverkar lysdioderna skrev jag ett enkelt system av om uttalanden. Om lightNum är > = LED sedan det belyses (med ringa digitalWrite(). Jag nog kunde använt en switch-sats, men jag bestämde mig för jag skulle lämna det Återinlärning för en annan dag.
Bestämma om indata för användaren var lite knepigt, men intressant för mig. Kodningen har att beakta möjligheten att en spelare bara kunde hålla knappen ner till win(cheaters). Jag åtgärdas detta av kodning en variabel som kallas "lastLoop" att se knappen inte hade hållits. Om knappen inte hade varit tryckt under sista språng runt sedan "lastLoop" = låg. Annars är det hög. Första gången så därför om lastLoop är låg och buttonState är hög så är alla viktiga tryck och en giltig press att vinna. Om det är giltigt sedan tilldelas en variabel "första" hög.
Avgöra om spelaren är en vinnare gjordes genom en enkel om uttalande. Om detta är en ovanlig press (först == hög) och lightNum önskas (i mitt fall lightNum == 5) då systemet kan börja det är fest.
Jag började genom att servo en centrerad värde. Det blir 1500 jag tror de flesta servon. Max och min värden, tror jag, kan variera. Jag ville bara jag att vicka så i firandet "för" loop jag har det värden växlar mellan 1300 och 1700. Servo styrs med uttrycket myservo.writeMicroseconds().
Också kontrolleras i den för loop är en omväxlande ledde flash (3 och 3) samt en buzz från summern. Skriva till digital stiften är lätt genom att bara ringa digitalWrite (numrera av klämma fast, det önskade värdet av klämma fast)
Jag försenat öglan så att det körs i tid. För att göra spelet lite svårare gjorde jag förseningen på vinnande lightNum värdet kortare än resten.