pulseInLong()
Description :
pulseInLong() est une alternative à pulseIn(), plus performante pour gérer les impulsions longues et les scénarios affectés par les interruptions.
Lit une impulsion (haute ou basse) sur une broche. Par exemple, si la valeur est haute, pulseInLong() attend que la broche passe de basse à haute, démarre le chronométrage, puis attend que la broche passe à basse 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 durée de cette fonction a été déterminée empiriquement et affichera probablement des erreurs pour les impulsions plus courtes. Elle 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 des intervalles longs.
Syntaxe :
Utilisez les fonctions suivantes pour mesurer une longueur d’impulsion sur une broche spécifique :
pulseInLong(pin, value) pulseInLong(pin, value, timeout)
Paramètres :
La fonction admet les paramètres suivants :
- pin : le numéro de la broche Arduino sur laquelle vous souhaitez lire l’impulsion. Types de données autorisés : int.
- value : type d’impulsion à lire : HIGH ou LOW. Types de données autorisés : int.
- timeout (facultatif) : le nombre de microsecondes à attendre avant le début de l’impulsion ; la valeur par défaut est d’une seconde. Types de données autorisés : unsigned long.
Retours :
La fonction renvoie la durée de l’impulsion (en microsecondes) ou 0 si aucune impulsion n’a démarré avant le délai d’expiration. Type de données : unsigned long.
Exemple de code :
L’exemple imprime la durée d’une impulsion sur la broche 7.
int pin = D1; 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 s’appuie sur micros() et ne peut donc pas être utilisée dans le contexte noInterrupts().
Source : https://docs.arduino.cc/language-reference/en/functions/advanced-io/pulseInLong/