Quiz Game Controller met behulp van de "Lichten en geluiden zoemers" en Arduino (4 / 5 stap)

Stap 4: Arduino programma


Overzicht

Als u niet bekend bent met het programmeren van de Arduino, even duren alvorens over te gaan om te leren van de basisprincipes van het programmeren van de Arduino. De Arduino Uno heeft een handige USB-poort biedt een verbinding met de computer en ook de bevoegdheden op de Arduino van USB macht. U moet weten hoe te programmeren van de Arduino en programma's downloaden naar het zodat kunt u het downloaden van het programma met deze instructies in de Arduino. Of... u kunt ook uw eigen varianten maken. Het is een van de grote aspecten van dit project, dat de mogelijkheden zijn onbegrensd!

De Arduino website (http://arduino.cc/) heeft downloadbare programmeeromgevingen en vele middelen om snel je op snelheid over het programmeren van de Arduino.

OK, nu dat u vertrouwd bent met de Arduino Uno en een progam ernaar kunt laden, gaan we over de werking van V1.1 van het programma voorzien van deze instructies.
Basisbediening

Het gedrag dat we willen bereiken vanuit de control box is als volgt:

Na wordt ingeschakeld, de knoppen zijn te wachten om te worden ingedrukt.
De eerste knop ingedrukt is de "winnaar" en de lichten en geluiden op die knop geactiveerd. Aangezien de knop zichzelf na ongeveer 2 seconden schakelt, de controller zal wachten op 2,5 seconden en vervolgens de lampjes alleen op de knop, maar niet het geluid zal opvijzelen. Dit houdt de knop die werd ingedrukt eerst, maar houdt het lawaai niet niveau omhoog, die vervelend worden zou zichtbaar.
Andere knoppen ingedrukt kan worden na de eerste knop (dit is wat er normaal gebeurt) en de volgorde waarin de knoppen worden ingedrukt wordt gedetecteerd door de controller.
De LED's op de control box zijn verlicht als volgt weergegeven: de volgorde waarin de knoppen werden ingedrukt:
1e plaats - de LED brandt solid
2e plaats - de LED knippert snel
3e plaats - de LED als knippert langzaam
4e plaats - de LED is uitgeschakeld
Indrukken van de resetknop zal uitschakelen alle LEDs op de control box, en stoppen met de "Activeer" lijn rijden naar de winnende knop. Hierdoor worden alle knoppen worden stil en hebben hun lichten uit nadat de laatste 2.5s van de winnende knop cyclus.
Als de reset-knop niet ingedrukt is, wordt 60 seconden nadat de "winnaar" knop is ingedrukt, het systeem automatisch gereset zelf. Natuurlijk kunt u 60 tweede waarde voor de time-out in de code naar iets anders aanpassen, indien u wenst.
We hebben een "Easter Egg" in de code als iets leuks voor mensen om te proberen te vinden. Wij zullen laat het aan u om het te vinden en het programma voor om het even welk van uw eigen "Easter Eggs" wijzigen die u zou kunnen bedenken.

Bediening

We gaan over enkele van de belangrijkste benaderingen en technieken in het programma.
Polling vs. vertraging

Veel van de Arduino voorbeeld programma's zal gebruik maken van de delay(n); verklaring tot knipperende LED's. Gezien het feit dat we willen niet alleen vastleggen welke knop is ingedrukt 1ste, maar ook de knoppen na dit, zal de "vertraging"-aanpak niet werken voor ons. Vraag me af of de 1e knop werd ingedrukt en we in een lus waren te rijden van de LED met een vertraging van 500 ms (1/2 seconde). 1/2 seconde is een lange tijd en misschien zijn er twee of zelfs drie knoppen ingedrukt gedurende de tijd dat "vertraging" en zouden we geen manier hebben om te weten over het! Verschillende dingen zouden kunnen gebeuren, als we de knoppen lezen, alle drie worden ingedrukt, of misschien een wordt gedrukt omdat de andere knop werd ingedrukt en al losgelaten! Dit zou de spelers erg ongelukkig met onze spel maken.

Dus, we de "vertraging"-functie niet gebruiken. In plaats daarvan zullen we de logica van de "ongeldig loop" in een "stembureaus" methode program. Dit betekent dat we zullen proberen te miniminze eventuele vertragingen in onze code en houden een lus over en weer controle in feite de status van de knoppen. We zullen ook zien als het is tijd voor ons om te veranderen van de status van een LED of knop. In een timing van de bundeling lus in V1.1 we gemeten dat de gemiddelde tijd doorbrengen in de lus over 0.1ms of 100 microseconden. Dat lijkt te zijn een vrij snel lus, en minimaliseert de kans op meerdere knooppersen gebeurt binnen een enkele lus.

Maar als de lus is gewoon om te zien als een LED worden uitgeschakeld moet of op de controle, wat vertelt ons wat we geacht worden te doen op elke gegeven lus?
LED statusmachine en profielen

Voor het beheren van de knoppen en de LED's maken we een "staat reeks Array." Binnen de matrix definiëren we een profiel. Een voorbeeld van een profiel is "Knipperen de lampjes snel", of "Turn op het licht." Er is een opeenvolging van Staten (of stap) voor elk profiel. Bijvoorbeeld in de int LED_SEQ [] matrix definiëren we een profiel voor het snel knipperen van de lichten. Dat profiel bestaat uit de volgende definities van de staat:

HOOG, 250, 1 / * profiel 2 (2e plaats) beginnen, stap 0 - "Knipperen snel" * /
LAGE, 250, 0, / * profiel 2, stap 1 * /
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0,
0, 0, 0, / * profiel 2 einde, stap 7 * /

Dus een profiel bestaat uit de definities van de staat die 3 waarden hebben. De eerste waarde is één van de drie keuzes, HIGH, LOW of -1.

HOOG - wanneer gaan op deze situatie, rijden de uitvoer (naar de knop of LED) op hoog.
LOW - wanneer gaan in deze staat, station de uitgang op laag.
-1 - wanneer gaan op deze situatie, niet merk ieder wisseling naar de uitvoer.

De tweede waarde is de lengte van tijd (in milliseconden) dat die staat van kracht worden moet voordat hij naar het volgende frame. Profiel 2 in het bovenstaande codefragment aldus te handhaven staat 1 voor 250ms (of 1/4 seconde) en te onderhouden ook staat 2 voor 250ms.

De derde waarde is de "next step" of staat. In profiel 2 stap 0 is de volgende stap stap 1. De volgende stap na stap 1 is stap 0. Dus, u ziet dat deze opeenvolging van Staten of stappen in een lus. stap 0 tot stap 1 om 0, enzovoort.

Definitie van een "staat reeks Array" laat ons gemakkelijk het gedrag van de knoppen en de lichten veranderen door gewoon veranderen van het "programma" in de fase reeks Array in plaats van C-code te wijzigen. Bijvoorbeeld experimenteerden we met de lichten zich gedraagt op deze manier:

Eerste plaats - knipperen één keer en wacht 1 seconde.
Tweede plaats - twee keer knipperen en wacht 1 seconde.
Derde plaats - drie keer knipperen en wacht 1 seconde.
Vierde plaats - vier keer knipperen en wacht 1 seconde.

In deze testmethode met een paar mensen die ze graag een "op solide," "knipperen snel," "langzaam knipperen" en "off" als de indicatie van de 1e tot 4e plaats respectievelijk.

Let op dat wij die wijzigingen in het licht gedrag aangebracht door alleen het wijzigen van de profielen in LED_SEQ [] matrix en we hoefde niet te veranderen van de C-programma helemaal!

Dus nu dat we zien hoe de staat (of stappen) zijn gedefinieerd, hoe we bijhouden van welke staat de verschillende gekleurde LED's in?
LED reeks staat

Het programma houdt spoor van waar elke kleur LED is in de "staat reeks matrix" (int LED_SEQ [] matrix met drie variabelen:

Eerste de "profiel index" - Dit is een index in LED_SEQ [] voor het profiel (of reeks stappen) wordt uitgevoerd. De index begint bij nul.
Tweede de "stap index" - Dit is een index van de stap binnen het profiel. De index begint bij nul.
Derde en laatste, het lange gehele getal dat geldt het tijdstip waarop de stap werd gestart. Deze waarde is ingesteld op het moment dat een stap was staarde uit de millis() van de builin functie neer.

Deze waarden worden gehouden in de array [] lLSS voor elke kleur. Er zijn dus 12 posten. Voor elk van de vier kleuren zijn er de 3 staat reeks variabelen hierboven. Met vier kleuren en drie vermeldingen voor elke kleur, 4 x 3 = 12.

Dus voor elke "polling lus" in onze code doet de LED staat machine verwerking lus het volgende:

Voor elke kleur (0 tot 3)
Het huidige profiel opgezocht.
De huidige stap opgezocht
De huidige stap zoekt de begintijd.
Voegt de stap tijdsduur aan de begintijd van de stap. Als de huidige tijd kleiner is dan de "stap duur + begintijd van de stap", vervolgens niet alles doen. Als de huidige tijd groter is dan de "stap duur + begintijd van de stap", vervolgens de volgende stap nummer opzoeken. Voer de actie voor de volgende stap, en update de "huidige stap", "huidige profiel" en "stap begintijd" indexen.

LED Sequencing

Dus, met de techniek van dit programma, wij kunnen de LED Staten wijzigt op een ingewikkelde manier en nog steeds kijken voor knop pers evenementen in een tijdige wijze. Daarnaast is het gemakkelijk om te veranderen van het gedrag van de LEDS zonder te wijzigen van de logica van de C-code. We hebben net de profielen en de stappen in de matrix LED-SEQ [] te wijzigen.

In feite, dit is hoe we ons gedrag "Easter Egg" geprogrammeerd. Vind je het? Wilt u plaatsen in uw eigen gedrag "Easter Egg". Ga je gang en doe het! De baan is niet afgewerkt tot de "Easter Egg" wordt gedaan!
Knop statusmachine en profielen

Het proces voor het manipuleren van het gedrag van de knop is precies hetzelfde als beschreven voor de bovenstaande LEDs. De knop staat variabele"met het"profielen"en de"stappen"of de"reeksen"is de int BTN_SEQ [] array.

Gelijkenis, de huidige profle en de stap voor elke kleur wordt onderhouden in de lange lBSS [] matrix.

De discussie voor de LEDs dan geldt voor de knoppen met de vervanging van de bovenstaande knop variabelen.
Algemene programmeerstroom

De verschillende variabelen worden gedeclareerd, en de namen van de variabelen voor de Arduino i/o-pin-toewijzingen worden gedeclareerd. Zie het aanhangsel, de code of het schema voor de pinnen van de Arduino gebruikt.

De polling-lus wordt vervolgens bestaat uit de volgende algemene stappen:

Controleren op de knop presss en opnemen van de bestelling.
De knop volgorde staat voor elke kleurenknop beheren.
Beheren van de LED reeks staat voor elke kleur LED
Controleer of de Reset-knop (en opnieuw de knop/LED reeks staat array aan profiel 0, of "off")
Controleren voor eventuele speciale voorwaarden voor knop Beginwaarden (d.w.z. gehouden voor > TEST_MODE milliseconden, ga dan naar een profiel voor "Lights Test" modus.

De speciale behandeling van een aanvraag van de knoppen voor het zelfstandig beheren van zowel licht en geluid met slechts één signaal lijn is meer gedetailleerd beschreven in de sectie op de knop wijzigingen.

Zie de bijlage voor de complete programma-aanbieding.
Extensies

Hebben we missen iets waarvan u denkt dat zou echt gaaf? Bijvoorbeeld, kan misschien er een "Wheel of Fortune" game mode ook, waar een kleur is willekeurig gekozen en gegeven een vooraf bepaalde hoeveelheid tijd te beantwoorden.

Of uw eigen nieuwe spelwijze uitvinden.

Dat is de schoonheid van een microcontroller implemting de logica. Gewoon uw eigen programma samenstellen en maken het zich gedragen precies de manier waarop u dat wilt.

Laat uw verbeelding in werking gestelde wild, en gelukkig de programmering van de Arduino!

De bron van het programma kan worden gedownload op www.projectnotions.com.

Gerelateerde Artikelen

CPU Fan controller met behulp van PIC

CPU Fan controller met behulp van PIC

CPU Fan controller met behulp van PIC 16F877A4 pin CPU fancontroller met behulp van PIC16F877A micro-controller.25 khz PWM Generator, RPM Meter, Button schakelaar snelheid aanpassenlink: http://www.edaboard.com/thread295376.html#post1263236
D.D.Tap - interactieve Game Platform met behulp van verwerking, Arduino en Twitter

D.D.Tap - interactieve Game Platform met behulp van verwerking, Arduino en Twitter

De D.D.Tap is een spel dat kan worden gespeeld met behulp van sensoren die zijn aangesloten op de Arduino en het aan het spel geproduceerd met verwerking interface. Het is een eenvoudige dans dans revolutie als spel dat punt accumuleert wanneer de sp
Met behulp van 433 MHz Remote Controlled schakelaars op Arduino

Met behulp van 433 MHz Remote Controlled schakelaars op Arduino

Ik denk dat iedereen weet die extern gecontroleerde schakelaars die in hun meest eenvoudige vorm komen in een aantal (meestal 3) voor switcheable apparaten aansluiten op het lichtnet stopcontact en die ontvangt een stekker van een lamp of iets en dat
Setup van externe stuurprogramma op Smoothieware Sbase 1.2 Controller met behulp van E1 pinnen!

Setup van externe stuurprogramma op Smoothieware Sbase 1.2 Controller met behulp van E1 pinnen!

Inhoud van dit Instructable:ProloqueHeatsink stuurprogrammaproblemenTer ziele Y bestuurderSetup Smoothieware E1 gebruiken als onze Y-asY stuurprogramma - origineelY bestuurder - met behulp van E01Volledige stuurprogramma pin-out diagramSetup van exte
Arduino zelf evenwicht Controller met behulp van digitale IMU, eindelijk!

Arduino zelf evenwicht Controller met behulp van digitale IMU, eindelijk!

Wat is het?DIY Segway/balans controller met moderne digitale IMU sensor.Software voor een Arduino waarmee het standpunt om gegevens te lezen van een van de nieuwere digitale accelerometer/gyroscoop eenheden, processen, de gegevens met behulp van Kalm
Bouwen van een Bluespec LED controller met behulp van Connectal Build

Bouwen van een Bluespec LED controller met behulp van Connectal Build

Deze tutorial wordt uitgelegd hoe u de dienst van het publiek Connectal te bouwen om te bouwen en simuleren van een toepassing met hardware en software componenten die zijn geschreven in BSV en C++ met behulp van het Connectal-kader.Wij gaan ervan ui
Gekoppelde LED-Servo-controller met behulp van Arduino

Gekoppelde LED-Servo-controller met behulp van Arduino

Hallo iedereen, dit is mijn eerste DIY-project met behulp van de Arduino en een intrede in de Gemeenschap van de maker. Sinds ik keek naar de TED video door Massimo Banzi, ik zat te wachten voor deze dag te publiceren mijn Arduino project. Dit is een
Motie gecontroleerde RGB Led pak met behulp van Xbox 360 Kinect, Max MSP en Arduino deel 1

Motie gecontroleerde RGB Led pak met behulp van Xbox 360 Kinect, Max MSP en Arduino deel 1

Ik wilde voor de afgelopen paar maanden die ik aan een project kinect gewerkt heb gemaakt van een led outfit dat gereageerd op de bewegingen van de drager. Ik heb tot nu toe alleen de armen gedaan, en er zijn enkele problemen die moeten worden uitgew
Mod Xbox 360 Controller met behulp van Arduino (MW3)

Mod Xbox 360 Controller met behulp van Arduino (MW3)

ik wilde kopen een modded controller chip om twee redenen een ze alleen het één ding doen en twee ze uit datum snel waardoor ze nutteloos voor nieuwe spellen. Dus de arduino die ik net pakte leek perfect, is het programmeerbare zin dat als er een upd
Bluetooth Nintendo NES-controller met behulp van Wiimote!

Bluetooth Nintendo NES-controller met behulp van Wiimote!

Bereid om de retro-games spelen op mijn PC of Mac wilde ik gebruiken van de klassieke NES-pad!Ik weet Wiimote werkt goed met beide dus waarom opnieuw het wiel uitvinden.Het probleem is hoe een "grote" wiimote passen in een klassieke NES-controll
Eenvoudige LiDAR met behulp van de laser-afstandsmeter Uni-T UT390b, Arduino en Turbo Pascal

Eenvoudige LiDAR met behulp van de laser-afstandsmeter Uni-T UT390b, Arduino en Turbo Pascal

Hallo!Enkele dagen geleden ik een laser-afstandsmeter (Uni-T UT390b, vb. kochthttp://www.dx.com/de/p/uni-t-ut390b-45m-laser-dist...) te realiseren een eenvoudige LiDAR. De meetzoeker heeft een precisie van +/-2mm en vermag maatregel afstanden tot 45m
Met behulp van de WASP Motor Controller (ESC)

Met behulp van de WASP Motor Controller (ESC)

In dit Instructable zullen we moeten leren om controle van een WASP motor controller met behulp van een Arduino.De WASP motor controller is een Electronic Speed Controller (ESC), nemen een RC ingangssignaal van een Arduino en het stimuleren van het t
RC zender voor USB-Gamepad met behulp van Arduino

RC zender voor USB-Gamepad met behulp van Arduino

Waarom moet ik dit doen?Als het gaat om vliegen RC vliegtuigen die gebruikmaakt van een simulator kunnen zijn een geweldige manier om je vaardigheden tijdens het laagseizoen of zelfs voor te bereiden voor uw eerste vlucht. Het grote nadeel aan het ge
Maken van gegevens Loger kamer voorwaarden Record met behulp van Arduino

Maken van gegevens Loger kamer voorwaarden Record met behulp van Arduino

Een Data loger room scheppen om te registreren van de toestand van de temperatuur, relatieve vochtigheid, en luchtdruk in de kamer wordt relatief eenvoudig. voor wie niet wat het eigenlijk weet is Arduino een programmeerbare micro controller met behu