Variable de Comptage pour certains changements d'etat ?

Bonjour à tous,

Actuellement en Terminal SI, je voudrais crée un programme permettant de mesurer la vitesse d'un véhicule (Trotinette éléctrique) à partir d'un capteur ILS ou à partie d'un capteur de ligne. Je vais décrire mon protocole :

_J'installe un capteur de ligne sur un socle juste au dessus de la roue arriere
_Je place un morceau de ruban adhésif noir sur la roue

Lorsque le morceaux de ruban adhesif noir passe sous le capteur, cela équivaut un changement d'état. Ce changement d'état doit etre interpreter comme un tour. Là se pose le premier probleme : existe-t-il une "variable de comptage de changement d'état ?". En effet je veux compter le nombre de changement d'état qui se realisent en une minute et le diviser par un temps, ce qui nous donne une vitesse en Tour/Min.

Je veux ensuite convertir cette vitesse en mètre par seconde garce à la formule : 2pir*v. La se pose mon second et dernier probleme : est- que la variable énoncée ci-dessus serait adéquates pour des calculs algébriques ?

Lee programme que j'ai entammé est en piece jointe.

Je vous remercie d'avance :slight_smile:

Cordialement !

Autre_Capateur_De_Vitesse.ino (968 Bytes)

Ca s'appelle une variable.

MaVariable=MaVariable+1;

Bonsoir,

Comme dit par B@tto, c'est une variable, tu l'as créé, tu en fais ce que tu en veux... (affectation de valeur, calculs, affichage etc)

Par contre j'ai jeté un petit coup d'oeil dans ton code. Plusieurs problèmes :

(digitalRead(CapteurVState));

Tu demandes une lecture digitale sur la pin CapteurVState. C'est très bien. Mais tu n'enregistres pas la valeur renvoyées, intérêt ?

if (Temps = 3000)

Je suppose que tu veux comparer l'égalité entre ta variable Temps et 3000 ?
Pour cela tu dois utiliser cet opérateur " == " . Si tu mets un seul égal tu effectueras une affectation de valeur dans ta variable Temps. Donc tu ne vas rien comparer, mais tu vas écraser la valeur précédente.

0.140*3.14*CapteurVState/3000;

Un petit calcul... pourquoi pas ! un µC c'est fait pour ça. Mais il est faut quand même en faire quelque chose du résultat ! C'est comme si tu te tapais une page de calcul à la main sur une feuille de papier pour au final la jeter à la poubelle sans rien en faire.

millis();

Idem ici, tu demandes au µC de te donner un numéro, mais tu n'en fais rien du tout.
"Bonjour madame ! une baguette de pain s'il vous plaît :slight_smile:
Voilà monsieur ! merci au revoir !
Au revoir !"
tu sors et tu jettes ta baguette sur le trottoir !
Tu le ferais pas en vrai ? ^^ alors le fais pas avec monsieur µC !

Bon courage

Merciii beaucoup je suis au travail pour essayer de terminer ce programme :stuck_out_tongue_closed_eyes:

Bonjour, c'est toujours moi désolé je suis un petit novice lol
alors jai remanié le premier programe et le voila celui ci-dessous, quand j'ouvre le moniteur série toutes mes valeurs sont égales a 0 je ne comprend pas :confused:

 // DEFINITION DES VALEURS ET DES CONSTANTES :
      
      const int CapteurV = 10;                  
      
      int CapteurVState;                        
      
      int Temps = millis ();
      
      int Vitesse;
      
      int Tours;
      
      void setup () {
        
      Serial.begin (9600);
        
      pinMode(CapteurV,INPUT);                   
     
      Serial.println ("En cours de mesure ..."); 
        
      }
      
      void loop() {
        
     
      
      if (CapteurVState == HIGH) {  
      
      Tours = Tours + 1;
      
      }

      else if (CapteurVState == LOW) {
      
      Tours = Tours;  
        
      }

      else if (Temps == 3000) {          
      
      Vitesse == 0.140*3.14*Tours/3000;                       
      
      }  
  
      {
      
      Serial.println (Tours);  
        
      Serial.println ("tr");  
        
      Serial.println  (Vitesse);                                   
 
      Serial.println ("m/s");                         
   
      delay(1000);
 
      Serial.println ("En cours de mesure ..."); 
  
      millis();
      
      }
      
      }

Salut

Vitesse == 0.140*3.14*Tours/3000;

ça c'est une comparaison !

Vitesse = 0.140*3.14*Tours/3000;

ça c'est une affectation.

Salut, jai mis :

 Tours = Tours + 1;

      Tours = Tours;  

      Vitesse = 0.140*3.14*Tours/3000;

Rien y fait j'ai mis en piece jointe ce que m'affiche le moniteur séri

moniteur série.docx (63.2 KB)

va lire ça : Compte-tour pour moteur CC avec affichage dans le Terminal série - Mon Club Elec

ça va d'aider :wink:

merccccccciiiiiiiiiiiiiiiiiiiiiiiiiiiii
et a ton avis sa marcherait avec un capteur ILS ou dans mon cas avec un capteur de ligne ? :smiley:

else if (Temps == 3000) {

Le problème c'est que dans loop(), Temps ne change jamais donc tu ne risques pas de trouver les 3000 en question.

Et comment faire pour que le temps change ? /:
(dsl je suis vraiment novice lol)

Voilà mon nouveau programme il a l'air de marcher mais lorsque je met mon doigt sur le capteur de ligne, le moniteur m'affiche 0Tr et 0m/s
et lorsque j'enleve mon doigt il maffiche 1Tr et 0m/s (voire la piece jointe)
Je suis maintenant persuader qu'il me faut une variable qui pourrait compter le nombre de changement d'etat qui se passe pendant un temps donné. Une aide me serais tres précieuse lol !
Voici mon programme :

 // DEFINITIONS DES VALEURS ET DES CONSTANTES 
          
      const int CapteurDeLigne = 8;
      
      int CapteurDeLigneState = 0;
      
      int Tours;
      
      int Vitesse;
      
      int Temps;
      
      void setup () {
      
      Serial.begin (9600); {
        
      pinMode(CapteurDeLigne,INPUT); 
      
      digitalRead(CapteurDeLigne);
      
      }  
      
      }
      
      void loop () {
      
      if(CapteurDeLigne == HIGH){
      
      Tours = digitalRead (CapteurDeLigne) + 1;}
      
      else (CapteurDeLigne == LOW);{
      
      Tours = digitalRead (CapteurDeLigne);}
      
      Temps = millis();
      
      Vitesse == 0.140*3.14*Tours/Temps;  
      
      Serial.print (Tours);
      
      Serial.print ("Tr");
      
      Serial.print (Vitesse);
      
      Serial.print ("m/s");
      
      delay(1000);
      
      }

Doc1.docx (93.3 KB)