unsigned long timeHigh = pulseIn(10,HIGH); //time in µs für HIGH Impulsdauer
unsigned long timeLow = pulseIn(2,LOW); //time in µS für LOW Impulsdauer
Wofür du 2 Pins brauchst, hab ich übrigens nicht verstanden ...
Welcher von beiden hängt denn, oder was passiert genau ?
Dein Verfahren lässt in jedem Fall jeden 2. Wechsel aus und braucht Pulse > 10 µs ...
http://arduino.cc/forum/index.php/topic,86039.0.html Dieser Thread meint sogar, von Version 0.22 nach 1.0 habe sich etwas verschlechtert ...
The timing of this function has been determined empirically and will probably show errors in longer pulses. Works on pulses from 10 microseconds to 3 minutes in length.
Das Wort "empirically" macht mich stutzig ...
Die beiden roten Leitungen sind im Kreuzungspunkt verbunden, hoffe ich ?
Du kannst übrigens den internen Pullup Widerstand verwenden.
Und wenn dich nicht unbedingt das Puls/Pause Verhältnis interessiert, und du auf das zeitfressende pulseIn() verzichten kannst, bis du einfacher dran mit
volatile unsigned long pSpeed; // Globale Variable
void myTimer () {
static unsigned long lastmicro;
unsigned long now = micros();
pSpeed = now - lastmicro; // zur Demo ohne jedes Filtern ...
lastmicro = now;
}
void setup() {
pinMode(2, INPUT);
digitalWrite(2, HIGH); // pullup aktiv für OpenCollector
attachInterrupt(0, myTimer, RISING); // Pin 2 am UNO
// ...
}
void loop() {
unsigned long ps;
noInterrupts();
ps = pSpeed;
interrupts();
//...
float speed = windspeed(ps); // nur noch Umrechnen ...
// ...
}
Nur am Rande: Ist die Windgeschwindigkeit die gleiche wie die Drehgeschwindigkeit des Rädchens ???
Edit: fix code damit der Compiler nicht meckert ...