[Demande d'aide] Gérer afficheur 7segments 4 digits avec clavier

J'ai pas d'afficheur 7 segments sous la main (enfin, la flemme de mettre tous les fils :slight_smile: ) 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é :slight_smile: )

  • 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