8917b9aac6
Redone all The correct indentation and added some modifications
44 lines
1.1 KiB
C++
44 lines
1.1 KiB
C++
#include <math.h>
|
|
#define WindSensorPin (2)
|
|
|
|
volatile unsigned long Rotations; // cup rotation counter used in interrupt routine
|
|
volatile unsigned long ContactBounceTime; // Timer to avoid contact bounce in interrupt routine
|
|
float WindSpeed; // speed miles per hour
|
|
|
|
void setup()
|
|
{
|
|
Serial.begin(9600);
|
|
|
|
pinMode(WindSensorPin, INPUT);
|
|
attachInterrupt(digitalPinToInterrupt(WindSensorPin), isr_rotation, FALLING);
|
|
|
|
Serial.println("Rotations\tKm/h");
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
Rotations = 0; // Set Rotations count to 0 ready for calculations
|
|
|
|
sei(); // Enables interrupts
|
|
delay (3000); // Wait 3 seconds to average
|
|
cli(); // Disable interrupts
|
|
|
|
// convert to mp/h using the formula V=P(2.25/T)
|
|
// V = P(2.25/3) = P * 0.75
|
|
|
|
WindSpeed = (Rotations * 0.75) * 1.609344;
|
|
|
|
Serial.print(Rotations); Serial.print("\t\t");
|
|
Serial.println(WindSpeed);
|
|
}
|
|
|
|
// This is the function that the interrupt calls to increment the rotation count
|
|
void isr_rotation()
|
|
{
|
|
if ((millis() - ContactBounceTime) > 15 ) // debounce the switch contact.
|
|
{
|
|
Rotations++;
|
|
ContactBounceTime = millis();
|
|
}
|
|
}
|