J'ai pas d'afficheur 7 segments sous la main (enfin, la flemme de mettre tous les fils ) mais voici un petit programme qui devrait vous aider
#include <Keypad.h>
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the symbols on the buttons of the keypads
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
byte rowPins[ROWS] = { 34, 36, 38, 40 };
byte colPins[COLS] = {41, 39, 37, 35};
Keypad membraneKeypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS);
boolean affichageModifie;
unsigned long duree = 0;
unsigned long chrono;
enum {REPOS, CUISSON} etat;
void setup() {
Serial.begin(115200);
etat = REPOS;
}
void lireClavier()
{
affichageModifie = false;
char entry = membraneKeypad.getKey();
if (entry != NO_KEY) {
// une touche du clavier a été appuyée
if (etat != REPOS) { // si on était en train de décompter on arrête
etat = REPOS;
duree = 0; // et on remet à 0
}
if ((entry >= '0') && (entry <= '9')) { // si c'est un chiffre
affichageModifie = true;
duree = 10 * duree + entry - '0';
if (duree > 9999) duree -= (duree / 10000ul) * 10000ul; // on a dépassé les 4 chiffres, on conserve les 4 derniers
} else if (entry == 'D') { // on déclenche le compte à rebours
etat = CUISSON;
chrono = millis();
} else { // N'importe quelle autre touche efface l'écran et remet à 0
affichageModifie = true;
duree = 0;
}
}
}
void loop() {
lireClavier(); // gestion des évènements
if (etat == CUISSON) {
if (millis() - chrono >= 1000) {
affichageModifie = true;
chrono += 1000ul;
duree--;
if (duree == 0) {
etat = REPOS;
Serial.println(F("C'EST CUIT - DING DONG")); // si vous avez un buzzer, faites le sonner au lieu de cette ligne
}
}
}
if (affichageModifie) {
Serial.println(duree); // c'est ici qu'il faut demander à votre afficheur 7 segments d'afficher
affichageModifie = false;
}
}
--> Adaptez les N° de pin pour le clavier à ce que vous avez
Compilez et charger le code dans votre arduino. Ouvrez la console série à 115200 bauds
le clavier maintenant vous sert à rentrer un nombre à 4 chiffres (si vous en tapez plus il ne conserve que les 4 derniers entrés) si vous tapez autre chose qu'un chiffre ou D, ça remet à 0 et quand vous appuyez sur D, le Décompte commence.
Arrivé à 0 l'affichage vous le dira. Si vous appuyez sur le clavier en cours de décompte, ça arrête et remet à 0
--> ce qu'il vous reste à faire:
-
changez le
Serial.println(duree);
par une demande d'affichage sur votre afficheur 7 segments (je crois que la librairie sait directement afficher un nombre donc ce ne doit pas être très compliqué ) -
ajouter un buzzer à votre montage et utilisez
tone()
pour faire un bruit au lieu d'afficher C'EST CUIT - DING DONG -
le nombre affiché n'est pas tout à fait comme un vrai micro-onde, ce n'est pas minute et secondes, c'est juste des secondes. je vous laisse modifier le code si vous souhaitez le gérer de cette façon
voilà - j'ai tapé cela un peu au kilomètre mais ça devrait fonctionner