Go Down

Topic: faire un quizz (Read 1 time) previous topic - next topic

moustic

Bonjour,

J'aimerais utiliser mon arduino pour faire un quizz, en fait 4 bouton et 4 lampes
Le principe : le premier qui appuie sur son bouton, sa lampe s'allume, et les autres ne peuvent plus buzzer. Un autre bouton permet de faire un "reset".

J'ai fait le montage pas bien compliqué, mais je n'ai pas d'idee de comment je programmerais bien ça. Si vous avez des idées ?

donc  
4 boutons pour les joueurs (4 pin digital)
4 Led (4 pin digital)
1 bouton reset lampe (1 pin digital)

Si quelqu'un a une idée de comment je peux gerer ça !

Luj06

il faut relier chaque bouton avec une diode à la même entrée à interruption (digital 2 ou 3). Comme ça tu auras une interruption externe (regarde les exemples et la référence Arduino pour le code) sur une patte, qui te permettra en allant voir sur les entrées digitales quel est le bouton.

faipassa

#2
Dec 12, 2009, 03:36 pm Last Edit: Dec 12, 2009, 03:37 pm by faipassa Reason: 1
Salut,

Une autre solution est de le faire par programmation en gérant une variable booléenne partagée par les 4 boutons:
> Au début, elle est mise à ON.
> Chaque bouton ne peut activer sa lampe QUE si le flag est à ON
> Le premier qui appuie sur son bouton allume sa lampe ET fait passer la variable à OFF
>>> Les autres sont alors bloqués.
> Enfin, le bouton de reset n'est pas conditionné par la variable, et si il est pressé, il atteint toutes les lampes et passe la variable à ON

Ca devrait marcher...

a+
Olivier

Luj06

Moi pas compris..

"le premier allume sa lampe et fait passer la variable à OFF" --> la question est justement comment détecter qui est le premier !

or si tu traites ça par programmation, tu cours le risque en cas de presque simultanéité de considérer comme appuyé... le premier que tu testes, tout simplement !


moustic

voila le code que j'ai fait, ca fonctionne avec 4 petit interrupteurs, et 4 led. Il ne me reste lus qu'a faire des buzzer dignes de ce nom.

Si quelqu'un a des idées pour l'ameliorer ....
Code: [Select]
const int led1 = 8;
const int led2 = 9;
const int led3 = 10;
const int led4 = 11;

const int button1 = 2;
const int button2 = 3;
const int button3 = 4;
const int button4 = 5;

const int resetButton = 12;

boolean buttonEnabled = false;
boolean ledOff = true;
int lastButtonState = LOW;
long lastDebounceTime = 0;
long debounceDelay = 170;

void setLedOff() {
 digitalWrite(led1, LOW);
 digitalWrite(led2, LOW);
 digitalWrite(led3, LOW);
 digitalWrite(led4, LOW);
 ledOff = true;
}

int setReady() {
 digitalWrite(13, HIGH);
 buttonEnabled = true;
}



void setup() {
 pinMode(button1, INPUT);
 pinMode(button2, INPUT);
 pinMode(button3, INPUT);
 pinMode(button4, INPUT);
 pinMode(resetButton, INPUT);
 pinMode(led1, OUTPUT);
 pinMode(led2, OUTPUT);
 pinMode(led3, OUTPUT);
 pinMode(led4, OUTPUT);

 setLedOff();
}


void loop () {
 
 if (buttonEnabled) {
 if (digitalRead(button1)) {
     digitalWrite(led1, HIGH);
     digitalWrite(13, LOW);
     buttonEnabled = false;
     ledOff = false;
   }
 }
 if (buttonEnabled) {
   // handle button 2
   if (digitalRead(button2)) {
     digitalWrite(led2, HIGH);
     digitalWrite(13, LOW);
     buttonEnabled = false;
     ledOff = false;
   }
 }
 if (buttonEnabled) {
   if (digitalRead(button3)) {
     digitalWrite(led3, HIGH);
     digitalWrite(13, LOW);
     buttonEnabled = false;
     ledOff = false;
   }
   // handle button 3
 }
 if (buttonEnabled) {
     if (digitalRead(button4)) {
     digitalWrite(led4, HIGH);
     digitalWrite(13, LOW);
     buttonEnabled = false;
     ledOff = false;
   }
 }

if(digitalRead(resetButton)) {
 int reading = digitalRead(resetButton);
if (reading != lastButtonState) {
   lastDebounceTime = millis();
 }
  if ((!ledOff) && (millis() - lastDebounceTime) > debounceDelay) {
    setLedOff();
    lastDebounceTime = millis();
 }
 

 
  if (ledOff && (millis() - lastDebounceTime) > debounceDelay) {
    setReady();
 }
 
  lastButtonState = reading;
}  
 

}


le bouton reset est en deux temps, une pression ca eteint les led, une deuxieme pression permet de reactiver le vote.

Go Up