Um Pulse (z.B. von Sensoren) messen zu können bietet der Arduino die Funktion pulseIn()
.
Diese Funktion liest einen Wert von einem Pin des Arduino ein (LOW bzw. HIGH). Wenn der Wert z.B. HIGH ist, wartet pulseIn() darauf, dass der Pin auf den Wert HIGH wechselt, startet einen Timer und wartet anschließend darauf, dass der Pin wieder auf LOW wechselt. Daraufhin stoppt pulseIn() den Timer und gibt die Länge des Pulses in Mikrosekunden zurück.
Wird ein (optionaler) Timeout-Wert angegeben und dieser erreicht (z.B. weil der Puls sehr lang ist), dann stoppt der Timer und gibt 0 zurück. pulseIn() kann Pulse zwischen 10µs bis 3 Minuten messen.
Der Puls wird in diesem Beispiel mit einem Mikrotaster simuliert.
#define PIN_BUTTON 7
void setup()
{
Serial.begin(9600);
pinMode(PIN_BUTTON, INPUT);
}
void loop()
{
unsigned long duration = pulseIn(PIN_BUTTON, HIGH);
Serial.println(duration);
}
Eine Alternative ist die Funktion pulseInLong()
, die längere Pulse besser erkennen
kann und besser in Sketches verwendet wird, in denen Interrupts verwendet werden.
Diese Funktion verlässt sich auf micros(), so dass sie
im Kontext von noInterrupts()
NICHT verwendet werden kann!
siehe auch Arduino Sprachreferenz
Um Frequenzen genauer messen zu können, kann man die Library Frequency Counter verwenden.
zurück