Fara Ring-in knappar med inbyggda regler (5 / 7 steg)

Steg 5: uppladdning

//
Denna skiss genomför en "Jeopardy" stil tävlande svar Utslagsfrågan.
//
Varje tävlande har en tryckknapp switch.
Efter installationen anropas funktionen waitingForQuestion. Här används en
accessnätet, snarare än Arduino slingan, vänta på moderator
till att börja. Medan du väntar, är spelare lamporna tända i chase läge.

När moderator pressar växeln S6 knapp, QUESTION_READING
staten börjar. Det finns ingen tidsgräns här. I detta arrangera gradvis spelaren
Lamporna lyser i chase läge. Under denna tid, om en spelare knappen är
pressad, tillämpas ett straff av 0,25 sekunder för nästa fas. När
moderatorn trycker på knappen Växla S5 och släpper det, den
READY_FOR_ANSWER_LIGHT är påslagen och spelaren lysdioder kommer att upphöra och
spelet går vidare till den WAITING_FOR_RING_IN staten.

I WAITING_FOR_RING_IN är READY_FOR_ANSWER_LIGHT
upplyst. Det finns fem andra timeout som vid dess förfallodag,
orsakar spelet till resetAll att rensa variabler, waitingForQuestion
funktionen anropas och staten ändras till QUESTION_READING. När
en spelare trycker på en knapp, om spelaren inte BLOCKERAS från en tidigare
fel svar och helst dröjsmål införts i de QUESTION_READING fas,
spelarens tänds och READY_FOR_ANSWER_LIGHT är avstängd.
Spelet fortsätter till WAITING_FOR_ANSWER staten.

I WAITING_FOR_ANSWER, efter en fem andra timeout eller
en spelare ger ett felaktigt svar, fortsätter spelet till
WAITING_FOR_RING_IN, om det finns spelare surrade ännu inte i. Om en
spelaren ger rätt svar eller alla spelare har försökt besvara,
resetAll rensar variabler, funktionen waitingForQuestion anropas
och staten ändras till QUESTION_READING.
//

Obs: Detta program är inställd att hantera upp till fyra spelare. Om det finns färre
spelare, det kommer att hantera dem, även om när dessa spelare har ringt in och
felaktigt besvarade, programmet kommer tiden ut, i stället för att omedelbart
som erkänner att det finns ingen kvarvarande spelarna. För de traditionella tre
Player purister eller de som inte kan vänta de extra fem sekunderna, MAX_PLAYERS
kan ändras till tre och program recompilied och laddas upp. Det kommer sedan
känner bara igen en spelare genom tre.

2012.12.18 första utgåvan.

/*
* Miljö definitioner
*/
#define MAX_PLAYERS 4
#define TIMEOUT_PERIOD 5000
#define DELAY_TIME 250
#define NO_ANSWER 0
#define CORRECT_ANSWER 1
#define WRONG_ANSWER -1

/*
* Hårdvara definitioner
*/
#define TOP_LED 13
#define TOP_SWITCH 9
CORRECT_ANSWER_BUTTON är växla S6
#define CORRECT_ANSWER_BUTTON 3
WRONG_ANSWER_BUTTON är växla S5
#define WRONG_ANSWER_BUTTON 4
#define READY_FOR_ANSWER_LIGHT 5

/*
* Städning definitioner
*/
int buzzedInPlayer = -1;
int buzzedInPlayerCount = 0;
osignerade långa timeout = 0;
int blockedPlayers = 0;
int moderator;

char ESC_CHAR = 27.
#define PUT_CURSOR_MIDSCREEN\
Serial.Print (ESC_CHAR); \
Serial.Print ("[2J") \
fördröjning (2). \
Serial.Print (ESC_CHAR); \
Serial.Print("[10;1H");

/*
* Knapp tryck definitioner
*/
#define NOT_PUSHED hög
#define sköt låg
#define blockerade -1

/*
* LED stat definitioner
*/
#define LED_ON hög
#define LED_OFF låg

/*
* Spelet stater
*/
#define QUESTION_READING 1
#define WAITING_FOR_RING_IN 2
#define WAITING_FOR_ANSWER 3
int fas = QUESTION_READING;
#define DEBOUNCE_TIME 10

struct player_t {
int ljus;
int buttonPin;
int knappen;
osignerade timePenalty;
} ;// Avsluta struct playerStruct_t

struct player_t spelare [MAX_PLAYERS];

Återställ spelaren tid.
void resetPlayerTime()
{
int i;

för (jag = 0; jag < MAX_PLAYERS; i ++)
{
spelare [i] .timePenalty = 0;
};
} / / End resetAll

Återställas till det ursprungliga tillståndet.
void resetAll()
{
int i;
moderator = NO_ANSWER;

fas = QUESTION_READING;

för (jag = 0; jag < MAX_PLAYERS; i ++)
{
digitalWrite (spelare [i] .light, LED_OFF);
spelare [i] .button = NOT_PUSHED;
resetPlayerTime();
};
buzzedInPlayer = -1;
buzzedInPlayerCount = 0;
} / / End resetAll

int readModerator()
{
Knappen utgåvan är den utlösande faktorn för en knapp har tryckts.
Debounce används för att känna den knapp utgåvan.
om (digitalRead(CORRECT_ANSWER_BUTTON) == PUSHED) {
for(;;) {
Delay(DEBOUNCE_TIME);
om (digitalRead(CORRECT_ANSWER_BUTTON) == NOT_PUSHED) {
bryta;
}
}
återvända CORRECT_ANSWER;
} else om (digitalRead(WRONG_ANSWER_BUTTON) == PUSHED) {
for(;;) {
Delay(DEBOUNCE_TIME);
om (digitalRead(WRONG_ANSWER_BUTTON) == NOT_PUSHED) {
bryta;
}
}
återvända WRONG_ANSWER;
} annat {
återvända NO_ANSWER;
}
}

void readPlayers()
{
Av alla spelare knappar sparas i arrayen spelare.
int i;
för (jag = 0; jag < MAX_PLAYERS; i ++)
{
om (spelare [i] .button! = blockerat) {
om (digitalRead(player[i].buttonPin) == PUSHED) {
spelare [i] .button = PUSHED;
} annat {
spelare [i] .button = NOT_PUSHED;
}
}
}
}

void waitingForQuestion()
{
int i;

digitalWrite (READY_FOR_ANSWER_LIGHT, LED_OFF);
Serial.println (\tModerator, tryck på S6 och börja läsa");
Serial.println ("\tModerator, tryck på S5 när du har frågan");
medan (! () readModerator() == CORRECT_ANSWER)) {
för (jag = 0; jag < MAX_PLAYERS; i ++) {
digitalWrite (spelare [i] .light, LED_ON);
Delay(250);
digitalWrite (spelare [i] .light, LED_OFF);
}
}
PUT_CURSOR_MIDSCREEN
Serial.println ("\tPlayers, vänta på frågan att avsluta");
}
void setup()
{
int i;
för (jag = 0; jag < MAX_PLAYERS; i ++) {

Tilldela lysdioderna, katoder ansluten till marken
spelare [i] .light = TOP_LED - i.
pinMode (spelare [i] .light, produktionen);

Tilldela de tryckknapp växlarna; Anslut ingången till marken när stängt.
spelare [i] .buttonPin = TOP_SWITCH - i.
pinMode (spelare [i] .buttonPin, ingång);
digitalWrite (spelare [i] .buttonPin, hög); Aktivera pullup

}

pinMode (READY_FOR_ANSWER_LIGHT, OUTPUT);

pinMode (WRONG_ANSWER_BUTTON, indata);
digitalWrite (WRONG_ANSWER_BUTTON, hög); Aktivera pullup

pinMode (CORRECT_ANSWER_BUTTON, indata);
digitalWrite (CORRECT_ANSWER_BUTTON, hög); Aktivera pullup

resetAll();

Serial.BEGIN(9600); Ställ in följetong bibliotek på 9600 bps

PUT_CURSOR_MIDSCREEN
waitingForQuestion();
}

void loop()
{
int i;

Växla (fas) {
fall QUESTION_READING: {
Moderatorn har tryckte på reset-knappen
eller den ifrågasatt har varit answeredd
eller alla spelare har svarade felaktigt.
Någon tidpunkt för denna fas.
Någon Buzz-ins kommer att drabbas av 0,25 sekunders fördröjning när nästa läge in.
readPlayers();
Tillämpa straffet för ivriga knappen pressningsanläggningar
för (jag = 0; jag < MAX_PLAYERS; i ++) {
om ((spelare [i] .button == PUSHED) & &
(spelare [i] .timePenalty == 0)) {
spelare [i] .timePenalty = DELAY_TIME;
Serial.Print ("\tPlayer");
Serial.Print(i+1);
Serial.println ("får en straff");
}
}
moderator = readModerator();
om (moderator == WRONG_ANSWER) {
fas = WAITING_FOR_RING_IN;
timeout = millis() + TIMEOUT_PERIOD;
digitalWrite (READY_FOR_ANSWER_LIGHT, LED_ON);
för (jag = 0; jag < MAX_PLAYERS; i ++) {
spelare [i] .timePenalty += millis();
}
PUT_CURSOR_MIDSCREEN
Serial.println ("\tWaiting för ringen i");
Serial.println();
blockedPlayers = 0;
}
bryta;
} / / End fall QUESTION_READING

fall WAITING_FOR_RING_IN: {
Moderator har tryckte på någon knapp i QUESTION_READING tillstånd.
Fem sekunder för denna fas.
om (blockedPlayers > = MAX_PLAYERS) {
PUT_CURSOR_MIDSCREEN
Serial.println ("\tAll spelare har ringt i");
Serial.println ("\tModerator, vänligen Läs nästa fråga");
fas = QUESTION_READING;
resetAll();
waitingForQuestion();
bryta;
} annat {
buzzedInPlayer = -1;
om (timeout > = millis()) {
readPlayers();
för (jag = 0; jag < MAX_PLAYERS; i ++) {
om ((spelare [i] .timePenalty < = millis()) & &
spelare [i] .button == PUSHED) {
buzzedInPlayer = i.
buzzedInPlayerCount + = 1;
digitalWrite (spelare [buzzedInPlayer] .light, LED_ON);
digitalWrite (READY_FOR_ANSWER_LIGHT, LED_OFF);
fas = WAITING_FOR_ANSWER;
timeout = millis() + TIMEOUT_PERIOD;
spelare [i] .button = blockerat;
blockedPlayers + = 1;
PUT_CURSOR_MIDSCREEN
Serial.Print ("\tPlayer nummer");
Serial.println(i+1);
}
}
} annat {
Serial.println ("\tTimed ut väntar en RING_IN");
Serial.println ("\tModerator, vänligen Läs nästa fråga");
fas = QUESTION_READING;
resetAll();
waitingForQuestion();
bryta;
}
bryta;
} / / End annars
} / / End fall WAITING_FOR_RING_IN

fall WAITING_FOR_ANSWER: {
En spelare har DRIVIT knappen i WAITING_FOR_RING_IN tillstånd.
Fem sekunder för denna fas.
om (timeout < millis()) {
om (buzzedInPlayerCount < = MAX_PLAYERS) {
PUT_CURSOR_MIDSCREEN
Serial.println("\tWAITING_FOR_RING_IN");
timeout = millis() + TIMEOUT_PERIOD;
digitalWrite (spelare [buzzedInPlayer] .light, LED_OFF);
digitalWrite (READY_FOR_ANSWER_LIGHT, LED_ON);
fas = WAITING_FOR_RING_IN;
PUT_CURSOR_MIDSCREEN
Serial.Print ("\tPlayer nummer");
Serial.Print(buzzedInPlayer+1);
Serial.println ("timeout väntar på ett svar");
}
}
moderator = readModerator();
om (moderator == CORRECT_ANSWER) {
digitalWrite (spelare [buzzedInPlayer] .light, LED_OFF);
PUT_CURSOR_MIDSCREEN
Serial.Print ("\tPlayer nummer");
Serial.Print(buzzedInPlayer+1);
Serial.println (", som är korrekt");
Serial.println ("\tModerator, vänligen Läs nästa fråga");
fas = QUESTION_READING;
resetAll();
waitingForQuestion();
} annat
om (moderator == WRONG_ANSWER) {
fas = WAITING_FOR_RING_IN;
timeout = millis() + TIMEOUT_PERIOD;
digitalWrite (spelare [buzzedInPlayer] .light, LED_OFF);
digitalWrite (READY_FOR_ANSWER_LIGHT, LED_ON);
Serial.println ("\tOooo, tyvärr, det är fel");
Serial.println ("\tWaiting för ringen i");
resetPlayerTime();
}
bryta;
} / / End fall WAITING_FOR_ANSWER

standard: {
Serial.Print ("standard: fas =");
Serial.println(Phase);
}

} / / End växeln (fas)
}

Se Steg
Relaterade Ämnen

Skrivbord med inbyggd PC

detta är ett skrivbord som jag byggt från grunden med inbyggd i pc. Skrivbordet används som en server, en 8 kanal dvr, den har också två visar visar live nyc trafikerar kameror i vår utsändning kontor (i bilder). Jag använder det också som en vardagl...

Hur man gör Jack Sparrow's Coat knappar med harts.

Material som används:Trä och trä pluggen bitarLEGO tegelstenarSuper sculpeyEpoxiharts,vaselinSilikongummiKoppartråd (2mm),Gips i Paris,Författare guld storlek,Brons pulverAkrylfärgerTunna trådar (för hängande knappar)Naturlig svamp (liten bit)Konstnä...

Massa baserat Computing: Papper med inbyggda lysdioder

The MIT media lab har experimenterat med massa baserade computing (Gör papper med inbyggd elektronik):http://Vimeo.com/4272607Integrera elektronik i material såsom papper tar upp intressanta frågor om vad datorer i framtiden kommer att se ut.Denna ha...

Ring görs med aluminium

Detta är en stor bra snygg ring från hem begagnade aluminiumfolieSteg 1: Samla materialta aluminiumfolieett par saxdubbelhäftande tejpelastiska bandSteg 2: att göraskär en bit från aluminiumfolie och krossa denVik elastisk band att bilda ringgå med d...

Fastställande av mobiltelefon knappar med SUGRU.

Fastställande trasiga mobiltelefon knappar med sugru, på SUGRU bygga natt på Kairo Hackerspace....

Formade knappar med bearbetning

jag försöka göra ett kiosk-system med en pekskärm. Programmet språket jag valde är bearbetning av Java.Knapparna på skärmen bör inte bara rektangulära, de bör utformas.Om du någonsin försökt att göra formade knappar med alla programmeringsspråk, vet...

"SOUNDESK" ett skrivbord med inbyggd subwoofer, förstärkare och högtalare

Hej finns mitt namn KirilJag är en grafisk formgivare och jag lik till har en trevlig arbetsplats. Problemet var att jag inte hade ett skrivbord för alla min hårdvara, så jag hade en idé och...Steg 1: Köpa en gammal skrivbordJag köpte en gammal skriv...

DIY förlängning sladd med inbyggd Switch - säker, snabb och enkel

denna prydliga lilla enhet löser tre problem som jag oftast stött på när experimentera eller gör arbete runt huset eller ute på gården:1) oavsett hur lång din förlängningssladd är, är det alltid tre fot för kort. Mitt projekt lägger sex fötter till n...

Cigarrlåda elgitarr med inbyggd i förstärkaren

Jag var trött på att bära omkring på tunga gitarrer och förstärkare när jag gick på semester eller camping och behövde något att spela medan jag var borta. Det är därför jag gjorde detta. Detta är en lätt, bärbar, Strata-stil gitarr som jag tar med m...

Soffbord med inbyggd pekskärm

nyligen bestämde jag mig att jag ville bygga en mediacenter PC. Jag ville ha något som skulle vara lätt att använda och ser fantastisk i mitt vardagsrum. Efter att ha sett en liknande design någon annanstans beslutat jag att jag skulle prova min hand...

DIY Aeroponics 6-plantera badkar med inbyggd reservoar

Med denna aeroponics badkar kan jag växa 6 grönkål eller Mangold växter i ett riktigt litet utrymme utan att behöva vattna dem dagligen. Det tar ingen jord heller. Jag bara fylla botten badkaret (reservoaren inbyggda) med ca 5 gallon vatten och lämpl...

Rengöring gamla tegelstenar med 'Gustavs hammare'

jag bor i det europeiska låglandet - en liten sedimentära platt landremsa start i norra Frankrike och glider norr över norra Belgien aka Flandern, Nederländerna och Danmark.Marken är bördig, här, och som tillhandahåller vatten (för att göra öl), mat...

Jacka med inbyggd ansiktsmask

jag ska visa dig hur man bygger en jacka med en inbyggd ansikte mask så du behöver inte oroa dig bär en scarf om vädret blir kall.Steg 1: Vad du behöver Huvjacka för att förstoraTyg för din ansiktsmaskSaxKnapparNål och trådPinsTyg måttbandSteg 2: Gör...

Router Dado jigg med inbyggda klämmor

Detta är min version av en router dado jigg. Medan den delar mycket likhet med andra dado jiggar, jag tror min ändringar av de allmänna konstruktion gör det enklare och snabbare att använda än de flesta andra. Delvis beror detta på att jiggen inte kr...

Förbättra matlagning Potential med inbyggda ugnar

Rummet i alla kök är ofta en premie, så ofta finns det inte mycket utrymme för apparater. På grund av detta tvingas underdimensionerade ugnar ofta in i små områden i köket, vilket gör det svårt att gå bekvämt genom köket eller laga mat. För att undvi...

Murare burk te kopp med inbyggd te bollen

Jag bläddrade bara tävling sidan här på Instructables och märkt "Murare burk utmaning". Jag hade velat göra min fru en tekopp med en inbyggd brantare ett tag nu, och eftersom julen var bara runt hörnet, jag tänkte att nu skulle vara en perfekt t...

Bygga en marsvin bur med enkel rengöring! (Projekt med barn)

Mina barn har deras tre marsvin delas mellan sina två sovrum och två burar. De behövde ett större område och att sätta ihop dem är meningsfullt eftersom de är mycket sociala djur. Men detta projekt var mer om möjlighet att spendera tid med min son oc...

Lätt restaurera och rengöring stål med magic fiber klubbor

ville testa dessa fiber klubbor som jag hittade på nätet för rengöring annonseras som "magiska pinnar" för en lång tid. Så jag använde en stor par trädgård saxar hittade jag som kunde använda en del arbete för att testa.Steg 1: Hitta ett objekt...

Filt med inbyggda Hood

två år sedan gjorde jag en gigantisk flagga att Visa mitt stöd för Wests tigrar med hjälp av polar fleece material (kolla in flaggan används i bild 2). Min flickvän älskar absolut flaggan, inte på grund av sin kärlek till de mäktiga tigrarna men efte...