Compte à rebours

De Wikidebrouillard.

Article incomplet en cours de rédaction
La vidéo "Compte à rebours"

Sommaire

Présentation du projet Arduino

Le but du projet est de construire un compte à rebours, libre d'en trouver un usage, il en existe beaucoup ;)

Le compte à rebours est composé d'un afficheur 7 segments, ce qui veut dire qu'il peut mesurer une durée maximale de 9 secondes.

Liste du matériel

réalisation du projet

Explication

On utilise trois boutons poussoirs pour gérer trois évènements différents. De haut en bas : Le premier bouton permet de modifier le digit en l'incrémentant de 1 à chaque pression. Il revient à zéro après le chiffre 9.

Le deuxième bouton permet de lancer le décompte, une led rouge clignote et il y a un signal sonore pendant le décompte.

Le troisième bouton permet de faire un reset, c'est à dire de remettre à zéro le compte à rebours.


Nous avons rencontré quelques difficultés pour faire marcher et comprendre le fonctionnement des boutons poussoirs, il faut bien faire attention à ne pas oublier les résistances. Il ne faut aussi pas oublier les résistances pour l'afficheur 7 segments, car elles régulent le courant et évite une surchauffe et l'endommagement de l'afficheur.

Schéma Fritzing

Fichier:Compte a rebours.jpg

Code

/* On assigne chaque LED à une broche de l'arduino */
#include <Wire.h>


const int A = 2;
const int B = 3;
const int C = 4;
const int D = 5;
const int E = 6;
const int F = 7;
const int G = 8;
const int buzz = 9;
const int bouton1 = 12; // pour changer le digit
const int bouton2 = 11; // pour lancer //
const int bouton3 =10; // pour le reset
const int led3 = 13;


/* ici on créé des variables qui vont nous servir pour les évènements */
int launch;
int truc;
int change_digit1;
int digit;
int resetter;
int chiffre_actuel;



void setup()
{
 
   //définition des broches en sortie pour chacuns des segments
   pinMode(A, OUTPUT);
   pinMode(B, OUTPUT);
   pinMode(C, OUTPUT);
   pinMode(D, OUTPUT);
   pinMode(E, OUTPUT);
   pinMode(F, OUTPUT);
   pinMode(G, OUTPUT);
   pinMode(buzz, OUTPUT);
   pinMode(bouton1, INPUT);
   pinMode(bouton2, INPUT);
   pinMode(bouton3, INPUT);
 
 
   // led de test 
   pinMode(led3,OUTPUT);
   
   // on définit ces variables à HIGH au départ
   launch = HIGH;
   change_digit1 = HIGH;
   
   // digit de départ
   digit = 0;
   resetter = HIGH;
   digitalWrite(led3,LOW);

   
   
}

void loop(void)
{
  
   
  // si le bouton de lancement est relaché
  while(launch==HIGH && resetter==HIGH){
   
  // on fait en sorte que le buzzer est éteins
  noTone(buzz);
  
  change_digit1 = digitalRead(bouton1);
  launch = digitalRead(bouton2);
  if(launch==LOW){
    
    truc = LOW;
    
  }
  resetter = digitalRead(bouton3);
  //je verifie au cours de la boucle si jappuie sur le bouton de lancement 
   if(change_digit1 == LOW)      // si je presse le bouton de changement de digit
   {
     digitalWrite(led3,HIGH); // jallume la led de test
     digit++;                // jincremente le digit

   }
   else if(change_digit1 == HIGH) // si le bouton de changement de digit est relaché
   {
     digitalWrite(led3,LOW); // on éteins la led
   }

   
    if(digit > 9) // si le digit est superieur à 9 après incrémentation
     { 
      digit=0; // on le remet à zéro
     }  
     
   // affichage des digits en fonction de la valeur actuelle de digit

   if(digit==0)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, LOW);
       digitalWrite(F, LOW);
       digitalWrite(G, HIGH);
   }  
   
   if(digit==1)
   {
       digitalWrite(A, HIGH);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, HIGH);
       digitalWrite(E, HIGH);
       digitalWrite(F, HIGH);
       digitalWrite(G, HIGH);
   }  
   
   if(digit==2)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, HIGH);
       digitalWrite(D, LOW);
       digitalWrite(E, LOW);
       digitalWrite(F, HIGH);
       digitalWrite(G, LOW);
   } 
   
   if(digit==3)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, HIGH);
       digitalWrite(F, HIGH);
       digitalWrite(G, LOW);
   }  
   
   if(digit==4)
   {
       digitalWrite(A, HIGH);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, HIGH);
       digitalWrite(E, HIGH);
       digitalWrite(F, LOW);
       digitalWrite(G, LOW);
   }  
   
   if(digit==5)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, HIGH);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, HIGH);
       digitalWrite(F, LOW);
       digitalWrite(G, LOW);
   }  
   
   if(digit==6)
   {
       digitalWrite(A, HIGH);
       digitalWrite(B, HIGH);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, LOW);
       digitalWrite(F, LOW);
       digitalWrite(G, LOW);
   }  
   
   if(digit==7)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, HIGH);
       digitalWrite(E, HIGH);
       digitalWrite(F, HIGH);
       digitalWrite(G, HIGH);
   }  
   
   if(digit==8)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, LOW);
       digitalWrite(F, LOW);
       digitalWrite(G, LOW);
   }  
   
   if(digit==9)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, HIGH);
       digitalWrite(F, LOW);
       digitalWrite(G, LOW);
   }  
  
  delay(100); // on ajoute ce délai pour palier aux "sauts" du bouton poussoir qui ferait que la valeur pourrait être dure à régler à cause de la sensibilité
  }  
  
  
  
  
  // phase 2 : lancement du compte à rebours, décompte et buzz par alternance
  
  
  
  while(truc==LOW && resetter==HIGH && digit!=0){ // bouton de lancement pressé et digit différent de zéro
    
   // launch = digitalRead(bouton1); // on vérifie que le bouton de lancement est toujours pressé
     change_digit1 = digitalRead(bouton1);
  launch = digitalRead(bouton2);
  resetter = digitalRead(bouton3);
  
    chiffre_actuel  = digit; 
    
    
    // comme c'est une boucle while, on va repasser dedans tant que digit est différent de zéro
    // donc on affiche sur le cadran la valeur du digit 
     if(chiffre_actuel==0 )
   {
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, LOW);
       digitalWrite(F, LOW);
       digitalWrite(G, HIGH);
   }  
   
   if(chiffre_actuel==1)
   {
       digitalWrite(A, HIGH);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, HIGH);
       digitalWrite(E, HIGH);
       digitalWrite(F, HIGH);
       digitalWrite(G, HIGH);
   }  
   
   if(chiffre_actuel==2)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, HIGH);
       digitalWrite(D, LOW);
       digitalWrite(E, LOW);
       digitalWrite(F, HIGH);
       digitalWrite(G, LOW);
   } 
   
   if(chiffre_actuel==3)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, HIGH);
       digitalWrite(F, HIGH);
       digitalWrite(G, LOW);
   }  
   
   if(chiffre_actuel==4)
   {
       digitalWrite(A, HIGH);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, HIGH);
       digitalWrite(E, HIGH);
       digitalWrite(F, LOW);
       digitalWrite(G, LOW);
   }  
   
   if(chiffre_actuel==5)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, HIGH);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, HIGH);
       digitalWrite(F, LOW);
       digitalWrite(G, LOW);
   }  
   
   if(chiffre_actuel==6)
   {
       digitalWrite(A, HIGH);
       digitalWrite(B, HIGH);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, LOW);
       digitalWrite(F, LOW);
       digitalWrite(G, LOW);
   }  
   
   if(chiffre_actuel==7)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, HIGH);
       digitalWrite(E, HIGH);
       digitalWrite(F, HIGH);
       digitalWrite(G, HIGH);
   }  
   
   if(chiffre_actuel==8)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, LOW);
       digitalWrite(F, LOW);
       digitalWrite(G, LOW);
   }  
   
   if(chiffre_actuel==9)
   {
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, HIGH);
       digitalWrite(F, LOW);
       digitalWrite(G, LOW);
   }  
   
   
   // on décrémente le digit que l'on affiche
   chiffre_actuel--;
   digit--;
   
   // on fait marcher le buzzer
   
   tone(buzz, 4000); 
    digitalWrite(led3,HIGH); 
    delay(500);
     digitalWrite(led3,LOW); 
    noTone(buzz); 
    
   // on joue sur le décallage de la seconde pour faire marcher le buzzer par alternance
   delay(500); 
    
  }
  
  // une fois que le compte est fini 
  
  while(truc==LOW && resetter==HIGH && digit==0){
    
    
     change_digit1 = digitalRead(bouton1);
        launch = digitalRead(bouton2);
  resetter = digitalRead(bouton3);
  
      // on affiche zéro
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, LOW);
       digitalWrite(F, LOW);
       digitalWrite(G, HIGH);
       
       
       /* on fait sonner le buzzer en continue*/
       tone(buzz, 4000);
        digitalWrite(led3,HIGH); 
       truc == HIGH;
    
  }
   
   
   
     while(resetter==LOW){
    
       // on arrete le buzzer 
       noTone(buzz);
       // on eteint la led
       digitalWrite(led3,LOW);
      // on redefinit le digit de base à zéro 
      digit=0;
      
      chiffre_actuel =0;
      
      // on rechecke letat des boutons
       change_digit1 = digitalRead(bouton1);
        launch = digitalRead(bouton2);
        resetter = digitalRead(bouton3);
        
        
      // on affiche zéro
       digitalWrite(A, LOW);
       digitalWrite(B, LOW);
       digitalWrite(C, LOW);
       digitalWrite(D, LOW);
       digitalWrite(E, LOW);
       digitalWrite(F, LOW);
       digitalWrite(G, HIGH);
       truc = HIGH;
  }
    
    
  }
  
  
  
  
  

Liens avec d'autres projets arduino

Projets utilisant le même système d'affichage :

http://wikidebrouillard.org/index.php/Afficheur_7_segments_pilot%C3%A9_par_Arduino

http://wikidebrouillard.org/index.php/Horloge_Arduino

Pour aller plus loin

On pourrait ajouter un deuxième afficheur 7 segments voire un troisième pour aller plus loin. Pour cela il faudrait penser à utiliser un démultiplexeur pour pouvoir gérer plus de cas à cause du nombre limité d'entrées/sorties.

Liens avec le quotidien

Ce compte à rebours peut être utilisé dans le domaine culinaire par exemple, pour la cuisson de certains plats.

Portail des ExplorateursWikidébrouillardLéon DitFLOGPhoto mystèreJ'ai FaitPortraitsAnnuaire
AR
CO

Compte à rebours

Rechercher

Page Discussion Historique
Powered by MediaWiki
Creative Commons - Paternite Partage a l

© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique