Arduino Forum

International => Français => Topic started by: samuelkoh_lanta on Nov 24, 2018, 11:46 am

Title: chronomètre Arduino
Post by: samuelkoh_lanta on Nov 24, 2018, 11:46 am
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:

Code: [Select]

#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???
Title: Re: besoin d'aide!!!
Post by: J-M-L on Nov 24, 2018, 12:11 pm
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 (http://forum.arduino.cc/index.php?topic=500683.0)
Title: Re: besoin d'aide!!!
Post by: lesept on Nov 24, 2018, 01:23 pm
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
Title: Re: besoin d'aide!!!
Post by: al1fch on Nov 24, 2018, 01:39 pm
Quote
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)
Title: Re: besoin d'aide!!!
Post by: samuelkoh_lanta on Nov 24, 2018, 01:56 pm
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.
Title: Re: chronomètre Arduino
Post by: J-M-L on Nov 24, 2018, 02:09 pm
maintenant montrez nous que vous savez mettre du code entre les balises de code et on pourra avancer :)

Quote
mais je n'arrive pas a faire un compte a rebours a partir de ce nombre.
Dans votre code
Code: [Select]
for (int i=10 ; i>=0 ; i--){.. quel est le chiffre de départ ?

Dans votre code tout en haut, quel est le compteur ?
Title: Re: chronomètre Arduino
Post by: samuelkoh_lanta on Nov 24, 2018, 02:26 pm
 Dans ce code

Code: [Select]
for (int i=10 ; i>=0 ; i--)

mon chiffre de départ est 10.


Et que voulez vous dire par "quel est le compteur"?
Title: Re: chronomètre Arduino
Post by: J-M-L on Nov 24, 2018, 02:30 pm
Et que voulez vous dire par "quel est le compteur"?
ce que vous incrémentez ou décrémentez...
Title: Re: chronomètre Arduino
Post by: samuelkoh_lanta on Nov 24, 2018, 02:35 pm
ç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
Title: Re: chronomètre Arduino
Post by: J-M-L on Nov 24, 2018, 02:41 pm
oui c'est i, donc au lieu de 10.... et bien sûr il faudra une variable dans votre boucle qui sera différente
Title: Re: chronomètre Arduino
Post by: samuelkoh_lanta on Nov 24, 2018, 02:47 pm
Si je fait ça:

 
Code: [Select]
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?
Title: Re: chronomètre Arduino
Post by: jpbbricole on Nov 24, 2018, 06:37 pm
Bonsoir samuelkoh_lanta
Code: [Select]
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
Title: Re: chronomètre Arduino
Post by: samuelkoh_lanta on Nov 24, 2018, 06:42 pm
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.
Title: Re: chronomètre Arduino
Post by: lesept on Nov 24, 2018, 06:44 pm
Alors change le nom de la variable de ta boucle
 for int j=i; etc...
Title: Re: chronomètre Arduino
Post by: samuelkoh_lanta on Nov 24, 2018, 06:49 pm
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...
Title: Re: chronomètre Arduino
Post by: J-M-L on Nov 24, 2018, 06:52 pm
c'est ce que je voulais vous faire trouver en disant
Quote
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!!
Title: Re: chronomètre Arduino
Post by: lesept on Nov 24, 2018, 06:53 pm
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
Title: Re: chronomètre Arduino
Post by: jpbbricole on Nov 24, 2018, 07:57 pm
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
Title: Re: chronomètre Arduino
Post by: kamill on Nov 24, 2018, 07:59 pm
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)
Code: [Select]
       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
Title: Re: chronomètre Arduino
Post by: jpbbricole on Nov 24, 2018, 08:05 pm
Bonjour,

La première partie du for est facultative (les autres aussi d'ailleurs)
Code: [Select]
       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
Title: Re: chronomètre Arduino
Post by: J-M-L on Nov 24, 2018, 08:19 pm
La première partie du for est facultative (les autres aussi d'ailleurs)
Code: [Select]
       for ( ; i>=0 ; i--){
dans ce cas autant faire un
Code: [Select]
while(i-- >= 0) {...} et oui ça modifie la variable globale. donc dépend de ce qu'on veut faire (et elle ne finira pas à 0 mais à -1)
Title: Re: chronomètre Arduino
Post by: jpbbricole on Nov 24, 2018, 09:42 pm
Bonsoir samuelkoh_lanta

Petite question de curieux, avec quoi as-tu écrit ton application Android ?

Cordialement
jpbbricole
Title: Re: chronomètre Arduino
Post by: kamill on Nov 24, 2018, 09:54 pm
dans ce cas autant faire un
Code: [Select]
while(i-- >= 0) {...} et oui ça modifie la variable globale. donc dépend de ce qu'on veut faire (et elle ne finira pas à 0 mais à -1)
Ce n'est pas la même chose, on entre dans la boucle avec une valeur diminuée de 1.
Title: Re: chronomètre Arduino
Post by: J-M-L on Nov 24, 2018, 10:07 pm
C'est vrai ... un
Code: [Select]
do { ... } while(...); alors :)