Quiz Game Controller med hjälp av "Ljus och ljud Buzzers" och Arduino (4 / 5 steg)

Steg 4: Arduino Program



Översikt

Om du inte är bekant med programmering Arduino, ta lite tid innan du fortsätter att lära sig grunderna i programmering Arduino. Arduino Uno har en praktisk USB-port som ger en anslutning till datorn och även driver på Arduino från USB-ström. Du måste veta hur man ska programmera Arduino och ladda ner program till det så att du kan ladda ner programmet med dessa instruktioner till Arduino. Eller... du kan även skapa dina egna varianter. Det är en av de stora aspekterna av detta projekt, möjligheterna är obegränsade!

Arduino-webbplats (http://arduino.cc/) har nedladdningsbara programmeringsmiljöer och många resurser för att snabbt få dig igång på programmering Arduino.

OK, nu när du är bekant med Arduino Uno och kan ladda ett progam till det, går vi över driften av V1.1 av programmet levereras med dessa instruktioner.
Grundläggande drift

Det beteende vi vill uppnå från rutan kontroll är följande:

Efter slås på, väntar knapparna vara intryckt.
Den första knappen är "vinnare" och ljus och ljud på den knappen aktiveras. Sedan på knappen stänger av sig själv efter cirka 2 sekunder, styrenheten kommer att vänta på 2,5 sekunder och kommer att aktivera sedan lamporna bara på knappen, men inte ljudet. Detta håller synlig knappen som trycktes först, men håller inte buller upp en nivå, som skulle bli irriterande.
Andra knappar kan pressas efter den första knappen (detta är vad som normalt händer) och den ordning i vilken knapparna trycks upptäcks av registeransvarige.
Lysdioderna på rutan kontroll är belyst som följer, visar den ordning som trycktes på knapparna:
1: a plats - lysdioden är på fast
2: a plats - lysdioden blinkar snabbt
3: e plats - LED om blinkar långsamt
4: e plats - lysdioden är avstängd
Att trycka på reset-knappen kommer att stänga av alla lampor på rutan kontroll och sluta köra "Aktivera" linjen till vinnande knappen. Detta kommer att orsaka alla knapparna för att vara tyst och ha sina lampor efter knappen vinnande har slutfört den sista 2.5s cykel.
Om reset-knappen inte är intryckt, att 60 sekunder efter på "vinnare"-knappen trycks, systemet automatiskt återställa sig själv. Naturligtvis kan du justera 60 andra timeout-värde i koden till något annat om du vill ha.
Vi sätter ett "påskägg" i koden som något kul för folk att försöka hitta. Vi kommer att lämna det till dig att hitta det, och att ändra programmet för någon av dina egna "påskägg" som du kanske tänker på.

Teorin om Operation

Vi kommer att gå över några av de viktiga metoder och tekniker i programmet.
Polling vs. dröjsmål

Många av de Arduino exempel program kommer att använda delay(n); uttalande att uppnå blinkande lysdioder. Med tanke på att vi vill inte bara fånga vad knappen trycktes 1: a, men också knapparna efter detta, kommer den "delay" inte fungera för oss. Undra om den 1: a knappen trycktes och vi var i en slinga att köra LED med en 500 ms (1/2 sekund) fördröjning. 1/2 sekund är en lång tid och det kan ha funnits två eller ens tre knappar trycker "fördröjning" och vi skulle har inget sätt att veta om det! Flera saker kan hända, när vi läser knapparna, trycker på alla tre, eller kanske en trycks eftersom andra knappen trycktes och släpptes redan! Detta skulle göra spelarna mycket missnöjd med vårt spel.

Så, vi kan inte använda funktionen "delay". I stället kommer vi program "Ogiltig loop()" logiken i en "röstningen" metod. I grund och botten kontrollerar detta innebär att vi kommer att försöka miniminze eventuella förseningar i vår kod och hålla looping om och om igen status för knapparna. Vi kommer också att se om det är dags för oss att ändra status på en LED eller buttton. En timing av pooling slingan i V1.1 vi mätt Genomsnittlig tid tillbringa i öglan för att handla om 0.1ms eller 100 mikrosekunder. Som verkar vara en ganska snabb loop och minimerar risken för flera knapptryckningar sker inom en enda slinga.

Men om slingan bara kontroll för att se om en LED måste vara slås av eller på, vad säger oss vad vi ska göra om någon viss loop?
LED automat och profilerna

För att hantera de knappar och lysdioder skapar vi en "State sekvens Array." Inom arrayen definiera vi en profil. Ett exempel på en profil är "Blink ljuset snabbt", eller "Slå på ljuset." För varje profil finns en sekvens av staterna (eller steg). Till exempel i matrisen int LED_SEQ [] definiera vi en profil för blinkande lampor snabbt. Profilen består av följande statliga definitioner:

HÖG, 250, 1, / * profil 2 (2: a plats) börjar, steg 0 - "Blinka snabbt" * /
LÅG, 250, 0, / * profil 2, steg 1 * /
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0, / * profil 2 slutet, steg 7 * /

Så en profil består av statliga definitioner som har 3 värden. Det första värdet är en av tre val, hög, låg eller -1.

HÖG - när du går in i detta tillstånd, köra utdata (till LED eller knappen) till hög.
LÅG - när man går in i detta tillstånd, drive utdata till låg.
-1 - när du går in i detta tillstånd, inte gör någon förändring till utgången.

Det andra värdet är längden av tid (i millisekunder) som detta tillstånd bör vara i kraft innan du flyttar till nästa tillstånd. Så säger profil 2 i koden fragmentet ovan, att upprätthålla staten 1 för 250ms (eller 1/4 sekund) och att även behålla 2 för 250ms.

Det tredje värdet är "nästa steg" eller staten. I profil 2 steg 0 är nästa steg steg 1. Nästa steg efter steg 1 är steg 0. Så kan du se att denna sekvens av stater eller steg är i en loop. steg 0 till steg 1 om du vill stega 0 och så vidare.

Definiera en "State sekvens Array" låter oss enkelt ändra beteendet för knappar och ljus genom att bara ändra "program" i matrisen scenen sekvens snarare än ändra C kod. Till exempel experimenterade vi med ljus beter sig på detta sätt:

Första plats - blinka en gång och vänta 1 sekund.
Andra plats - blinkar två gånger och vänta 1 sekund.
Tredje plats - blinkar tre gånger och vänta 1 sekund.
Fjärde plats - blinkar fyra gånger och vänta 1 sekund.

I denna testmetod med ett fåtal personer de gillade en "på fast," "blinka snabbt," "blinka långsamt" och "off" som indikeringen av 1 till 4 rum respektive.

Observera att vi gjort dessa ändringar i ljus beteende genom att endast ändra profilerna i LED_SEQ [] matris och vi inte behövde ändra C-programmet alls!

Så nu att vi får se hur staten (eller steg) definieras, hur vill vi hålla reda på vilket skick de olika färgade lysdioderna är?
LED-sekvens staten

Programmet håller koll på där varje färg LED är i matrisen"staten sekvens" (int LED_SEQ [] matris med tre variabler:

Första "profil index" - Detta är ett index i LED_SEQ [] för profil (eller uppsättning steg) som körs. Indexet börjar med noll.
Andra "steg index" - Detta är ett index för steget inom profilen. Indexet börjar med noll.
Tredje och sista, det långt heltalet som håller tiden som steget startades. Detta är värdet på gång ett steg var stirrade från builin funtion millis().

Dessa värden hålls i matrisen lLSS [] för varje färg. Så finns det 12 poster. För var och en av de fyra färgerna finns 3 sekvens tillståndsvariabler ovan. Med fyra färger och tre poster för varje färg, 4 x 3 = 12.

Så för varje "polling loop" i vår kod gör LED stat maskin bearbetning loopen följande:

För varje färg (noll till 3)
Letar upp den aktuella profilen.
Slår upp det aktuella steget
Ser upp det aktuella steget starttid.
Lägger till steget varaktigheten i starttiden steg. Om den aktuella tiden är mindre än den "steg längd + steg starttid", sedan inte gör något. Om den aktuella tiden är större än "steg längd + steg starttid", leta upp nästa steg nummer. Sedan utför åtgärden i nästa steg och update "nuvarande steg", "nuvarande profil" och "steg starttid" index.

LED-sekvensering

Så med detta program teknik, kan vi ändra LED staterna på komplicerade sätt och fortfarande se för knapp tryck på händelser i tid. Dessutom är det lätt att ändra hur Lysdioderna beter utan att ändra logiken i C-kod. Vi måste bara ändra profiler och steg i matrisen LED-SEQ [].

Detta är i själva verket hur vi programmerade vårt "Påsk ägg" beteende. Kan du hitta det? Vill du sätta i ditt eget "Påsk ägg" beteende. Gå vidare och göra det! Jobbet är inte klart förrän "Påsk ägg" är klar!
Knappen automat och profilerna

Processen för att manipulera den knapp beteendet är exakt densamma som för lysdioder ovan. Variabeln knappen stat"som innehåller"Profiler"och"steg"eller"ordnar"är int BTN_SEQ [] matris.

På samma sätt, den nuvarande profle och steg för varje färg bibehålls i matrisen lång lBSS [].

Diskussionen för lysdioderna sedan gäller knapparna med substitution av ovanstående knapp variabler.
Övergripande programflöde

De olika variablerna deklareras och variabelnamn för Arduino I/O Stifttilldelningar deklareras. Se appendix, koden eller schematiskt för Arduino stiften används.

Polling slingan består då av de allmänna instruktionerna nedan:

När på knappen presss och registrera ordern.
Hantera knapp sekvens staten för varje färg-knappen.
Hantera LED sekvens staten för varje färg LED
När på återställningsknappen (och sedan återställa knappen/LED sekvens statliga matrisen till profil 0, eller "off")
Kontrollera om eventuella särskilda Reset knappen villkor (dvs hölls för > TEST_MODE millisekunder, gå sedan in i en profil för "ljus" testläge.

Särskilda fall hanteringen av knapparna för att självständigt hantera både ljus och ljud med endast en signal linje beskrivs mer i detalj i avsnittet om ändringar av knappen.

Se tillägget för komplett program listan.
Extensions

Har vi missat något som du tror skulle vara riktigt snyggt? Till exempel kunde kanske det vara ett "Wheel of Fortune" spelläge, där en färg är också valts ut slumpmässigt och gett en förutbestämd mängd tid att svara.

Eller uppfinna egna nya spelläget.

Det är skönheten i en mikrokontroller implemting logik. Helt enkelt skapa dina egna program och göra det beter sig precis som du vill att.

Låt din fantasi vilda, och glad Arduino programmering!

Programmet källan kan hämtas på www.projectnotions.com.

Se Steg
Relaterade Ämnen

Arduino MIDI-controller med en ZX avstånd och gest Sensor

Välkommen till detta instructable om hur man bygger en mycket grundläggande MIDI-Controller med SparkFun ZX avståndet och gest Sensor. Detta instructable är del av en skoluppgift.Obs: Detta är ingen kodning handledning. Den final koden kommer att ing...

Scanner ljus och Arduino som en RGB-lampa

Hej människor!Denna gång jag ska visa dig hur man styr ljuset från en gamla/trasiga scanner/skrivare. Kanske ser du, jag gillar att få många saker från skräp och använda i mina projekt.Någon gång sedan jag vann en gammal skrivare från en lärare. Gene...

Hacka en Video Game Controller med en Arduino för bättre tillgång (eller fusk)

Alla älskar TV-spel. Men det kan vara svårt att njuta av vissa spel om du är skadade eller handikappade och inte har den manuell skicklighet krävs för att utföra snabb knapp combos. Lyckligtvis kan vi använda en Arduino för att skicka signaler till c...

Taktila tangentbord / game controller med Arduino och bearbetning

detta instructable beskriver ett snabbt och enkelt sätt att skapa ett taktilt tangentbord eller spelenhet med hjälp-kartong,-aluminiumfolie,- och en Arduino.Det ger också Arduino och bearbetning koder för att omedelbart börja spela!Perfekt för snabba...

Ljus intensitet uträkning med hjälp av BH1715 och Arduino Nano

Igår arbetade vi på LCD-skärmen visar, och samtidigt arbetar över dem vi insåg vikten av ljusintensiteten uträkning. Ljusintensiteten är inte bara viktigt i fysisk domän i denna värld men det har dess bra sagt roll i biologiska domän också. Korrekt u...

Auotmatic Street lights kontroll med hjälp av LDR och Arduino

Gatan lätta reglerteknik används för att styra de ljus (aktivera och inaktivera baserat på ljus).Här gör vi användning av LDR (Light beroende motstånd) och LED (Light Emitting diode) och arduino.Hårda Ware komponenter som krävs:1) LDR2) LED3) 4.7 k m...

DIY varm dryck Monitor - med hjälp av DS18B20 och Arduino Nano

Min flickvän har alltid ett problem att hon bränner sin tunga när hon smakar varma drycker. Då började jag tänka, kanske jag kunde skapa en enhet som förhindrar hennes brinnande tungan, så hon kan dricka sitt te och det har alltid perfekt och ville t...

Röd färg erkännande baserade Arduino kontroll (med hjälp av MATLAB och Arduino)

I denna tutorial, vi visar hur du använder färg erkännande för att styra någon manöverdonet anslutet till någon digital pin av arduino uno, vi har behandlat LED som ett ställdon i denna handledning som är ansluten till stift 13 av UNO. Vi har dragit...

FM-Radio med Si4703 Breakout styrelsen, LCD och Arduino

Detta projekt är bara en liten del av ett större projekt jag arbetat med under de senaste åren (på och utanför). Bakgrunden till detta projekt är att ett par år tillbaka, jag hittade en modern jukebox (iPod-anslutning, AM / FM-radio, CD-spelare...) s...

Säkerhetssystem med hjälp av Sigfox och Arduino

Idag, tillåter hemautomation oss att göra bra saker. I denna tutorial ska vi skapa våra egna säkerhetssystem. Målet är att skapa ett objekt som är oberoende av din wifi och kunna arbeta länge som drivs av ett batteri för att skydda ditt hem, ett gara...

Luftfuktighet mätning med hjälp av HYT939 och Arduino Nano

HYT939 är en digital Fuktsensor som fungerar på I2C kommunikationsprotokoll. Luftfuktigheten är en avgörande parameter när det gäller medicinska system och laboratorier, så för att uppnå dessa mål som vi försökte gränssnitt HYT939 med arduino nano. I...

Magnetfält mätning med hjälp av HMC5883 och Arduino Nano

HMC5883är en digital kompass avsedd för låg-field magnetisk avkänning. Enheten har en bred magnetfält rad +/-8 Oe och en output ränta på 160 Hz. HMC5883 sensorn ingår automatisk avmagnetiseringsfunktionen rem drivrutiner, offset avbokning och en 12-b...

Acceleration mätning med hjälp av BMA250 och Arduino Nano

BMA250 är en liten, tunn, ultralow makt, 3-axlig accelerometer med hög upplösning (13-bitars) mätning vid upp till ±16 g. Digital utgång data är formaterade som 16-bitars tvåor kompletterar och kan nås via I2C digitala gränssnitt. Itmeasures den stat...

Temperatur och luftfuktighet övervakning med hjälp av SHT25 och Arduino Nano

Vi har nyligen arbetat med olika projekt som krävs för temperatur och luftfuktighet övervakning och sedan insåg vi att dessa två parametrar faktiskt spela en nyckelroll i att ha en uppskattning av den arbetande effektiviteten i ett system. Både på de...

Temperaturövervakning med hjälp av MCP9808 och Arduino Nano

MCP9808 är en mycket noggrann digital temperatur sensor ±0, 5 ° C I2C mini modul. De förkroppsligas med user - programmerbar register som underlättar temperaturkännande program. MCP9808 hög noggrannhet temperaturgivare har blivit en industristandard...

Tryck mätning med hjälp av CPS120 och Arduino Nano

CPS120 är en hög kvalitet och låg kostnad kapacitiv Absolut trycksensor med full ersättning utdata. Det förbrukar mycket mindre energi och består av en ultra liten mikro-elektro-mekanisk Sensor(MEMS) för mätning. En sigma-delta baserat ADC är också i...

Temperaturmätning med hjälp av STS21 och Arduino Nano

STS21 Digital temperaturgivare erbjuder överlägsen prestanda och en utrymmesbesparande fotavtryck. Det ger kalibrerad, linearized signalerar i digitalt, I2C format. Tillverkning av denna sensor är baserad på CMOSens teknik, som tillskrivar till den ö...

Anpassade Crazy Taxi Video Game Controller med Makey Makey

Vad sjutton är en Makey Makey?Har du någonsin velat ändra hur kontrollerna fungerar på en viss datorprogram eller spel? Någonsin velat skapa en rolig elektronisk uppfinning utan att behöva vara en ingenjör eller programmerare? Någonsin vill ha galet...

Bluetooth Game controller med Accelerometer och Arduino

Alla älskar att spela spel på PC :) Spelkonsoler ta dem till nästa nivå och vad är mer kul än att göra en själv? Här har vi byggt en spelkonsol med Accelerometer, Arduino och Bluetooth. Accelerometern i spelkonsolen översätter dina rörelser in i spel...