Je n'arrive pas à solutionner mon problème... Mon code compte le passage d'objets devant une cellule (photoresistance éclairé par un laser), aucun soucis de ce coté là, l'incrémentation fonctionne parfaitement grâce à la commande compteur++.
Là ou tout ce complique, c'est que j'aimerais compter le nombre de déclenchement sur une période de temps (on va dire 15 secondes) afin de faire un calcul sur une minute puis sur une heure.
Le soucis est qu'il faut que le calcul soit non bloquant pour l'incrémentation du compteur...
Comment placer un code qui me permet de calculer le nombre de déclenchement sur une période de 15 secondes ?
bonjour,
tu peux faire un timer par exemple
temps_desire = 15s
timedebut=millis();
ton compteur de passage
timecurrent=millis();
si timecurrent-timedebut>15s (faire le calcul en millisecondes
on coupe le compteur
Alors j'y arrive petit à petit, la vitesse s'affiche bien mais une fois affiché je dois d'une part éviter que ça clignote à chaque coupure du faisceau, d'une part et d'autre part il faudrait refaire le calcul en boucle mais sachant qu'on ne peut pas remettre officiellement le compteur à 0 (sinon je perds toutes les coupures faisceau).
voilà mon code, les déclarations ont été faites dans le Setup :
pour le compteur, j'ai créé un compteur2, on peut donc le réinitialiser comme on veut. Par contre quelque soit le nombre de coupure faisceau j'ai toujours le même résultat... 40 !
Pourquoi utiliser un "compteur2" alors que tu as "compteur" qui fait très bien l'affaire.
Dans la boucle "if", après l'affichage, il faut réinitialiser "TDebut" et "indexDebut".
En fait je ne comprends pas trop pourquoi on place une commande millis()dans le setup, alors que le setup n'est lu qu'une fois au démarrage du programme et qu'ensuite cette donnée ne sera plus lu, mais que notre loop va continuer à avancer dans le temps.
Je ne sais pas si j'ai été clair, c'est juste pour bien comprendre et ne pas faire du code pour faire du code...
Oui j'ai bien compris ça (désolé si je suis un peu boulet) mais on a une valeur millis() X
la première fois que la boule loop s'execute, on a alors une valeur millis()X et une valeur millis() Y. la valeur millis()X reste toujours la même, c'est elle qui nous permet de calculer la différence entre X et Y.
Là je suis, maintenant lors de la 2e boucle, on n'aura toujours la valeur X de référence, mais on n'aura une nouvelle référence Y ?
Ou alors c'est le fait de réinitialiser à 0 cette référence qui permet de refaire un calcul, les références arduinos ne sont que des références temps présent et non pas temps horloge ?
Il manque une accolade pour fermer le if (bizarre que cela compile).
La variable TDebut doit être du même type que millis()
La variable indexDebut doit être du même type que compteur