Décompter puis compter

Bonjour,

J’aimerai savoir si il est possible de faire un décompte sur le moniteur série de 20min (20 : 00) jusqu’à 0min (00 : 00) puis d’enchaîner sur un comptage de 0min (00 : 00) jusqu’à 60min
Si oui comment faire??

Pour le décomptage de 20min à 0min j’y suis arrivé

 void loop ()
    {
      Serial.print(dizaine_min);
      Serial.print(unite_min);
      Serial.print(":");
      Serial.print(dizaine_sec);
      Serial.println(unite_sec);
       unite_sec -- ;
      delay(20);

      if (unite_sec < 0)
      {
        dizaine_sec --;
        unite_sec = 9;
      }
      
      if (dizaine_sec < 0)
      {
        unite_min -- ;
        dizaine_sec = 5 ;
        unite_sec = 9 ;
       }
       
      if (unite_min < 0 )
       {
        dizaine_min -- ;
        unite_min = 9 ;
       } 

       affichage_vert () ;
       }

Mon problème et d’enchaîner sur le comptage j’ai essayé ceci

  if (dizaine_min == 0 && unite_min == 0 && dizaine_sec == 0 && unite_sec == 0)
       {
         
       depart_comptage = 1 ; 

       } 
       
      if (depart_comptage == 1)
       {
        
        unite_sec ++  ;
       }

Le problème est que le programme décompte de 20:00 à 00:01 puis me renvoie 00:01 en boucle

J’ai ensuite essayé

      if (dizaine_min < 0 && unite_min < 0 && dizaine_sec < 0 && unite_sec < 0)
       {
         
       depart_comptage = 1 ; 

       } 
       
      if (depart_comptage == 1)
       {
        
        unite_sec ++  ;
       }

Le problème pour celui ci est que a 00:00 au lieu de commencer le comptage il part a -19:59 puis continue de partir dans les négatif

Je débute dans la programmation avec arduino j’aimerai si possible une petite explication de votre part histoire que je comprenne ou est mon erreur :sweat_smile:

J’espère avoir était clair dans les explications de mon problème
Merci d’avance :grin:

bonjour,
mets ton code entier

déjà pourquoi continu a mettre

if (dizaine_sec < 0)
      {
        unite_min -- ;
       dizaine_sec = 5 ;??????????????????????
        unite_sec = 9 ;???????????????????????
       }

Bin pour que à 00 seconde sa reparte a 59sec avec une minute de moins

Voila mon code en entier

#include <Wire.h>
#include "Adafruit_LEDBackpack.h"
#include "Adafruit_GFX.h"

Adafruit_BicolorMatrix matrix1 = Adafruit_BicolorMatrix();
Adafruit_BicolorMatrix matrix2 = Adafruit_BicolorMatrix();
Adafruit_BicolorMatrix matrix3 = Adafruit_BicolorMatrix();
Adafruit_BicolorMatrix matrix4 = Adafruit_BicolorMatrix();

    int unite_sec = 0;
    int dizaine_sec = 0;
    int unite_min = 0;
    int dizaine_min = 2;
    int depart_comptage = 0;
    
    const int GREEN = 6;
    const int RED = 5;


    void setup ()
    {
      Serial.begin(9600);
      matrix1.begin(0x70);  // Selectionner adresse
      matrix2.begin(0x71);  // Selectionner adresse
      matrix3.begin(0x72);  // Selectionner adresse
      matrix4.begin(0x77);  // Selectionner adresse
      
      pinMode(GREEN, OUTPUT);
      pinMode(RED, OUTPUT);
      
      }
      
  static const uint8_t PROGMEM
   chiffre_zero[] =
  { B00000000,
    B00111100,
    B01000010,
    B01000010,
    B01000010,
    B01000010,
    B01000010,
    B00111100, },
    
  chiffre_un[] =
  { B00000000,
    B00001000,
    B00011000,
    B00111000,
    B00001000,
    B00001000,
    B00001000,
    B00111110 },

  chiffre_deux[] =
  { B00000000,
    B00111100,
    B01000010,
    B00000100,
    B00011000,
    B00100000,
    B01000000,
    B01111110 },
    
  chiffre_trois[] =
  { B00000000,
    B00111110,
    B00000010,
    B00000010,
    B00011110,
    B00000010,
    B00000010,
    B00111110 },
  chiffre_quatre[] =
  { B00000000,
    B00001100,
    B00010100,
    B00100100,
    B01000100,
    B01111110,
    B00000100,
    B00000100 },
    
  chiffre_cinq[] =
  { B00000000,
    B01111110,
    B01000000,
    B01111100,
    B00000010,
    B00000010,
    B01000010,
    B00111100 },
    
  chiffre_six[] =
  { B00000000,
    B00111100,
    B01000000,
    B01000000,
    B01111100,
    B01000010,
    B01000010,
    B00111100},
    
  chiffre_sept[] =
  { B00000000,
    B01111110,
    B00000010,
    B00000100,
    B00001000,
    B00010000,
    B00010000,
    B00010000},
    
  chiffre_huit[] =
  { B00000000,
    B00111100,
    B01000010,
    B01000010,
    B01111110,
    B01000010,
    B01000010,
    B00111100 },
    
  chiffre_neuf[] =
  { B00000000,
    B00111100,
    B01000010,
    B01000010,
    B00111110,
    B00000010,
    B00000010,
    B01111100};                                    
    

    void loop ()
    {
      Serial.print(dizaine_min);
      Serial.print(unite_min);
      Serial.print(":");
      Serial.print(dizaine_sec);
      Serial.println(unite_sec);
       unite_sec -- ;
      delay(20);

      if (unite_sec < 0)
      {
        dizaine_sec --;
        unite_sec = 9;
      }
      
      if (dizaine_sec < 0)
      {
        unite_min -- ;
        dizaine_sec = 5 ;
        unite_sec = 9 ;
       }
       
      if (unite_min < 0 )
       {
        dizaine_min -- ;
        unite_min = 9 ;
       } 

       affichage_vert () ;
       
      if (dizaine_min == 0 && unite_min == 0 && dizaine_sec == 0 && unite_sec == 0)
       {
         
       depart_comptage = 1 ; 

       } 
       
      if (depart_comptage == 1)
       {
        
        unite_sec ++  ;
       } 
      
         
           
         
     }
    
/**************************/void affichage_vert()/********************************/
    {
      
        /*analogWrite(GREEN,100);
        delay(500);
        analogWrite(GREEN,0);
        delay(500);
        */
        switch (unite_sec) {
         
         case 0 :
         
         matrix4.setRotation(3);
         matrix4.clear();
         matrix4.drawBitmap(0, 0, chiffre_zero, 8, 8, LED_GREEN);
         matrix4.writeDisplay();
         break;
         etc...
         (il ne rentre pas en entier)

Une piste. Ton programme possède 2 modes. - un mode comptage - un mode décomptage

Donc, il a 2 modes de fonctionnement différents

Pour commencer tu crées une variable qui dit dans quel mode tu te trouves. Ensuite en fonction du mode courant tu fais incrémenter ou décrémenter ton compteur. Enfin en fonction du mode et de la valeur du compteur tu peux faire basculer d'un mode dans l'autre.

Désolé mon programme est un peu long, j’ai enlevé tout se qui ne se rapporte pas au comptage décomptage

Sa donne

    int unite_sec = 0;
    int dizaine_sec = 0;
    int unite_min = 0;
    int dizaine_min = 2;
    int depart_comptage = 0;

void setup() {
  
 Serial.begin(9600);
 
}

void loop() {
  
      Serial.print(dizaine_min);
      Serial.print(unite_min);
      Serial.print(":");
      Serial.print(dizaine_sec);
      Serial.println(unite_sec);
       unite_sec -- ;
      delay(20);

      if (unite_sec < 0)
      {
        dizaine_sec --;
        unite_sec = 9;
      }
      
      if (dizaine_sec < 0)
      {
        unite_min -- ;
        dizaine_sec = 5 ;
        unite_sec = 9 ;
       }
       
      if (unite_min < 0 )
       {
        dizaine_min -- ;
        unite_min = 9 ;
       } 
       
      if (dizaine_min == 0 && unite_min == 0 && dizaine_sec == 0 && unite_sec == 0)
       {
         
       depart_comptage = 1 ; 

       } 
       
      if (depart_comptage == 1)
       {
        
        unite_sec ++  ;
       } 
}

fdufnews: Une piste. Ton programme possède 2 modes. - un mode comptage - un mode décomptage

Donc, il a 2 modes de fonctionnement différents

Pour commencer tu crées une variable qui dit dans quel mode tu te trouves. Ensuite en fonction du mode courant tu fais incrémenter ou décrémenter ton compteur. Enfin en fonction du mode et de la valeur du compteur tu peux faire basculer d'un mode dans l'autre.

Ok je vais essayé, je posterai un quand j'y serai arrivé

Merci