problème minuteur arduino décomptage

Bonjour,

Je suis en train de faire un minuteur qui utilise millis() afin que cela ne bloque pas la carte arduino et que je puisse faire d'autres choses en même temps.
J'aimerais le faire en décomptant, par exemple partir de 10 secondes et une fois arrivé a 0, afficher "stop".
Mais je n'arrive pas a faire décompter ce programme
Auriez-vous une idée comment faire ?
Ci-joint le code

  secondes = millis() / 1000; //convect millisecondes en secondes
  minutes = secondes / 60; //convertir secondes en minutes
  secondes = secondes - (minutes * 60);

  lcd.setCursor(14, 1);
  lcd.print(secondes);
  lcd.setCursor(11, 1);
  lcd.print(minutes);
  lcd.setCursor(13, 1);
  lcd.print(":");

  int totaltemps;




  totaltemps = minutes * 60 + secondes;
  if (totaltemps >= 10) //ici si superieur à 10secondes afficher stop
  {
    Serial.print("stop");
  }

Bonne journée

c'est pas le même sujet que vous aviez commencé ici ??

je vous avais suggéré de lire les tutos d'eskimon et en particulier celui qui concerne "introduire le temps".. l'avez vous fait ? on n'en voit pas l'application ici

ne postez pas des bouts de code, ça nous oblige à faire des hypothèses sur le type des variables, leur initialization, les effets de bords que vous pourriez avoir par ailleurs etc...

postez un truc qui compile...

Ci joint le code complet
excusez moi
c’est vrai que cela sera plus simple

const int Pushbutton = 4; //bouton-poussoir connecté à la broche D4
const int laser = 3; //LED connectée à la broche D7
int value = 0;     // Variable pour lire l'état du bouton-poussoir

long minutes = 0;
long secondes = 0;










int sensorPin = A0;
int sensorPin1 = A1;
int sensorPin2 = A2;
int sensorPin3 = A3;
int sensorPin4 = A4;
int sensorPin5 = A5;
int sensorPin6 = A6;
int sensorPin7 = A7;

int sensorValue = 0;
int a = 30;
int toto = 0;
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);





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


  pinMode (laser, OUTPUT);
  pinMode (Pushbutton, INPUT);

  pinMode(sensorPin, INPUT);
  pinMode(sensorPin1, INPUT);
  pinMode(sensorPin2, INPUT);
  pinMode(sensorPin3, INPUT);
  pinMode(sensorPin4, INPUT);
  pinMode(sensorPin5, INPUT);
  pinMode(sensorPin6, INPUT);
  pinMode(sensorPin7, INPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(2, OUTPUT); /////vibreur




  lcd.begin(16, 2);

  lcd.print("tirs restants");
  lcd.setCursor(0, 1);
  lcd.print(a);




  lcd.setCursor(11, 1);
  lcd.print("00");
}


void teset() {
  lcd.clear();
  lcd.setCursor(1, 0);
  lcd.print("***** Fini *****");
  lcd.setCursor(12, 1);
  lcd.print(toto);
  lcd.setCursor(0, 1);
  lcd.print("nb touche:");
  delay(100000);
}

void loop() {



  secondes = millis()/ 1000; //convect millisecondes en secondes
  minutes = secondes / 60; //convertir secondes en minutes
  secondes = secondes - (minutes * 60);

  lcd.setCursor(14, 1);
  lcd.print(secondes);
  lcd.setCursor(11, 1);
  lcd.print(minutes);
  lcd.setCursor(13, 1);
  lcd.print(":");

  int totaltemps;




  totaltemps = minutes * 60 + secondes;
  if (totaltemps <= 0)
  {
   
  }







  ///////////BOOUTON//////////////

  value = digitalRead(Pushbutton); //Lire l'état du bouton-poussoir
  if (value == LOW) //Si le bouton est appuyé
  {
    delay(10); //10 milliseconds anti-rebond
    if (value == LOW) //vérifier encore so le bouton est toujours appuyé
    {
      digitalWrite(laser, HIGH); //LED est allumée
      delay(400); //pause de 5 Second



      a = a - 1;
      lcd.setCursor(0, 1);
      lcd.print("        ");
      lcd.setCursor(0, 1);
      lcd.print(a);



      digitalWrite(laser, LOW); //LED est éteinte

    }
  }


  //////

  if (a == 0) {
    lcd.clear();
    lcd.print("**  recharge  **");
    digitalWrite(6, HIGH);
    digitalWrite(5, HIGH);
    delay(400);
    digitalWrite(6, LOW);
    delay(400);
    digitalWrite(6, HIGH);
    delay(400);
    digitalWrite(6, LOW);
    delay(400);
    digitalWrite(6, HIGH);
    delay(400);
    digitalWrite(5, HIGH);
    delay(400);
    digitalWrite(6, LOW);
    delay(400);
    digitalWrite(5, HIGH);
    delay(400);
    digitalWrite(6, LOW);
    delay(400);
    digitalWrite(5, HIGH);
    delay(400);
    digitalWrite(6, LOW);
    delay(400);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    lcd.clear();
    a = 20;
    lcd.print("tirs restants");
    lcd.setCursor(0, 1);
    lcd.print(a);

  }


  ////////////compteur/////////////







  if (analogRead(sensorPin) >= 90 || analogRead(sensorPin1) >= 90 || analogRead(sensorPin2) >= 90 || analogRead(sensorPin3) >= 90 || analogRead(sensorPin4) >= 90 || analogRead(sensorPin5) >= 90 || analogRead(sensorPin6) >= 90 )
  {
    delay(20);

    value = HIGH;
    digitalWrite(5, HIGH);
    digitalWrite(6, HIGH);
    digitalWrite(2, HIGH);
    toto = toto + 1;
    Serial.print(toto);






    lcd.setCursor(0, 0);
    lcd.print("on vous a tuer !");
    lcd.setCursor(0, 1);
    lcd.print(" 7");
    delay(1000);
    digitalWrite(2, LOW);

    lcd.print("                 ");


    lcd.setCursor(0, 0);
    lcd.print("on vous a tuer !");
    lcd.setCursor(0, 1);
    lcd.print(" 6");
    delay(1000);
    digitalWrite(2, HIGH);

    lcd.print("                 ");




    lcd.setCursor(0, 0);
    lcd.print("on vous a tuer !");
    lcd.setCursor(0, 1);
    lcd.print(" 5");
    delay(1000);
    digitalWrite(2, LOW);

    lcd.print("                 ");

    lcd.setCursor(0, 0);
    lcd.print("on vous a tuer !");
    lcd.setCursor(0, 1);
    lcd.print(" 4");
    delay(1000);
    digitalWrite(2, HIGH);
    lcd.print("                 ");

    lcd.setCursor(0, 0);
    lcd.print("on vous a tuer !");
    lcd.setCursor(0, 1);
    lcd.print(" 3");
    delay(1000);
    digitalWrite(2, LOW);
    lcd.print("                 ");

    lcd.setCursor(0, 0);
    lcd.print("on vous a tuer !");
    lcd.setCursor(0, 1);
    lcd.print(" 2");
    delay(1000);
    digitalWrite(2, HIGH);
    lcd.print("                 ");

    lcd.setCursor(0, 0);
    lcd.print("on vous a tuer !");
    lcd.setCursor(0, 1);
    lcd.print(" 1");
    delay(1000);
    lcd.clear();


    digitalWrite(2, HIGH);

    delay(100);
    digitalWrite(2, LOW);
    delay(100);
    digitalWrite(2, HIGH);
    delay(100);
    digitalWrite(2, LOW);
    delay(100);
    digitalWrite(2, HIGH);
    delay(100);
    digitalWrite(5, LOW);
    digitalWrite(6, LOW);
    digitalWrite(2, LOW);

    lcd.print("tirs restants");
    lcd.setCursor(0, 1);
    lcd.print(a);

  }









}

quand vous cherchez à explorer une solution, prenez l’habitude de vous concentrer uniquement sur ce point. faites un nouveau projet qui prend en compte que ce que vous cherchez à résoudre. Une fois bien maitrisé, vous rajoutez vos éléments petit à petit pour intégrer au code final.

Voici un code de base

uint8_t h, m, s;

void afficheSeconde()
{
  Serial.print(F("S: "));
  Serial.println(s);
}

void afficheMinute()
{
  Serial.print(F("M: "));
  Serial.println(m);
}

void afficheHeure()
{
  Serial.print(F("H: "));
  Serial.println(h);
}


void setup() {
  Serial.begin(115200);
  h = m = s = 0;
}

void miseAJourChrono()
{
  static unsigned long topChrono = millis();
  const unsigned long periodeMiseAJour = 1000ul; // toutes les secondes
  // est-ce le moment de faire une mise à jour ?
  if (millis() - topChrono >= periodeMiseAJour) {
    if (++s > 59) {
      s = 0;
      afficheSeconde();
      if (++m > 59) {
        m = 0;
        afficheMinute();
        if (++h > 23) h = 0;
        afficheHeure();
      } else afficheMinute();
    } else afficheSeconde();

    topChrono += periodeMiseAJour;
  }
}

void loop() {
  miseAJourChrono(); // non bloquant

  // ici vous pouvez faire autre chose
  // .....
}

je vous laisse le lire et comprendre.

Vous voyez qu’il maintient 3 variables, h, m et s qui seront l’heure, la minute et la seconde et qu’il appelle une fonction adaptée à chaque fois qu’une des ces variables change → comme cela on peut ne mettre à jour qu’une partie de l’affichage.

Prochaine étape - intégrez votre LCD uniquement dans ce code et affichez l’heure qui défile.

Prochaine étape - inversez la logique et au lieu d’incrémenter l’heure, décrémentez et testez quand on arrive à 0…