Annonce

>>> Bienvenue sur codelab! >>> Première visite ? >>> quelques mots sur codelab //// une carte des membres//// (apéros) codelab


#1 2014-10-18 04:01:17 Arduino probleme avec pulsein et digitalRead

imdidi
membre
Date d'inscription: 2012-10-05
Messages: 242

Arduino probleme avec pulsein et digitalRead



bonjour a tous
je cherche a calculer la fréquence d'un timer 555 et son duty cycle sa fonctionne tres bien mais je voudrais compter le nombre de fois que la pin devient HIGH pour confirmer si le arduino affiche la bonne frequence je detecte deja le temps de la pulse avec la fonction pulsein() le probleme est que si je fais un digitalread il reste a 0 alors qu il devrait alterner entre 0 et 1 mais si je commente mes deux pulsein() donc pour les desactiver la le digitalread alterne de 0 a 1 il y a t il une raison ou il y a t il quelque chose que je ne fais pas correct
voila lle code :

//Calcule de Frequence F=1/T F=Frquence, T=Periode en Seconde
//Calcule de Periode T=1/F F=Frquence, T=Periode en Seconde
//calcule de duty cycle D=T/P*100 D=duty cycle T=Temp Signal Actif
//P=Temps total d'un cycle

int countPin = 6;
int readPin = 7;
int pulsePin = 13;
int potFreqPin;
int buttonStart;
int oldButtonStart;
int buttonMode;
int oldButtonMode;
int mode;
int countHighPin;
int potFreq;
double durationLow;
double durationHigh;


void setup()
{
  Serial.begin(115200);
  pinMode(countPin, INPUT);
  pinMode(readPin, INPUT);
  pinMode(pulsePin, OUTPUT);
  digitalWrite(pulsePin,LOW);
  mode = 1;
}

void loop()
{
  countHighPin = digitalRead(countPin);
  durationLow = pulseIn(readPin, LOW);
  durationHigh = pulseIn(readPin, HIGH);
  //potFreq = map(analogRead(potFreqPin),0,1023,0,1000)/1000000;//return value to microSec
  
  //if(buttonMode == HIGH && oldButtonMode == LOW) {
  freqCalc(durationLow,durationHigh);
  //freqPulse(potFreq);
  Serial.print(countHighPin);
}

void freqCalc(double Low, double High) {
  double dutyCyclePos = High * 100 / (Low + High); // valeur*100/valeurtotal
  double dutyCycleNeg = Low * 100 / (Low + High);  // valeur*100/valeurtotal
  double frequence = ((double) 1000000)/(double (Low + High))+0.5; //0.5 calibration;
  Serial.print("Frequence:"); 
  Serial.println(frequence);
  Serial.print("Duty Cycle+:");
  Serial.println(dutyCyclePos);
  Serial.print("Duty Cycle-:");
  Serial.println(dutyCycleNeg);
  Serial.println("");
  Serial.println("");
  Serial.println("");
  Serial.println("");
  Serial.println("");
  Serial.println("");
  Serial.println("");
  Serial.println("");
  Serial.println("");
}

merci
a+

Hors ligne

 

fil rss de cette discussion : rss

Pied de page des forums

Powered by FluxBB

codelab, graphisme & code : emoc / 2008-2024