(→Liens avec d'autres projets arduino) |
(→Liens avec d'autres projets arduino) |
||
(15 versions intermédiaires masquées) | |||
Ligne 1 : | Ligne 1 : | ||
{{avertissement}} | {{avertissement}} | ||
- | {{vidéo|numérovidéo = <videoflash type="mediaspip" num ="1">http://mediaspip.ptitdeb.infini.fr/IMG/ | + | {{vidéo|numérovidéo = <videoflash type="mediaspip" num ="1">http://mediaspip.ptitdeb.infini.fr/IMG/flv/arduino_comptearebours-encoded.flv|400|300</videoflash>}} |
==Présentation du projet Arduino== | ==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é | + | 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== | ==Liste du matériel== | ||
Ligne 12 : | Ligne 12 : | ||
* [[Image:Arduino_Uno_logo.png|50px]] Le logiciel Arduino | * [[Image:Arduino_Uno_logo.png|50px]] Le logiciel Arduino | ||
* [[Image:Plaque2.jpg|50px]] Une plaque labdec ou [[Breadboard]] | * [[Image:Plaque2.jpg|50px]] Une plaque labdec ou [[Breadboard]] | ||
- | * [[Image:Afficheur_7_segments.jpg|50px]] | + | * [[Image:Afficheur_7_segments.jpg|50px]] Un [[afficheur 7 segments]] |
* [[Image:Fils1.jpg|50px]] Du [[fil électrique]] (noir, rouge…) | * [[Image:Fils1.jpg|50px]] Du [[fil électrique]] (noir, rouge…) | ||
- | * [[Image:Résistance.jpg|50px]] | + | * [[Image:Résistance.jpg|50px]] Dix [[résistance]]s de 330 Ohm |
- | * [[Image:Bp.jpg|50px]] | + | * [[Image:Bp.jpg|50px]] Trois [[bouton poussoir]] |
- | * [[Image:DEL.png|50px]] | + | * [[Image:DEL.png|50px]] Une [[LED]] |
==réalisation du projet== | ==réalisation du projet== | ||
===Explication=== | ===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=== | ===Schéma Fritzing=== | ||
+ | |||
+ | [[Fichier:Compte a rebours.jpg]] | ||
+ | |||
===Code=== | ===Code=== | ||
<pre> | <pre> | ||
- | + | /* 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; | ||
+ | } | ||
+ | |||
+ | |||
+ | } | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
</pre> | </pre> | ||
Ligne 30 : | Ligne 466 : | ||
http://wikidebrouillard.org/index.php/Afficheur_7_segments_pilot%C3%A9_par_Arduino | http://wikidebrouillard.org/index.php/Afficheur_7_segments_pilot%C3%A9_par_Arduino | ||
+ | |||
http://wikidebrouillard.org/index.php/Horloge_Arduino | http://wikidebrouillard.org/index.php/Horloge_Arduino | ||
==Pour aller plus loin== | ==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== | ==Liens avec le quotidien== |
Sommaire |
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.
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.
/* 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; } }
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
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.
Ce compte à rebours peut être utilisé dans le domaine culinaire par exemple, pour la cuisson de certains plats.
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique