pulseInLong()

Description :

pulseInLong() est une alternative à pulseIn() qui gère mieux les scénarios d’impulsion longue et d’interruption.

Lit une impulsion (soit HIGH ou LOW ) sur une broche. Par exemple, si value est HIGHpulseInLong() attend que l’épingle passe de LOW à HIGH , démarre le chronométrage, puis attend que l’épingle aille LOW et arrête le chronométrage. Renvoie la durée de l’impulsion en microsecondes ou abandonne et renvoie 0 si aucune impulsion complète n’a été reçue dans le délai imparti.

La synchronisation de cette fonction a été déterminée empiriquement et montrera probablement des erreurs dans des impulsions plus courtes. Fonctionne sur des impulsions de 10 microsecondes à 3 minutes. Cette routine ne peut être utilisée que si des interruptions sont activées. De plus, la résolution la plus élevée est obtenue avec de grands intervalles.

Syntaxe :

pulseInLong(pin, value)
pulseInLong(pin, value, timeout)

Paramètres :

pin : le numéro de la broche Arduino sur laquelle vous souhaitez lire le pouls. Types de données autorisés : int.
value : type d’impulsion à lire : soit HAUT , soit BAS . Types de données autorisés : int.
timeout (optionnel) : le nombre de microsecondes à attendre pour que l’impulsion démarre ; la valeur par défaut est une seconde. Types de données autorisés : unsigned long .

Retour :

La durée de l’impulsion (en microsecondes) ou 0 si aucune impulsion n’a démarré avant la temporisation. Type de données : unsigned long.

Exemple de code :

L’exemple imprime la durée d’une impulsion sur la broche 7.

int pin = 7;
unsigned long duration;

void setup() {
  Serial.begin(9600);
  pinMode(pin, INPUT);
}

void loop() {
  duration = pulseInLong(pin, HIGH);
  Serial.println(duration);
}

 

Remarques et avertissements :

Cette fonction repose sur elle micros() ne peut donc pas être utilisée dans le contexte noInterrupts() .


 

Source : https://www.arduino.cc/reference/en/language/functions/advanced-io/pulseinlong/

 

Laisser un commentaire