Danger-bague en boutons avec règles intégrées (5 / 7 étapes)

Étape 5: Télécharger

//
Cette esquisse implémente un tie-break de réponse « Jeopardy » style candidat à l’investiture.
//
Chaque participant dispose d’un commutateur de bouton poussoir.
Après l’installation, la fonction waitingForQuestion est appelée. Cet exemple utilise un
boucle locale, plutôt que la boucle de l’Arduino, à attendre que le modérateur
pour commencer. En attendant, les lumières de joueur sont allumées en mode chase.

Quand l’animateur appuie sur l’interrupteur bouton S6, la QUESTION_READING
État commence. Il n’y a aucune limite de temps ici. Dans cette phase le joueur
LED s’allume en mode chase. Pendant ce temps, si une joueur touche est
pressé, une pénalité de 0,25 secondes est appliquée pour la phase suivante. Quand
l’animatrice appuie sur le bouton interrupteur S5 et le libère, le
READY_FOR_ANSWER_LIGHT est activée, le lecteur LED s’éteint et
le jeu va procéder à l’État WAITING_FOR_RING_IN.

Dans WAITING_FOR_RING_IN, la READY_FOR_ANSWER_LIGHT est
enluminés. Il y a un délai d’attente du deuxième cinq qui, à son expiration,
provoque le jeu à resetAll pour effacer des variables, la waitingForQuestion
fonction est appelée et le passage à QUESTION_READING. Quand
un joueur appuie sur un bouton, si le joueur n’est pas bloqué par un avant
mauvaise réponse et aucun délai imposé dans la phase QUESTION_READING,
s’allume de ce joueur et READY_FOR_ANSWER_LIGHT est désactivé.
Le jeu passe à l’État WAITING_FOR_ANSWER.

En WAITING_FOR_ANSWER, après un délai de cinq deuxième ou
un joueur qui donne une mauvaise réponse, le jeu passe à
WAITING_FOR_RING_IN, si il y a des joueurs non encore bourdonnaient dans. Si un
joueur donne une réponse correcte ou tous les joueurs ont tenté de répondre,
resetAll efface variables, la fonction waitingForQuestion est appelée
et l’État devient QUESTION_READING.
//

Remarque : Ce programme est mis en place pour gérer jusqu'à quatre joueurs. S’il y en a moins
les joueurs, il se chargera d’eux, bien que quand les joueurs ont sonné et
ont mal répondu, le programme n’expire, au lieu d’immédiatement
reconnaissant qu’il n’y a pas de joueurs restants. Pour les trois traditionnels
les puristes de joueur ou ceux qui ne peuvent pas attendre les cinq secondes supplémentaires, MAX_PLAYERS
peut être remplacé par trois et le programme recompilied et téléchargées. Il sera ensuite
reconnaîtra que les joueurs un à trois.

2012.12.18 version initiale.

/*
* Définitions de l’environnement
*/
#define MAX_PLAYERS 4
#define TIMEOUT_PERIOD 5000
#define DELAY_TIME 250
#define NO_ANSWER 0
#define CORRECT_ANSWER 1
#define WRONG_ANSWER -1

/*
* Définitions hardware
*/
#define TOP_LED 13
#define TOP_SWITCH 9
Le CORRECT_ANSWER_BUTTON est commutateur S6
#define CORRECT_ANSWER_BUTTON 3
Le WRONG_ANSWER_BUTTON est passer S5
#define WRONG_ANSWER_BUTTON 4
#define READY_FOR_ANSWER_LIGHT 5

/*
* Définitions de ménage
*/
int buzzedInPlayer = -1 ;
int buzzedInPlayerCount = 0 ;
unsigned long timeout = 0 ;
int blockedPlayers = 0 ;
Modérateur int ;

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

/*
* Définitions de presse bouton
*/
#define NOT_PUSHED haute
#define poussé bas
#define bloqué -1

/*
* Définitions d’état LED
*/
#define LED_ON haute
#define LED_OFF faible

/*
* Jeu États
*/
#define QUESTION_READING 1
#define WAITING_FOR_RING_IN 2
#define WAITING_FOR_ANSWER 3
phase d’int = QUESTION_READING ;
#define DEBOUNCE_TIME 10

struct player_t {}
int lumière ;
int buttonPin ;
bouton int ;
timePenalty non signé ;
} End;// struct playerStruct_t

struct player_t joueur [MAX_PLAYERS] ;

Réinitialiser le temps de joueur.
Sub resetPlayerTime()
{
int i ;

pour (i = 0; i < MAX_PLAYERS; i ++)
{
lecteur [i] .timePenalty = 0 ;
};
} / / Fin resetAll

Rétablir l’état initial.
Sub resetAll()
{
int i ;
Modérateur = NO_ANSWER ;

phase = QUESTION_READING ;

pour (i = 0; i < MAX_PLAYERS; i ++)
{
digitalWrite (joueur [i] .light, LED_OFF) ;
touche lecteur [i] = NOT_PUSHED ;
resetPlayerTime() ;
};
buzzedInPlayer = -1 ;
buzzedInPlayerCount = 0 ;
} / / Fin resetAll

int readModerator()
{
Bouton est le déclencheur d’un bouton après avoir été poussé.
Debounce est utilisé pour détecter la version de bouton.
Si (digitalRead(CORRECT_ANSWER_BUTTON) == PUSHED) {}
for(;;) {
Delay(DEBOUNCE_TIME) ;
Si (digitalRead(CORRECT_ANSWER_BUTTON) == NOT_PUSHED) {}
rupture ;
}
}
Return CORRECT_ANSWER ;
} ElseIf (digitalRead(WRONG_ANSWER_BUTTON) == PUSHED) {}
for(;;) {
Delay(DEBOUNCE_TIME) ;
Si (digitalRead(WRONG_ANSWER_BUTTON) == NOT_PUSHED) {}
rupture ;
}
}
Return WRONG_ANSWER ;
} else {}
Return NO_ANSWER ;
}
}

Sub readPlayers()
{
États de tous les boutons du lecteur sont enregistrés dans le tableau du joueur.
int i ;
pour (i = 0; i < MAX_PLAYERS; i ++)
{
Si (touche joueur [i]! = bloqué) {}
Si (digitalRead(player[i].buttonPin) == PUSHED) {}
touche lecteur [i] = PUSHED ;
} else {}
touche lecteur [i] = NOT_PUSHED ;
}
}
}
}

Sub waitingForQuestion()
{
int i ;

digitalWrite (READY_FOR_ANSWER_LIGHT, LED_OFF) ;
Serial.println (« \tModerator, appuyez sur S6 et commencer la lecture") ;
Serial.println (« \tModerator, S5 Appuyez sur lorsque vous avez terminé la Question") ;
tandis que (! () readModerator() == CORRECT_ANSWER)) {}
pour (i = 0; i < MAX_PLAYERS; i ++) {}
digitalWrite (joueur [i] .light, LED_ON) ;
Delay(250) ;
digitalWrite (joueur [i] .light, LED_OFF) ;
}
}
PUT_CURSOR_MIDSCREEN
Serial.println (« \tPlayers, attendez la question à la fin") ;
}
void setup()
{
int i ;
pour (i = 0; i < MAX_PLAYERS; i ++) {}

Assigner les LEDs, cathodes raccordés à la terre
.light joueur [i] = TOP_LED - i ;
pinMode (joueur [i] .light, sortie) ;

Assigner les commutateurs de bouton poussoir ; Raccorder l’entrée à la terre au moment où il est fermé.
lecteur [i] .buttonPin = TOP_SWITCH - i ;
pinMode (joueur [i] .buttonPin, entrée) ;
digitalWrite (joueur [i] .buttonPin, HIGH) ;  Activez pullup

}

pinMode (READY_FOR_ANSWER_LIGHT, sortie) ;

pinMode (entrée, WRONG_ANSWER_BUTTON) ;
digitalWrite (WRONG_ANSWER_BUTTON, élevé) ;    Activez pullup

pinMode (entrée, CORRECT_ANSWER_BUTTON) ;
digitalWrite (CORRECT_ANSWER_BUTTON, élevé) ;    Activez pullup

resetAll() ;

Serial.Begin(9600) ;           mettre en place une bibliothèque série à 9600 bps

PUT_CURSOR_MIDSCREEN
waitingForQuestion() ;
}

void loop()
{
int i ;

interrupteur (phase) {}
case QUESTION_READING: {}
Modérateur a appuyé sur le bouton de réinitialisation
ou l’en question a été answeredd
ou tous les joueurs ont répondu correctement.
Aucun calendrier pour cette phase.
Aucun Buzz-ins souffriront 0,25 seconde de délai lors de l’état suivant est entré.
readPlayers() ;
Appliquer la sanction pour les presseurs bouton désireux
pour (i = 0; i < MAX_PLAYERS; i ++) {}
Si ((touche joueur [i] == PUSHED) & &
(.timePenalty de joueur [i] == 0)) {
lecteur [i] .timePenalty = DELAY_TIME ;
Serial.Print ("\tPlayer") ;
Serial.Print(i+1) ;
Serial.println ("obtient une pénalité") ;
}
}
Modérateur = readModerator() ;
Si (modérateur == WRONG_ANSWER) {}
phase = WAITING_FOR_RING_IN ;
Timeout = millis() + TIMEOUT_PERIOD ;
digitalWrite (READY_FOR_ANSWER_LIGHT, LED_ON) ;
pour (i = 0; i < MAX_PLAYERS; i ++) {}
lecteur [i] .timePenalty += millis() ;
}
PUT_CURSOR_MIDSCREEN
Serial.println ("\tWaiting pour anneau dans") ;
Serial.println() ;
blockedPlayers = 0 ;
}
rupture ;
} / / Fin de cas QUESTION_READING

case WAITING_FOR_RING_IN: {}
Modérateur a appuyé sur le bouton tout en état QUESTION_READING.
Cinq secondes pour cette phase.
Si (blockedPlayers > = MAX_PLAYERS) {}
PUT_CURSOR_MIDSCREEN
Serial.println ("\tAll joueurs ont sonné dans") ;
Serial.println (« \tModerator, veuillez lire la Question suivante") ;
phase = QUESTION_READING ;
resetAll() ;
waitingForQuestion() ;
rupture ;
} else {}
buzzedInPlayer = -1 ;
Si (timeout > = {millis())}
readPlayers() ;
pour (i = 0; i < MAX_PLAYERS; i ++) {}
Si ((joueur [i] .timePenalty < = millis()) & &
touche lecteur [i] == PUSHED) {}
buzzedInPlayer = i ;
buzzedInPlayerCount += 1 ;
digitalWrite (.light joueur [buzzedInPlayer], LED_ON) ;
digitalWrite (READY_FOR_ANSWER_LIGHT, LED_OFF) ;
phase = WAITING_FOR_ANSWER ;
Timeout = millis() + TIMEOUT_PERIOD ;
touche lecteur [i] = bloqué ;
blockedPlayers += 1 ;
PUT_CURSOR_MIDSCREEN
Serial.Print ("nombre de \tPlayer") ;
Serial.println(i+1) ;
}
}
} else {}
Serial.println (« \tTimed out waiting for un RING_IN") ;
Serial.println (« \tModerator, veuillez lire la Question suivante") ;
phase = QUESTION_READING ;
resetAll() ;
waitingForQuestion() ;
rupture ;
}
rupture ;
} / / Fin d’autre
} / / Fin de cas WAITING_FOR_RING_IN

case WAITING_FOR_ANSWER: {}
Un joueur a appuyé sur le bouton en état WAITING_FOR_RING_IN.
Cinq secondes pour cette phase.
Si (timeout < millis()) {}
Si (buzzedInPlayerCount < = MAX_PLAYERS) {}
PUT_CURSOR_MIDSCREEN
Serial.println("\tWAITING_FOR_RING_IN") ;
Timeout = millis() + TIMEOUT_PERIOD ;
digitalWrite (.light joueur [buzzedInPlayer], LED_OFF) ;
digitalWrite (READY_FOR_ANSWER_LIGHT, LED_ON) ;
phase = WAITING_FOR_RING_IN ;
PUT_CURSOR_MIDSCREEN
Serial.Print ("nombre de \tPlayer") ;
Serial.Print(buzzedInPlayer+1) ;
Serial.println ("timed out en attente d’une réponse") ;
}
}
Modérateur = readModerator() ;
Si (modérateur == CORRECT_ANSWER) {}
digitalWrite (.light joueur [buzzedInPlayer], LED_OFF) ;
PUT_CURSOR_MIDSCREEN
Serial.Print ("nombre de \tPlayer") ;
Serial.Print(buzzedInPlayer+1) ;
Serial.println (", c’est exact") ;
Serial.println (« \tModerator, veuillez lire la Question suivante") ;
phase = QUESTION_READING ;
resetAll() ;
waitingForQuestion() ;
} else
Si (modérateur == WRONG_ANSWER) {}
phase = WAITING_FOR_RING_IN ;
Timeout = millis() + TIMEOUT_PERIOD ;
digitalWrite (.light joueur [buzzedInPlayer], LED_OFF) ;
digitalWrite (READY_FOR_ANSWER_LIGHT, LED_ON) ;
Serial.println (« \tOooo, Désolé, c’est mal ») ;
Serial.println ("\tWaiting pour anneau dans") ;
resetPlayerTime() ;
}
rupture ;
} / / Fin de cas WAITING_FOR_ANSWER

par défaut: {}
Serial.Print ("par défaut : phase =") ;
Serial.println(phase) ;
}

} / / Fin interrupteur (phase)
}

Articles Liés

Fun Summer bague fil bouton

Fun Summer bague fil bouton

j'ai tendance à perdre des bijoux plus l'été que le reste de l'année... Mes mains se chauffent et anneaux se sentir serré, je les enlever quelque part et qu'ils ne disparaissent... Ce sont grands faire face à ces deux questions. Ils sont réglables, a
En forme de boutons avec traitement

En forme de boutons avec traitement

j'ai essayer de faire un système de borne avec un écran tactile. J'ai choisi le langage de programmation est traitement Java.Les boutons sur l'écran ne doivent pas être simplement rectangulaires, ils devraient être en forme.Si vous déjà essayez de fa
Bague en vacances avec une roue de Bell

Bague en vacances avec une roue de Bell

roues de Bell ont été utilisés pendant des siècles pour annoncer l'arrivée des jours fériés et événements spéciaux. Lorsque les sommets ou les couronnes de lourdes cloches étaient attachés à une jante de roue, plusieurs cloches pourraient être sonnée
La roue Burn - Airwheel avec Biométrie intégrée et éclairage

La roue Burn - Airwheel avec Biométrie intégrée et éclairage

Suivez-moi que je construis sécurité biométrique (empreinte digitale), intégré avant et éclairage arrière et plus encore, dans mon nouveau monocycle Self-balancing Airwheel Q3 pour un transport de Burning Man 2015 ! Alors qu'il s'agit d'un projet de
Fun avec règle et compas - constructions géométriques fondamentales.

Fun avec règle et compas - constructions géométriques fondamentales.

La prévalence de logiciel de dessin, j'ai remarqué que certaines compétences semblent être disparaît.Ce Instructable est le résultat d'une demande * pour un aperçu de certaines de ces compétences. Si vous pouvez déjà utiliser une règle et un compas,
Cas avec lecteur MicroSD intégré de téléphone

Cas avec lecteur MicroSD intégré de téléphone

L'introduction ci-dessous est mon discours sur le manque d'espace de stockage sur mon téléphone et comment je me suis inspiré et motivé à créer ce projet. N'hésitez pas à passez et plongez dans l'instruction commence à l'étape 1.Téléphone portable es
Étagère de livre avec serre-livres intégré.

Étagère de livre avec serre-livres intégré.

Parfois votre bibliothèque n'est pas très complet... et tous vos livres garder écrouler!...Alors j'ai pensé à faire une étagère avec un serre-livres intégré qui est amovible, quand votre étagère est pleine !Étape 1: matériaux Pour le livre soiA = 2 8
Crafty bijoux bagues de boutons

Crafty bijoux bagues de boutons

OK, donc ma fille a obtenu quelques boutons anciens de ma mère et m'a demandé de l'aider à faire des anneaux hors d'eux. Comment est-ce que je peux dire son pas ? Bien sûr, je ne peux pas.Vous pouvez ignorer la trame de fond si vous voulez juste pour
Arduino Nano : Inverser bouton avec Visuino

Arduino Nano : Inverser bouton avec Visuino

Boutons et commutateurs numériques sont un des capteurs plus souvent utilisées avec Arduino. Ils sont également faciles à connecter et utiliser du code. Parfois cependant le bouton ou le commutateur fournit vrai quand nous avons besoin de fauxet faux
Bague en laiton avec pépite d’argent

Bague en laiton avec pépite d’argent

il s'agit d'un simple anneau en laiton avec une pépite d'argent soudé sur le dessus. Vous aurez besoin en laiton et argent comme matériaux.Étape 1: Les matériaux Matériaux pour ce projet sont de fil de laiton de gage 14 et pépites argent. J'obtenir l
Bureau de fantaisie et fonctionnel avec un PC intégré

Bureau de fantaisie et fonctionnel avec un PC intégré

il s'agissait, dès maintenant, le plus difficile de mes projets. Travail sur celui-ci exige une précision et un peu de temps. Avoir d'autres outils de fantaisie serait vraiment utile ici - je n'avais pas certains, et même si j'ai réussi, j'ai passé a
Comment faire une bague de lecture avec Sugru

Comment faire une bague de lecture avec Sugru

Hi.  Cette instructable a été créée à Madrid Makespace au cours de l'atelier de nuit de Sugru.Cet appareil vous aidera à tenir un livre tout en lisant avec une main tout en portant à l'arrière. Cela peut déjà être fait, mais c'est fatiguant de garder
Plusieurs boutons avec une seule broche

Plusieurs boutons avec une seule broche

Bonjour à tous !Beaucoup d'entre nous se produisent à la fin de l'analogique PIN sur notre Conseil d'administration, pour éviter cela vous pouvez créer un circuit qui, selon la tension varie Arduino décider quel bouton a été enfoncé.Etape 1: Le circu
Bague en PVC avec incrustation de pierre.

Bague en PVC avec incrustation de pierre.

J'ai vu beaucoup d'anneaux bois avec incrustation de pierres, mais rien sur les anneaux de PVC. Il s'agit d'une bague faite de tuyaux en PVC avec incrustation de pierre concassée.Matériaux :Tuyau en PVC - qui s'adaptera le doigt de destinataires-Scie