Pages: [1]   Go Down
Author Topic: faire un quizz  (Read 981 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !
Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Thionville, France
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino addicted
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: December 12, 2009, 09:37:41 am by faipassa » Logged

Sophia-Antipolis (06)
Offline Offline
God Member
*****
Karma: 4
Posts: 618
Rejoignez le club !
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 !

Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 76
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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.
Logged

Pages: [1]   Go Up
Jump to: