Chasse LED avec arduino : Différence entre versions

(update property name)
 
(4 révisions intermédiaires par 2 utilisateurs non affichées)
Ligne 3 : Ligne 3 :
 
|Licences=Attribution (CC-BY)
 
|Licences=Attribution (CC-BY)
 
|Description=Chasse LED
 
|Description=Chasse LED
|Disciplines scientifiques=Electricity
+
|Disciplines scientifiques=Arduino, Computing, Electricity
 
|Difficulty=Technical
 
|Difficulty=Technical
 
|Duration=50
 
|Duration=50
Ligne 13 : Ligne 13 :
 
{{Materials
 
{{Materials
 
|ItemList={{ItemList
 
|ItemList={{ItemList
|Item=Carte arduino micro-controleur
 
}}{{ItemList
 
 
|Item=Logiciel Arduino
 
|Item=Logiciel Arduino
 
}}{{ItemList
 
}}{{ItemList
Ligne 22 : Ligne 20 :
 
}}{{ItemList
 
}}{{ItemList
 
|Item=Platine de Prototypage
 
|Item=Platine de Prototypage
 +
}}{{ItemList
 +
|Item=Arduino Uno
 
}}
 
}}
 
}}
 
}}
{{Separator}}
 
 
{{Tuto Step
 
{{Tuto Step
 
|Step_Title=Réaliser
 
|Step_Title=Réaliser
Ligne 35 : Ligne 34 :
 
{{Tuto Step
 
{{Tuto Step
 
|Step_Title=Copier
 
|Step_Title=Copier
|Step_Content=Copier/coller le code suivant dans le programme permettant d'utiliser Arduino :  
+
|Step_Content=Copier/coller le code suivant dans le programme permettant d'utiliser Arduino :
 +
 
 +
<syntaxhighlight lang="arduino" line="1">
 +
// Ce programme sert à faire le chasse-led
 +
int led[4]={8,9,10,11}; //Déclaration des pattes des leds
 +
int bp[4]={2,3,4,5}; //Déclaration des pattes des boutons poussoirs
 +
//Déclaration et initialisation des variables globales servant pour la suite du code
 +
int initLed = 0;
 +
int i;
 +
int randnumber ;
 +
int tirage = 0;
 +
int compteur;
 +
int score;
 +
 
 +
void setup(){ //Fonction permettant d'initialiser le matériel (leds et boutons poussoir)
  
// Ce programme sert à faire le chasse-led
+
Serial.begin(9600);                //Indique que Arduino se situe sur le port usb 9600
int led[4]={8,9,10,11};              //Déclaration des pattes des leds
+
for(i=0;i<4;i++){                  //Boucle parcourant toutes les variables de 0 à 3
int bp[4]={2,3,4,5};                //Déclaration des pattes des boutons poussoirs
+
      pinMode(bp[i], INPUT);        //Indique que le bouton poussoir est une entrée
//Déclaration et initialisation des variables globales servant pour la suite du code
+
      pinMode(led[i],OUTPUT);      //Indique que les leds sont des sorties
int initLed = 0;       
+
      digitalWrite(led[i],LOW);    //On met les leds au niveau bas (elles sont eteintes au depart)
int i;
+
      digitalWrite(bp[i],HIGH);    //On met les boutons poussoirs au niveau haut
int randnumber ;
 
int tirage = 0;
 
int compteur;
 
int score;
 
void setup(){                        //Fonction permettant d'initialiser le matériel (leds et boutons poussoir)
 
  Serial.begin(9600);                //Indique que Arduino se situe sur le port usb 9600
 
  for(i=0;i<4;i++){                  //Boucle parcourant toutes les variables de 0 à 3
 
      pinMode(bp[i], INPUT);        //Indique que le bouton poussoir est une entrée
 
      pinMode(led[i],OUTPUT);      //Indique que les leds sont des sorties
 
      digitalWrite(led[i],LOW);    //On met les leds au niveau bas (elles sont eteintes au depart)
 
      digitalWrite(bp[i],HIGH);    //On met les boutons poussoirs au niveau haut
 
}
 
  compteur=0;                        //Initialisation du compteur à 0
 
 
}
 
}
 +
 +
compteur=0;                        //Initialisation du compteur à 0
 +
}
 +
 
void loop(){
 
void loop(){
    if (initLed == 0)  {                    //Premier passage dans la fonction loop
+
  if (initLed == 0)  {                    //Premier passage dans la fonction loop
      randnumber=random(0,4);              //Déclaration d'un premier nombre aléatoire de 0 à 3
+
      randnumber=random(0,4);              //Déclaration d'un premier nombre aléatoire de 0 à 3
      digitalWrite(led[randnumber],HIGH);  //Met la led correspondant au numéro aléatoire au niveau haut
+
      digitalWrite(led[randnumber],HIGH);  //Met la led correspondant au numéro aléatoire au niveau haut
      Serial.println("valeur aleatoire:");  //Affiche "valeur aléatoire :" dans le terminal
+
      Serial.println("valeur aleatoire:");  //Affiche "valeur aléatoire :" dans le terminal
      Serial.println(randnumber,DEC);      //Affiche dans le terminal le numéro aleatoire
+
      Serial.println(randnumber,DEC);      //Affiche dans le terminal le numéro aleatoire
      compteur = compteur + 1;              //incrémentation du compteur
+
      compteur = compteur + 1;              //incrémentation du compteur
      initLed =1;                          //Indique que le programme est déjà lancé pour ne plus aller dans ce test
+
      initLed =1;                          //Indique que le programme est déjà lancé pour ne plus aller dans ce test
      tirage = 1;                          //Permet d'aller au test suivant
+
      tirage = 1;                          //Permet d'aller au test suivant
      delay(500);                          //Attente d'une demi seconde (500 = 500ms)
+
      delay(500);                          //Attente d'une demi seconde (500 = 500ms)
 
}
 
}
  if (tirage == 1 ){                            //Deuxième test valide si on a passé le premier test
+
 
      if(digitalRead(bp[randnumber])==LOW){      //Regarde si le bouton poussoir associé a la led est active
+
if (tirage == 1 ){                            //Deuxième test valide si on a passé le premier test
          Serial.println("valeur du compteur:"); //Affiche "valeur du compteur :" dans le terminal
+
    if(digitalRead(bp[randnumber])==LOW){      //Regarde si le bouton poussoir associé a la led est active
          Serial.println(compteur,DEC);          //Affiche la valeur du compteur dans le terminal
+
        Serial.println("valeur du compteur:"); //Affiche "valeur du compteur :" dans le terminal
          digitalWrite(led[randnumber],LOW);    //Éteint la led quand on a appuyé sur le bp (bp=bouton poussoir)
+
        Serial.println(compteur,DEC);          //Affiche la valeur du compteur dans le terminal
          randnumber=random(4);                  //Cherche un autre nombre aléatoire
+
        digitalWrite(led[randnumber],LOW);    //Éteint la led quand on a appuyé sur le bp (bp=bouton poussoir)
          digitalWrite(led[randnumber],HIGH);    //Allume la led correspondant a ce nouveau nombre
+
        randnumber=random(4);                  //Cherche un autre nombre aléatoire
          compteur = compteur + 1;              //Incrémente le compteur
+
        digitalWrite(led[randnumber],HIGH);    //Allume la led correspondant a ce nouveau nombre
          Serial.println("valeur aleatoire:");  //Affiche "valeur aléatoire :" dans le terminal
+
        compteur = compteur + 1;              //Incrémente le compteur
          Serial.println(randnumber,DEC);        //Affiche dans le terminal le numero aleatoire
+
        Serial.println("valeur aleatoire:");  //Affiche "valeur aléatoire :" dans le terminal
          delay(500);                            //Attente d'une demi seconde
+
        Serial.println(randnumber,DEC);        //Affiche dans le terminal le numéro aléatoire
 +
        delay(500);                            //Attente d'une demi seconde
 
}
 
}
      else { if ( digitalRead(bp[(randnumber+1)%4])==LOW ||      //Si le bouton poussoir correspondant à la led n'est pas activé, on regarde si l'utilisateur ne s'est pas trompé et a activé un autre bp
+
 
                digitalRead(bp[(randnumber+2)%4])==LOW ||        //Test des trois bp
+
    else if ( digitalRead(bp[(randnumber+1)%4])==LOW){
                digitalRead(bp[(randnumber+3)%4])==LOW){          //Test des trois bp
+
// ce code semble incomplet ?
                digitalWrite(led[randnumber],LOW);                //Si l'un des autres bp est activé on éteint la led
 
                Serial.println(" ");                              //On écrit un espace dahs le terminal
 
                Serial.println("Valeur finale du compteur : ");  //On écrit "Valeur finale du compteur : " dans le terminal
 
                Serial.println(compteur,DEC);                    //Affiche dans le terminal la valeur du compteur
 
                tirage = 0;                                      //Fait en sorte que l'on allume le score à la fin
 
}
 
}
 
}
 
  score=compteur-1;                              //Calcul du score
 
  if (tirage ==0) {                             //On teste si la variable tirage est à 0
 
  allumer(score);                                //Va dans la fonction allumer
 
}
 
}
 
void allumer(int score){                        //Fonction alliumer qui prend en variable le score et qui ne retourne rien
 
  digitalWrite(led[0],LOW);                      //Éteint toutes les leds
 
digitalWrite(led[1],LOW);                        //Éteint toutes les leds
 
digitalWrite(led[2],LOW);                        //Éteint toutes les leds
 
digitalWrite(led[3],LOW);                        //Éteint toutes les leds
 
  delay(1000);                                  //Attend une seconde
 
for(int j=score; j>0;j--){                      //Boucle décrementant le score jusqu'à ce qu'il soit égal à 1
 
  digitalWrite(led[j%4],HIGH);                  //Allume la led modulo 4 (Un nombre entre 0 et 3)
 
  delay(1000);                                  //Attend une seconde
 
  digitalWrite(led[j%4],LOW);                    //Éteint la led modulo 4 (Un nombre entre 0 et 3)
 
  delay(1000);                                  //Attend une seconde
 
}
 
digitalWrite(led[0],HIGH);                      //Allume la led 0
 
digitalWrite(led[1],HIGH);                      //Allume la led 1
 
digitalWrite(led[2],HIGH);                      //Allume la led 2
 
digitalWrite(led[3],HIGH);                      //Allume la led 3
 
delay(1000);                                    //Attend une seconde
 
 
}
 
}
 +
 +
 +
</syntaxhighlight>
 
}}
 
}}
 
{{Tuto Step
 
{{Tuto Step
Ligne 129 : Ligne 107 :
 
}}
 
}}
 
{{Notes
 
{{Notes
|Observations=Appuyer, sans se tromper, sur le bouton associé à chaque Del. Dès qu'une erreur est commise, le jeu s'arrête et le score s'affiche. Chaque Del correspond à un palier. Celle de gauche signifie que vous êtes un champion de la ligue pokémon, celle du milieu gauche un champion de l’arène de Cramois'ile, celle du milieu droit un champion d'Azuria, et celle de droite que vous quittez bourg-palette.
+
|Observations=Appuyer, sans se tromper, sur le bouton associé à chaque Del. Dès qu'une erreur est commise, le jeu s'arrête et le score s'affiche. Chaque Del correspond à un palier. Celle de gauche signifie que vous êtes un champion de la ligue Pokémon, celle du milieu gauche un champion de l’arène de Cramois'ile, celle du milieu droit un champion d'Azuria, et celle de droite que vous quittez Bourg-palette.
|Avertissement=Se tromper dans les codage
+
|Avertissement=Se tromper dans les codages
 
|Explanations==== '''De manière simple''' ===
 
|Explanations==== '''De manière simple''' ===
 
Les Leds s'allument de manière aléatoire de plus en plus vite. À chaque pression sur un bouton poussoir se produit l'événement suivant : soit ce bouton correspond à la bonne led et le jeu continue, soit ce bouton ne correspond pas à la bonne Led, le jeu s’arrête et le score s'affiche à l'aide des leds.
 
Les Leds s'allument de manière aléatoire de plus en plus vite. À chaque pression sur un bouton poussoir se produit l'événement suivant : soit ce bouton correspond à la bonne led et le jeu continue, soit ce bouton ne correspond pas à la bonne Led, le jeu s’arrête et le score s'affiche à l'aide des leds.
Ligne 141 : Ligne 119 :
 
|Complete=Published
 
|Complete=Published
 
}}
 
}}
 +
{{Separator}}

Version actuelle datée du 12 décembre 2020 à 14:58

Auteur avatarTess | Dernière modification 12/12/2020 par Antonydbzh

Chasse LED avec arduino 250px-Vatx proto 0 2.jpg

Introduction

D'horribles LED nous envahissent ! L'heure est venue de les éliminer, mais il faut d'abord s’entraîner. Fabriquons donc un simulateur à base de LED pour préparer la guerre finale...

Étape 1 - Réaliser

  • Réaliser le montage en suivant la vidéo/le schéma.

Étape 2 - Lancer

  • Lancer le logiciel Arduino.

Étape 3 - Copier

Copier/coller le code suivant dans le programme permettant d'utiliser Arduino :

 1 // Ce programme sert à faire le chasse-led 
 2 int led[4]={8,9,10,11}; //Déclaration des pattes des leds 
 3 int bp[4]={2,3,4,5}; //Déclaration des pattes des boutons poussoirs 
 4 //Déclaration et initialisation des variables globales servant pour la suite du code 
 5 int initLed = 0; 
 6 int i; 
 7 int randnumber ; 
 8 int tirage = 0; 
 9 int compteur; 
10 int score; 
11 
12 void setup(){ //Fonction permettant d'initialiser le matériel (leds et boutons poussoir)
13 
14  Serial.begin(9600);                //Indique que Arduino se situe sur le port usb 9600
15  for(i=0;i<4;i++){                  //Boucle parcourant toutes les variables de 0 à 3
16       pinMode(bp[i], INPUT);        //Indique que le bouton poussoir est une entrée
17       pinMode(led[i],OUTPUT);       //Indique que les leds sont des sorties
18       digitalWrite(led[i],LOW);     //On met les leds au niveau bas (elles sont eteintes au depart)
19       digitalWrite(bp[i],HIGH);     //On met les boutons poussoirs au niveau haut
20 }
21 
22  compteur=0;                        //Initialisation du compteur à 0
23 } 
24 
25 void loop(){
26    if (initLed == 0)  {                     //Premier passage dans la fonction loop
27       randnumber=random(0,4);               //Déclaration d'un premier nombre aléatoire de 0 à 3
28       digitalWrite(led[randnumber],HIGH);   //Met la led correspondant au numéro aléatoire au niveau haut
29       Serial.println("valeur aleatoire:");  //Affiche "valeur aléatoire :" dans le terminal
30       Serial.println(randnumber,DEC);       //Affiche dans le terminal le numéro aleatoire
31       compteur = compteur + 1;              //incrémentation du compteur
32       initLed =1;                           //Indique que le programme est déjà lancé pour ne plus aller dans ce test
33       tirage = 1;                           //Permet d'aller au test suivant
34       delay(500);                           //Attente d'une demi seconde (500 = 500ms)
35 }
36 
37  if (tirage == 1 ){                             //Deuxième test valide si on a passé le premier test
38      if(digitalRead(bp[randnumber])==LOW){      //Regarde si le bouton poussoir associé a la led est active
39          Serial.println("valeur du compteur:"); //Affiche "valeur du compteur :" dans le terminal
40          Serial.println(compteur,DEC);          //Affiche la valeur du compteur dans le terminal
41          digitalWrite(led[randnumber],LOW);     //Éteint la led quand on a appuyé sur le bp (bp=bouton poussoir)
42          randnumber=random(4);                  //Cherche un autre nombre aléatoire
43          digitalWrite(led[randnumber],HIGH);    //Allume la led correspondant a ce nouveau nombre
44          compteur = compteur + 1;               //Incrémente le compteur
45          Serial.println("valeur aleatoire:");   //Affiche "valeur aléatoire :" dans le terminal
46          Serial.println(randnumber,DEC);        //Affiche dans le terminal le numéro aléatoire
47          delay(500);                            //Attente d'une demi seconde
48 }
49 
50      else if ( digitalRead(bp[(randnumber+1)%4])==LOW){
51 // ce code semble incomplet ?
52 }

Étape 4 - Brancher

  • Brancher l'Arduino sur un port USB de l'ordinateur.

Étape 5 - Cliquer

  • Cliquer sur l'image représentant une sorte de v, puis sur l'image

représentant une flèche (le programme sera mis dans l'Arduino).

Étape 6 - Resultat

Attendre la fin du transfert.

Comment ça marche ?

Observations : que voit-on ?

Appuyer, sans se tromper, sur le bouton associé à chaque Del. Dès qu'une erreur est commise, le jeu s'arrête et le score s'affiche. Chaque Del correspond à un palier. Celle de gauche signifie que vous êtes un champion de la ligue Pokémon, celle du milieu gauche un champion de l’arène de Cramois'ile, celle du milieu droit un champion d'Azuria, et celle de droite que vous quittez Bourg-palette.

Mise en garde : qu'est-ce qui pourrait faire rater l'expérience ?

Se tromper dans les codages

Explications

De manière simple

Les Leds s'allument de manière aléatoire de plus en plus vite. À chaque pression sur un bouton poussoir se produit l'événement suivant : soit ce bouton correspond à la bonne led et le jeu continue, soit ce bouton ne correspond pas à la bonne Led, le jeu s’arrête et le score s'affiche à l'aide des leds.

Plus d'explications

Allons plus loin dans l'explication

L'Arduino est un microprocesseur dont les instructions sont codées dans un langage proche du C. Plus d'info sur l'article Wikipédia Langage C.

En C, on déclare le type des variables avant de les utiliser : ici les int correspondent à des nombres entiers (1,2,3...), et le void correspond à une fonction non typée. Le const devant un type signifie que l'objet manipulé ne peut pas être modifié


Dernière modification 12/12/2020 par user:Antonydbzh.

Commentaires

Published