Il est situé dans le void loop().
Mais le problème c'est que lorsque j'arrive a 60 seconde il m'affiche 0 pendant 1 seconde puis 61 après 62 et ainsi de suite.
Je voulais savoir comment faire pour corriger ce problème.
PS: J'aimerai ne pas utiliser delay(1000) car mon projet et de faire l'interface visuelle d'une box tv et donc ca ralentirez la télécommande.
PS2: Voici mon projet, il n'est pas fini mais ca vous permettra de mieux voir. Circuit design décodeur TV | Tinkercad
on a besoin de savoir comment sont définies vos variables par exemple et voir le reste du code
PS/ ne prenez pas l'habitude d'écrire 00 pour 0, la notation d'un entier qui commence par 0 veut dire que vous êtes en base 8 pour le nombre. par exemple 024 ce n'est pas 24 mais 20 (2*8+4) en décimal. Pour 00 ce n'est pas grave, mais il faut le savoir.
Tout le monde ne va pas s'amuser à cliquer les liens et créer un compte tinkercad pour vous aider... si vous voulez des réponses pensez à simplifier la vie des bénévoles qui vous répondent...
vos maths ne sont pas corrects, au bout de 62 secondes, millis vaut 62000 et donc quand vous divisez par 1000 ça fait 62.... --> il faut un modulo 60
et bien sûr votre autre souci c'est qu'il y a plein de délais donc vous risquez de rater des secondes, donc vaut mieux faire les tests avec >= mais dans ce cas le modulo va mettre le bazar...
Si vous réglez cela (je vous laissez réfléchir à comment incrémenter les secondes), vous pouvez grouper les tests
if (seconde >= 60) {
seconde = 0;
if (++minute >= 60) {
minute = 0;
if (++heure >= 24) {
heure = 0;
}
}
}
j'ai essayer en mettant seconde = millis()/1000 % 60; à la place de seconde = millis()/1000 mais maintenant le problème c'est que les minutes n'augmente pas.
seconde = millis()/1000 % 60;
if (seconde >= 60) {
seconde = 0;
minute++;
if (minute >= 60) {
minute = 0;
heure++;
if (heure >= 24) {
heure = 0;
}
}
}
J'ai aussi essayer en faisant
seconde = millis()/1000 % 60;
if (seconde >= 60) {
seconde = 0;
if (++minute >= 60) {
minute = 0;
if (++heure >= 24) {
heure = 0;
}
}
}
Mais il y a le même problème. Et la je ne voit pas comment faire car si je met 60.5 au lieu de 60 il me dit que ca marche pas.
pas surprenant puisque le modulo retourne une valeur entre 0 et 59. Donc, c'est plutôt le passage à 0 de la seconde qui devrait incrémenter les minutes.
vu les délais de votre code, il vaudrait mieux calculer pour les secondes le ∆t (la différence de temps) entre la dernière consultation et le moment du test. il se peut que vous ayez à ajouter 2 secondes éventuellement
Sinon une solution simple c'est de convertir millis() directement en heure/min/seconde depuis l'allumage de l'Arduino.
Avec le delay(1000) ça ne va pas être très réactif.
Il vaudrait mieux utiliser millis() pour rythmer l'exécution et par exemple passer dans la routine de traitement du temps toutes les 100 ou 200ms et le reste du temps suivre l'état des boutons.