const int sensorPin = 2;
volatile unsigned long lastDebounceTime = 0;
const unsigned long debounceDelay = 10; // Entprellzeit in Millisekunden
volatile unsigned long pulseCount = 0; // Zähler für Impulse
unsigned long lastPulseTime = 0; // Zeitpunkt des letzten Impulses
unsigned long interval = 1000; // Zeitintervall für die Auswertung in Millisekunden
volatile bool sensorState = LOW; // Entprellter Zustand des Sensors
volatile bool lastSensorState = LOW;
void setup() {
pinMode(sensorPin, INPUT);
attachInterrupt(digitalPinToInterrupt(sensorPin), handleInterrupt, RISING); // Je nach Sensor auf RISING oder FALLING einstellen
Serial.begin(9600);
}
void loop() {
unsigned long currentTime = millis();
if (currentTime - lastPulseTime >= interval) {
float windSpeed = calculateWindSpeed(); // Hier kannst du deine eigene Berechnung durchführen
Serial.print("Windgeschwindigkeit: ");
Serial.print(windSpeed);
Serial.println(" m/s");
lastPulseTime = currentTime;
}
}
void handleInterrupt() {
unsigned long currentMillis = millis();
if (currentMillis - lastDebounceTime >= debounceDelay) {
lastDebounceTime = currentMillis;
// Liest den aktuellen Zustand des Sensors
bool reading = digitalRead(sensorPin);
if (reading != lastSensorState) {
lastSensorState = reading;
// Aktualisiert den entprellten Zustand des Sensors
sensorState = reading;
if (sensorState == HIGH) {
pulseCount++;
}
}
}
}
float calculateWindSpeed() {
float windSpeed = pulseCount;
pulseCount = 0; // Zähler zurücksetzen
return windSpeed;
}