Sommaire |
Marre de rater vos pâtes ? Fondante au lieu d'être "Al Dente" ? Atteignez la perfection grâce à ce magnifique minuteur Arduino UNO à afficheur 7-segments ! Il s'adapte à toute les échelles temporelles. Envie de faire une sieste ? Changez la base de temps, réglez-le et dormez. Il vous réveillera de sa douce mélodie...stridente.
/* Blink Turns on an LED on for one second, then off for one second, repeatedly. This example code is in the public domain. */ // Pin 13 has an LED connected on most Arduino boards. // give it a name: int seg1 = 13; int seg2 = 12; int seg3 = 11; int seg4 = 10; int seg5 = 9; int seg6 = 8; int seg7 = 7; int Buzzer = 6; int moins = 5; int choix = 4; int launch= 3; // the setup routine runs once when you press reset: void setup() { // initialize the digital pin as an output. pinMode(seg1, OUTPUT); pinMode(seg2, OUTPUT); pinMode(seg3, OUTPUT); pinMode(seg4, OUTPUT); pinMode(seg5, OUTPUT); pinMode(seg6, OUTPUT); pinMode(seg7, OUTPUT); pinMode(Buzzer, OUTPUT); pinMode(moins, OUTPUT); pinMode(choix, INPUT); pinMode(launch, INPUT); } // the loop routine runs over and over again forever: void loop(){ int incr = 0; /* Mise en place de toute les variables*/ int temps = 0; int decr = 0; int aff = 0; int lancer = 0; int seconde = 1000; int minute = 60000; int heure = 3600000; while(lancer == 0){ /*Tant que le bouton pour lancer */ noTone(Buzzer); /*le programme s’exécute.*/ incr = digitalRead(choix); /* lit l'entrée définit comme choix*/ if (incr == HIGH) temps++; /*si c'est haut augmente le temps*/ if (temps > 9) temps = 0; /*si il dépasse 9, remise à 0 */ if (temps == 0){ /* affiche le 0 si le temps est à 0 */ digitalWrite(seg1, HIGH); /*allume le segment*/ digitalWrite(seg2, HIGH); /*allume le segment*/ digitalWrite(seg3, HIGH); /*allume le segment*/ digitalWrite(seg4, HIGH); /*allume le segment*/ digitalWrite(seg5, HIGH); /*allume le segment*/ digitalWrite(seg6, HIGH); /*allume le segment*/ digitalWrite(seg7, LOW); /*éteint le segment*/ } if (temps == 1){ /* affiche le 1 si le temps est à 1 */ digitalWrite(seg1, LOW); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, LOW); digitalWrite(seg5, LOW); digitalWrite(seg6, LOW); digitalWrite(seg7, LOW); } if (temps == 2){ /* affiche le 2 si le temps est à 2 */ digitalWrite(seg1, HIGH); digitalWrite(seg2, HIGH); digitalWrite(seg3, LOW); digitalWrite(seg4, HIGH); digitalWrite(seg5, HIGH); digitalWrite(seg6, LOW); digitalWrite(seg7, HIGH); } if (temps == 3){ /* affiche le 3 si le temps est à 3 */ digitalWrite(seg1, HIGH); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, HIGH); digitalWrite(seg5, LOW); digitalWrite(seg6, LOW); digitalWrite(seg7, HIGH); } if (temps == 4){ /* affiche le 4 si le temps est à 4 */ digitalWrite(seg1, LOW); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, LOW); digitalWrite(seg5, LOW); digitalWrite(seg6, HIGH); digitalWrite(seg7, HIGH); } if (temps == 5){ /* affiche le 5 si le temps est à 5 */ digitalWrite(seg1, HIGH); digitalWrite(seg2, LOW); digitalWrite(seg3, HIGH); digitalWrite(seg4, HIGH); digitalWrite(seg5, LOW); digitalWrite(seg6, HIGH); digitalWrite(seg7, HIGH); } if (temps == 6){ /* affiche le 6 si le temps est à 6 */ digitalWrite(seg1, HIGH); digitalWrite(seg2, LOW); digitalWrite(seg3, HIGH); digitalWrite(seg4, HIGH); digitalWrite(seg5, HIGH); digitalWrite(seg6, HIGH); digitalWrite(seg7, HIGH); } if (temps == 7){ /* affiche le 7 si le temps est à 7 */ digitalWrite(seg1, HIGH); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, LOW); digitalWrite(seg5, LOW); digitalWrite(seg6, LOW); digitalWrite(seg7, LOW); } if (temps == 8){ /* affiche le 8 si le temps est à 8 */ digitalWrite(seg1, HIGH); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, HIGH); digitalWrite(seg5, HIGH); digitalWrite(seg6, HIGH); digitalWrite(seg7, HIGH); } if (temps == 9){ /* affiche le 9 si le temps est à 9 */ digitalWrite(seg1, HIGH); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, HIGH); digitalWrite(seg5, LOW); digitalWrite(seg6, HIGH); digitalWrite(seg7, HIGH); } lancer = digitalRead(launch); /* lit l'entrée lancer*/ if (lancer == HIGH) lancer = 1; delay(1000); } if (lancer == 1){ /* si lancer est à 1*/ aff = temps; /* met le temps dans la variable d'affichage*/ temps = temps * seconde; /* adapte le temps à l’échelle */ } while((lancer == 1) && (temps != 0)){ temps = temps - seconde; /* décompte en milliseconde*/ decr += 1; if (decr == (seconde/1000)){ /*si 1 seconde de passée*/ aff -= 1; /*change le temps à afficher*/ decr =0; /* remise à zéro du compteur de décrémentation*/ delay(500); /* attend 0.5 secondes*/ tone(Buzzer, 2000); /*fait sonner le buzzer*/ delay(500); noTone(Buzzer); /* arrête le buzzer*/ } else{ delay(1000); } if (aff == 1){ digitalWrite(seg1, LOW); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, LOW); digitalWrite(seg5, LOW); digitalWrite(seg6, LOW); digitalWrite(seg7, LOW); } if (aff == 2){ digitalWrite(seg1, HIGH); digitalWrite(seg2, HIGH); digitalWrite(seg3, LOW); digitalWrite(seg4, HIGH); digitalWrite(seg5, HIGH); digitalWrite(seg6, LOW); digitalWrite(seg7, HIGH); } if (aff == 3){ digitalWrite(seg1, HIGH); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, HIGH); digitalWrite(seg5, LOW); digitalWrite(seg6, LOW); digitalWrite(seg7, HIGH); } if (aff == 4){ digitalWrite(seg1, LOW); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, LOW); digitalWrite(seg5, LOW); digitalWrite(seg6, HIGH); digitalWrite(seg7, HIGH); } if (aff == 5){ digitalWrite(seg1, HIGH); digitalWrite(seg2, LOW); digitalWrite(seg3, HIGH); digitalWrite(seg4, HIGH); digitalWrite(seg5, LOW); digitalWrite(seg6, HIGH); digitalWrite(seg7, HIGH); } if (aff == 6){ digitalWrite(seg1, HIGH); digitalWrite(seg2, LOW); digitalWrite(seg3, HIGH); digitalWrite(seg4, HIGH); digitalWrite(seg5, HIGH); digitalWrite(seg6, HIGH); digitalWrite(seg7, HIGH); } if (aff == 7){ digitalWrite(seg1, HIGH); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, LOW); digitalWrite(seg5, LOW); digitalWrite(seg6, LOW); digitalWrite(seg7, LOW); } if (aff == 8){ digitalWrite(seg1, HIGH); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, HIGH); digitalWrite(seg5, HIGH); digitalWrite(seg6, HIGH); digitalWrite(seg7, HIGH); } if (aff == 9){ digitalWrite(seg1, HIGH); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, HIGH); digitalWrite(seg5, LOW); digitalWrite(seg6, HIGH); digitalWrite(seg7, HIGH); } } while((lancer == 1)&&(temps == 0)){ digitalWrite(seg1, HIGH); digitalWrite(seg2, HIGH); digitalWrite(seg3, HIGH); digitalWrite(seg4, HIGH); digitalWrite(seg5, HIGH); digitalWrite(seg6, HIGH); digitalWrite(seg7, LOW); noTone(Buzzer); tone(Buzzer, 3500); incr = digitalRead(choix); if (incr == HIGH) lancer = 0; } }
Le temps est réglable, et chaque décrémentation d'unité de temps (seconde, minute ou heure) engendre un "Bip" sonore. Lorsque le compteur atteint 0, un "Bip" continu est alors généré jusqu'à l'appui sur le bouton de comptage.
Lors de l'appui sur le bon bouton poussoir, l'arduino reçoit un signal sur une de ses entrées, ce qui augmente le compte à rebours du minuteur. Lors de l'appui sur l'autre bouton poussoir, le signal reçu donne l'ordre à l'arduino de lancer ce compte à rebours.
À chaque unité de temps, le buzzer reçoit une fréquence pendant une demi seconde, ce qui génère un "bip" sonore. Lors de l'arrivée à 0 du minuteur, une fréquence différente est envoyée au buzzer jusqu'à l'appui sur le premier bouton poussoir. Après cet appui, le minuteur peut de nouveau être réglé puis relancé.
Peut on changer la base de temps sans modifier le code?
On a utilisé un buzzer dans cette expérience, mais quelles sont les différentes sortes de buzzer ?
Autres expériences avec le même concept, recherche sur internet
(indiquer les liens).
Cuisson, départ de course, réveil.
© Graphisme : Les Petits Débrouillards Grand Ouest (Patrice Guinche - Jessica Romero) | Développement web : Libre Informatique