chronomètre Arduino

Je voudrai fabriquer un chronomètre bluetooth Arduino, mon application Android a 3 boutons principales, +, pour ajouter 1 au compteur, - pour enlever 1 au compteur et FIRE!!! pour lancer le décompte.
Les deux premiers boutons marchent, j'arrive a ajouter ou a enlever 1, mais je n'arrive pas a lancer le compte a rebours. J'utilise une carte Arduino un, un afficheur 7 segments TM1637 et un module bluetooth HC-06.
Voici mon code:

#include <SoftwareSerial.h>

#include <Arduino.h>

#include <TM1637Display.h>

#define CLK 2

#define DIO 3

SoftwareSerial HC06(11,10);

String messageRecu;

int i=0;

TM1637Display display(CLK, DIO);


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

void loop()
{display.setBrightness(0x0f);
display.showNumberDec(i);
   while(HC06.available())
   {
     delay(3);
     char c = HC06.read();
     messageRecu += c;
   }
   if (messageRecu.length() >0)
   {
     Serial.println(messageRecu);

     
     if (messageRecu == "-")     
       {display.showNumberDec(i--); }

       
     if (messageRecu == "+")
       {display.showNumberDec(i++); }

  
     if(messageRecu == "FIRE!!!"){ 
             
}
messageRecu="";
   
}
}

Pouvais vous m'aider???

Savez vous écrire un code qui effectue le compte à rebours (pour le moment sans le BT) ?

sinon votre code de réception sur le port série n'est pas top, il peut conduire à des réceptions erratiques. Si vous voulez comprendre comment bien écouter le port série vous pouvez jeter un oeil à mon petit tuto sur le sujet

Pense aussi à lire les messages épinglés en haut du forum français, tu apprendras à poster un code. Ensuite, édite ton message et corrige la manière de poster ton code (les balises ad-hoc). Merci

Pense aussi à lire les messages épinglés en haut du forum français, tu apprendras à poster un code. Ensuite, édite ton message et corrige la manière de poster ton code (les balises ad-hoc). Merci

+1 .... et tu pourras auss en profiter éditer le titre du message ('titre à la con' selon les termes du modérateur)

Merci pour ces réponses.
Je sais déjà faire un compte a rebours, en utilisant :

for (int i=10 ; i>=0 ; i--){
display.showNumberDec(i);
delay(1000);
}

Au départ, mon afficheur 7 segments affiche 0, j'arrive a le mettre le nombre de seconde voulu, mais je n'arrive pas a faire un compte a rebours a partir de ce nombre.

maintenant montrez nous que vous savez mettre du code entre les balises de code et on pourra avancer :slight_smile:

mais je n'arrive pas a faire un compte a rebours a partir de ce nombre.

Dans votre codefor (int i=10 ; i>=0 ; i--){.. quel est le chiffre de départ ?

Dans votre code tout en haut, quel est le compteur ?

Dans ce code

for (int i=10 ; i>=0 ; i--)

mon chiffre de départ est 10.

Et que voulez vous dire par "quel est le compteur"?

samuelkoh_lanta:
Et que voulez vous dire par "quel est le compteur"?

ce que vous incrémentez ou décrémentez...

ça doit être i, et je veux décrémenter de 1 toute les secondes la valeur que aura i lorsque j'appuirer sur FIRE

oui c'est i, donc au lieu de 10.... et bien sûr il faudra une variable dans votre boucle qui sera différente

Si je fait ça:

if(messageRecu == "FIRE!!!"){ 
         for (int i=i ; i>=0 ; i--){
         display.showNumberDec(i);
         delay(1000);
}     
}

quand je clic sur FIRE l'afficheur affiche directement 0.
Et a quoi penser vous quand vous parlez d'une variable différente?

Bonsoir samuelkoh_lanta

samuelkoh_lanta:

if(messageRecu == "FIRE!!!"){ 

for (int i=i ; i>=0 ; i--){

A ce niveau int i=i, i ne vaut rien, essaie de mettre ça int i=10 et tu comprendra.

La confusion provient du fait que tu as 2 variables qui ont le même nom, comme, dans ta boucle de décompte tu reprends, avec int i, ce nom et de ce fait ta boucle ne "voit" plus l'autre, en dehors de ton décompte change ce i en autre chose.

int i=0;

Cordialement
jpbbricole

Le problème c'est que je ne veux pas que i=10, je vois bien qu'en faisant ceci, mon afficheur affiche directement 10, or je veux qu'il commence le compte a rebours avec la valeur "actuelle" de i.

Alors change le nom de la variable de ta boucle
for int j=i; etc...

Merci beaucoup de cette réponse... Ca marche enfin, je me sent un peu bête de ne pas y avoir penser...Ce n'étais pourtant pas bien compliquer...

c'est ce que je voulais vous faire trouver en disant

et bien sûr il faudra une variable dans votre boucle qui sera différente

On a tous commencé avec des erreurs de ce genre, donc faut pas s'en faire. continuez!!

Prends l'habitude de donner des noms explicites à tes variables, même si ces noms peuvent devenir longs. C'est plus facile de programmer ainsi.

'j' peut devenir : compteurBoucle
'i' peut devenir : valeurCourante

lesept:
Prends l'habitude de donner des noms explicites à tes variables, même si ces noms peuvent devenir longs. C'est plus facile de programmer ainsi.

'j' peut devenir : compteurBoucle
'i' peut devenir : valeurCourante

Alors 100% avec lesept!

Des noms longs et explicites, premièrement ne "mangent pas de pain" (pas d'octets mémoire gaspillés dans l'Arduino) et souvent, s'ils sont bien choisis, évitent de mettre des remarques pour dire quoi.

Dans le cas de la boucle for (int i, il est usuel d'utiliser de petits nom car on a ces variables "sous le nez", mais dès que la variable devient globale.....

Bonne programmation et bien du plaisir!
Cordialement
jpbbricole

samuelkoh_lanta:
Le problème c'est que je ne veux pas que i=10, je vois bien qu'en faisant ceci, mon afficheur affiche directement 10, or je veux qu'il commence le compte a rebours avec la valeur "actuelle" de i.

Bonjour,

La première partie du for est facultative (les autres aussi d'ailleurs)

       for ( ; i>=0 ; i--){

va partir à partir de la valeur courante de i.
Bien sur il faut que i soit défini hors d'un for

kamill:
Bonjour,

La première partie du for est facultative (les autres aussi d'ailleurs)

       for ( ; i>=0 ; i--){

va partir à partir de la valeur courante de i.
Bien sur il faut que i soit défini hors d'un for

Oui, c'est excellent, mais pour la lecture du programme, surtout pour un débutant, c'est pas pratique.
Surtout, ça modifie la valeur de la variable globale, c'est pas forcément le but, s'il en a besoin ailleurs.

Cordialement
jpbbricole