RESOLU Compte a rebours avec boutons set et start?

Bonjour tlm,

je vais tenter d'etre le plus explicite possible
but final : minuteur a rebours de 15 a 90 secondes, le choix de la duree avec un bouton SET de 15 en 15 secondes, lorsque la duree désirée est affichée demarre avec bouton START, affichage sur un tm1637, quand le temps est écoulé active un buzzer
croquis de depart
pour digispark tiny85
un seul temps interne au croquis pas de bouton start, set, commence a decompter au reset

modifié pour UNO et uniquement les secondes et bouton start ajouté "while butt_sart" tout est bloqué tant qu'on n'appuye pas sur start, c'est juste comme si start était reset...

il faudrait modifier la méthode start et ajouter la méthode SET

#include "TM1637.h" 

/*
 
 * il demarre a la mise sous tension en affichant 30 
 * quand il arrive a zero le buzzer actif vibre 1 seconde s'éteint 1/2 sec 5 fois de suite
 * j'aimerais ajouter au moment où on alimente le uno ou au reset
 * un bouton set qui augmente la duree de 15 secondes a chaque appui/relachement
 * 30 45 60 75 90 si on dépasse 90 revient a 15, la valeur de départ au reset étant 30 
 * parce que ce sera la valeur le plus couramment utilisée
 */

#define CLK 4
#define DIO 5
#define Pulse 13 // Alarm Trigger Output buzzer
#define butt_set 8
#define butt_start 9

int membutset=1, membutstart=1; // pour divers essais
int etatButt_set,etatButt_start; // variables etat des boutons
int interv=15; // valeur intervalle a ajouter
int timer_seconds=30; // Display seconds 

// Variables used to store individual numbers 
int firstnum=0; 
int secondnum=0; 
int thirdnum=0; 
int fournum=0; 
TM1637 tm1637(CLK,DIO); // Create instance of the Display 

void affichetemps() {
   // fonction affichage
   if (timer_seconds > 9) { 
      thirdnum = timer_seconds/10%10; 
      fournum = timer_seconds%10; 
   } 
   else { 
      thirdnum = 0; 
      fournum = timer_seconds; 
   } 
   // Show countdown on 4 digit 7 segment display 
   tm1637.clearDisplay(); // Clear display 

   if (timer_seconds > 9) { 
      tm1637.display(2,thirdnum); 
   } 
   tm1637.display(3,fournum); 

}

void setbutton() {
 
  etatButt_set = digitalRead(butt_set);
  if((etatButt_set != membutset) && (etatButt_set == LOW))
  { //on fait quoi ?
    timer_seconds=timer_seconds+interv;
  }
  membutset= etatButt_set;
  affichetemps();
  // quand la valeur désirée est affichée on attend appui sur bouton start
  depart(); // fonction bloquant
}

void depart() {
  while(digitalRead(butt_start)); // evidemment tout est bloqué tant qu'on n'appuye pas sur start
   delay(100); // Delay 
   
}

void setup(){ 

   pinMode(butt_set, INPUT);  // pull up externe
   pinMode(butt_start, INPUT);
   pinMode(Pulse, OUTPUT); 
   digitalWrite(Pulse, LOW); 
   tm1637.init(); // Display Reset 
   tm1637.set(BRIGHT_TYPICAL); // Brightness Level 
   // BRIGHT_DARKEST = 0,BRIGHTEST = 7 BRIGHT_TYPICAL = 2;
   tm1637.point(POINT_ON); // Centre "colons" ON 
   //depart(); // attend appui sur start ou set 
   setbutton();  // affiche le temps a l'allumage
} 
void loop() { 
   // Check if timer is elapsed 
   // buzzer  on/off 5fois
   if (timer_seconds == 0) { 
     for (int i=0; i <= 5; i++) // on effectue 5 fois ok
     {
      tm1637.clearDisplay(); // Clear display 
      tm1637.display(0,0); 
      tm1637.display(1,0); 
      tm1637.display(2,0); 
      tm1637.display(3,0); 
      digitalWrite(Pulse, HIGH); // Alarm Trigger ON 
      delay(1000);  // Wait
      
      tm1637.clearDisplay(); 
      digitalWrite(Pulse, LOW); // Alarm Trigger OFF
      
      delay(500); // Wait
     }
        
        timer_seconds = 30; //  
        affichetemps();
        depart();
        //
        //setbutton();
         } 
  
   
   affichetemps();
   // Decrease seconds 
   // c'est la partie qui doit démarrer et se repeter
   //apres appui/relachement bouton start
   // jusque timer_seconds arrive a zero
   timer_seconds=timer_seconds-1; 
   delay(1000); // Delay of 1 second 
  
}
// END

j'en suis donc : il affiche 30 au reset, appui sur START il decompte et fait clignoter l'afficheur sur 00:00 et active le buzzer 5 fois puis réaffiche 30 et attend appui sur start, comme je disais la fonction "depart" doit etre changée pour aussi tenir compte d'un appui sur le bouton SET : les 2 boutons seraient scrutés (polling) au départ du loop, pas besoin d'interruption pendant le décomptage

je sais qu'un minuteur de cuisine a 2,50 euros avec 1 pile AAA (fournie) le fait sauf que la mise a la durée désiré se fait seconde par seconde ou minutes par minutes et que le buzzer résonne tant qu'on a pas appuyé sur stop

Merci pour vos idées d'amélioration

resolu avec la biblio simplebouton, grand merci à Bricoleau

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.