Если вы используете Arduino UNO или Nano, простой способ - подключить датчик к контакту D2 или D3, который можно использовать как контакты прерывания.
Затем вы создаете функцию или ISR, которая вызывается каждый раз, когда датчик пульсирует. Затем вы присоединяете вновь созданную функцию к выводу прерывания.
Так это будет выглядеть примерно так.
byte sensorPin = 2;
double pulses = 0;
double wSpeed = 0;
long updateTimer = 0;
int updateDuration = 3000;
void setup() {
Serial.begin(115200);
pinMode(sensorPin, INPUT_PULLUP);
attachInterrupt(digitalPinToInterrupt(sensorPin), sensorISR, FALLING);
}
void loop() {
long now = millis();
if(updateTimer < now) {
updateTimer = now + updateDuration;
wSpeed = ((pulses/(updateDuration/1000)) * 0.765) + 0.35;
pulses = 0;
Serial.println("Windspeed is:" + String(wSpeed));
}
}
void sensorISR() {
pulses++;
}
Работа только функций ISR заключается в увеличении переменной импульсов для каждого импульса. Затем каждую секунду вы можете рассчитать частоту и скорость. Если вместо этого вы подождете 3 секунды, как описано выше, у вас будет лучшее разрешение, но вам придется учитывать дополнительное время в уравнении.
Я не тестировал этот код.