Go Down

Topic: [TUTO] Un genre de Simon avec 6 leds et 2 boutons poussoirs (Read 2482 times) previous topic - next topic

Monstercrunch

Dec 30, 2011, 07:08 pm Last Edit: Dec 31, 2011, 11:48 am by Monstercrunch Reason: 1
TUTORIEL: Réalisation d'un simon like avec arduino !


http://www.youtube.com/watch?v=GA9q-ChU-6A&


Edit de Jean-François : tu peux regarder en éditant ton message  XD => Merci d'avoir mit la vidéo :D


//=== Règles du jeu :

Après une étape "démonstration" qui montre l'enchaînement  de l'allumage de leds, on a un clignotement général qui indique notre tour de jeu. Il faut alors, à l'aide des deux boutons, effectuer la même combinaison qui vient d'être montrée.
- Si on a juste, la led verte clignote et est suivie par la phase "démonstration" à laquelle s'ajoute une led supplémentaire.
- Si on a faux, la led rouge clignote et est suivie par la phase "démonstration", sans ajout de led, et ce un nombre illimité de fois (on peut se tromper autant de fois que l'on veut, la démonstration ne passera pas au niveau suivant).

Etc... Etc...

//== Matériel requis:

- 2x bouton poussoir
- 5x led rouge
- 1x led verte
- 6x résistance 330ohm (orange orange marron or)
- 2x résistance 10kohm
- 2x condensateur 10nf

//=== Montage :



//=== Code :

Code: [Select]
const int L1 = 10;
const int L2 = 11;
const int L3 = 12;
const int L4 = 13;
const int led_verte = 8;
const int led_rouge = 9;
const int bt_gauche = 2;
const int bt_droite = 3;
int etat_bt_gauche = HIGH;
int etat_bt_droite = HIGH;
int mem_bt_gauche = HIGH;
int mem_bt_droite = HIGH;
int led_on = 1;
int level[]={1,2,3,2,3,2,1,2,3,4,3,2,3,2,3,4,3,4,3,4,3,2,1,2,1,2}; // A modifier avec une création aléatoire du niveau (non fonctionnel pour l'instant)
int tour = 4;
int utilisateur[40];
int var_perdu = 0;


void setup()
{
 // Initialisation des pins des leds
 pinMode(L1, OUTPUT);
 pinMode(L2, OUTPUT);
 pinMode(L3, OUTPUT);
 pinMode(L4, OUTPUT);
 pinMode(led_rouge, OUTPUT);
 pinMode(led_verte, OUTPUT);
 
 // Initialisation des pins des boutons
 pinMode(bt_gauche, INPUT);
 pinMode(bt_droite, INPUT);
 // Test du fonctionnement des leds, toutes les leds doivent clignoter.
 test_leds();
 // Création aléatoire du niveau, soit un tableau de 40 chiffres correspondant à une led.
 //============//
 // LOAD LEVEL //
 //============//
 light_leds();
}

void loop()
{
 demo();
 test_bt();    
}

void light_leds()
{
 if(led_on == 1)
 {
   digitalWrite(L1, LOW);
   digitalWrite(L2, HIGH);
   digitalWrite(L3, HIGH);
   digitalWrite(L4, HIGH);
 }
 if(led_on == 2)
 {
   digitalWrite(L1, HIGH);
   digitalWrite(L2, LOW);
   digitalWrite(L3, HIGH);
   digitalWrite(L4, HIGH);
 }
 if(led_on == 3)
 {
   digitalWrite(L1, HIGH);
   digitalWrite(L2, HIGH);
   digitalWrite(L3, LOW);
   digitalWrite(L4, HIGH);
 }
 if(led_on == 4)
 {
   digitalWrite(L1, HIGH);
   digitalWrite(L2, HIGH);
   digitalWrite(L3, HIGH);
   digitalWrite(L4, LOW);
 }
}

void test_leds()
{
 for(int i = 0; i<6; i++)
 { digitalWrite(L1, LOW);
   digitalWrite(L2, LOW);
   digitalWrite(L3, LOW);
   digitalWrite(L4, LOW);
   digitalWrite(led_verte, LOW);
   digitalWrite(led_rouge, LOW);
   delay(100);
   digitalWrite(L1, HIGH);
   digitalWrite(L2, HIGH);
   digitalWrite(L3, HIGH);
   digitalWrite(L4, HIGH);
   digitalWrite(led_verte, HIGH);
   digitalWrite(led_rouge, HIGH);
   delay(100);
 }
 delay(300);
 
}


//================================== LOAD LEVEL [NON FONCTIONNEL]
// Vous pouvez copier ce code mais il n'est pas utilisé par le programme, je le modifierai prochainnement
int load_level()
{
 int led = 1;
 level[0] = led;
 for(int i = 1; i<40; i++)
 {
  led = random(1,5);
  if(level[i-1] == 1)
  {
   level[i] = 2;
  }
  if((level[i-1] == 2) && (led == 1 || led == 3))
  {
    level[i] = led;
  }
  if((level[i-1] == 3) && (led == 2 || led == 4))
  {
   level[i] == led;
  }
  if(level[i-1] == 4)
  {
   level[i] = 3;
  }
 }  
}

//============================================= TEST BT
void test_bt()
{
 int i = 0;
 while(i<tour-1)
 {
   
   etat_bt_gauche = digitalRead(bt_gauche);
   etat_bt_droite = digitalRead(bt_droite);
 
   if((etat_bt_gauche==LOW) && (led_on > 1) && (mem_bt_gauche == HIGH))
   {
     mem_bt_gauche = LOW;
     led_on = led_on - 1;
     light_leds();
     i++;
   }
   if((etat_bt_droite == LOW) && (led_on < 4) && (mem_bt_droite == HIGH))
   {
     mem_bt_droite = LOW;
     led_on = led_on + 1;    
     light_leds();
     i++;
   }
 
   if((etat_bt_gauche == HIGH) && (mem_bt_gauche == LOW))
   {
    mem_bt_gauche = HIGH;
   }
   if((etat_bt_droite == HIGH) && (mem_bt_droite == LOW))
   {
    mem_bt_droite = HIGH;
   }
   if(led_on != level[i])
   {
     var_perdu = 1;
   }
 }
 delay(600);
 if(var_perdu == 1)
 {
   perdu();
   var_perdu = 0;
 }
 else
 {
   gagne();
   tour++;
 }  
}

//========================================= DEMO
void demo()
{
 for(int i = 0; i<tour; i++)
 {
   led_on = level[i];
   light_leds();
   delay(400);    
 }
 test_leds();
 led_on = 1;
 light_leds();
}

void perdu()
{
digitalWrite(led_rouge, LOW);
delay(200);
digitalWrite(led_rouge, HIGH);
delay(200);
digitalWrite(led_rouge, LOW);
delay(200);
digitalWrite(led_rouge, HIGH);
delay(200);
digitalWrite(led_rouge, LOW);
delay(200);
digitalWrite(led_rouge, HIGH);
delay(200);
}

void gagne()
{
digitalWrite(led_verte, LOW);
delay(200);
digitalWrite(led_verte, HIGH);
delay(200);
digitalWrite(led_verte, LOW);
delay(200);
digitalWrite(led_verte, HIGH);
delay(200);
digitalWrite(led_verte, LOW);
delay(200);
digitalWrite(led_verte, HIGH);
delay(200);
}


Voilà, ceci n'est que le début, je commenterai plus en profondeur le code d'ici peu, et je tâcherai de régler le problème de génération du niveau.
Sur ce, j'attends vos commentaires !  ^_^


Monstercrunch

Euh ouai, mais pour le coup, je sais toujours pas comment faire  :P

j'ai testé pleins de trucs:
http://
[youtube][/youtube]
[video][/video]
[vid][/vid]

<object width="420" height="315"><param name="movie" value="http://www.youtube.com/v/GA9q-ChU-6A?version=3&amp;hl=fr_FR"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/GA9q-ChU-6A?version=3&amp;hl=fr_FR" type="application/x-shockwave-flash" width="420" height="315" allowscriptaccess="always" allowfullscreen="true"></embed></object>

<iframe width="420" height="315" src="http://www.youtube.com/embed/GA9q-ChU-6A" frameborder="0" allowfullscreen></iframe>

rien de tout ça ne fonctionne...

AlienArea51

Salut
tu copie le lien de youtube  ensuite tu click sur l' icone Hyperlink et tu colle ton lien .
@+



The truth is elsewhere !!


Go Up