Go Down

Topic: Aide SVP (Read 167 times) previous topic - next topic

Foufou

Sep 12, 2017, 07:18 pm Last Edit: Sep 12, 2017, 07:24 pm by Foufou
Salut tout le monde , mon conde constitue a mesuere le nombre de tours d un moteur .
en faite j aimerai compter le nombre de tours a chaque pique ( changement d etat) et puis apres 18 pics il faudra  fair la moyenne du nombre de tours apres 18 pics en tout

Code: [Select]
#include <Wire.h>
unsigned long beginnzeit; // le temps debut pour la deuxiemer messure
volatile unsigned long endezeit; // le temps ecoule
volatile unsigned long  impuls; // compteur
unsigned long drehzahl; //nombre de tours
unsigned long dauer ;
int A=0;
int mittelwert=0; // la moyenne


void setup() {
Serial.begin(9600);
pinMode(2,INPUT);
pinMode(2,INPUT_PULLUP);
drehzahl=0;
endezeit=0;
beginnzeit=0;
impuls=0;
attachInterrupt(0,impulse,HIGH) ;//
}
void impulse(){
  impuls++;
 endezeit=millis(); // le temps ecoule

}
void loop() {
 
if (endezeit>beginnzeit){
   detachInterrupt(0);
  dauer=endezeit-beginnzeit;

  drehzahl= 60*1000 *1/ (dauer); //

  beginnzeit=endezeit;
    A=drehzahl+A;
      if (impuls==18){
  mittelwert=A/impuls;
  Serial.println("Mittelwert");
Serial.println(mittelwert); // la moyenne apres 18 pic
  impuls=0;
  A=0;
  }
    attachInterrupt(0,impulse,HIGH) ;
 
    Serial.println("drehzahl");
Serial.println(drehzahl); // le nombre de tours


 
  }
else{
  drehzahl=0;
}

delay(1000);



}



si quelqu un pourrait m aider a modifier mon programme en faite la fonction attinterrupt ne sarrete pas avec le comptage des tours et j essayer plusieurs methode mais ca marche pas  j aimera desquel arrivera a 18 pic  elle se remet a zero  et en parellel le programme comptera la vitesse du moteur a chaque pic pour qu a la fin je divise par 18 et avoir une valeur bien exacte .
ou bien si quelqu un aurait une autre Methode :S


Merci d avoir lu mon MSG :D

ZigZag

Merci d avoir lu mon MSG :D
De rien, je l'ai même lu 2 fois plutôt qu'une ... mais euh  :smiley-confuse:  desolé

dfgh

hello, regarde LA

c'est dans l'esprit de ce que tu cherches

Foufou

au faite je dois particulierement  me baser sur la fonction attachInterrupt .

dfgh

 :o je viens de m'apercevoir que le lien que je t'ai passé t'envoie sur un post qui est déjà de toi et dans lequel tu demandais déjà de l'aide à ce sujet... >:(

pourquoi ne pas avoir continuer sur ce post.

il ne sert à rein d'en ouvrir plusieurs en même temps.

Foufou

par ce que j ai pas eu d autre reponse :S

infobarquee

par ce que j ai pas eu d autre reponse :S

et CA c'est pas une réponse?

en plus tu poste dans la partie allemande
et la réponse n'est pas plus explicite http://forum.arduino.cc/index.php?topic=499833.msg3409861#msg3409861

A LIRE POUR RAPPEL
AUCUNE AIDE PAR MP

dfgh

#7
Sep 13, 2017, 01:02 pm Last Edit: Sep 13, 2017, 01:33 pm by dfgh
testes ça

moniteur en 115200 bauds

Code: [Select]
unsigned long top_1ere_dent; // le temps debut pour la deuxiemer messure
volatile unsigned long top_18eme_dent; // le temps ecoule
volatile byte  nombre_dents; // compteur de dents
int vitesse; //nombre de tours par minute
unsigned long temps_au_tour;
void setup()
{
Serial.begin(115200);
pinMode(2,INPUT_PULLUP);
vitesse=0;
top_18eme_dent=0;
nombre_dents=0;
attachInterrupt(0,isr_impulsion,HIGH) ;//
}

void isr_impulsion(){nombre_dents++;}

void loop()
{
  if (nombre_dents==1){top_1ere_dent=millis();}
  if (nombre_dents==18)
      {
        top_18eme_dent=millis(); // le temps ecoule
        nombre_dents=0;
        temps_au_tour = (top_18eme_dent-top_1ere_dent);
        vitesse = (60000/temps_au_tour);
        Serial.print("vitesse tr/mn : ");Serial.println(vitesse); // le nombre de tours
      }

Go Up