Académique Documents
Professionnel Documents
Culture Documents
#include <math.h>
#include <LiquidCrystal.h>
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
LastValue = 0;
IsSampleRequired = false;
TimerCount = 0;
pinMode(WindSensorPin, INPUT);
attachInterrupt(digitalPinToInterrupt(WindSensorPin),isr_rotation, FALLING);
Serial.println("Vel.(MPH)\tKnots\tDireccion\tIntensidad");
Timer1.attachInterrupt(isr_timer);
void imprimir()
lcd.setCursor(0, 1);
lcd.print("VV ");
lcd.setCursor(5, 1);
lcd.print(WindSpeed);
lcd.print("MPH");
lcd.setCursor(11, 1);
lcd.print(WindSpeed);
lcd.print("Kt");
lcd.setCursor(0, 2);
lcd.print("DV ");
lcd.setCursor(5, 2);
lcd.print(CalDirection);
lcd.print("o");
void loop() {
getWindDirection();
LastValue = CalDirection;
if(IsSampleRequired) {
// V = P(2.25/2.5) = P * 0.9
IsSampleRequired = false;
Serial.print(WindSpeed); Serial.print("\t\t");
Serial.print(getKnots(WindSpeed)); Serial.print("\t");
Serial.print(CalDirection);
getHeading(CalDirection); Serial.print("\t\t");
getWindStrength(WindSpeed);
void isr_timer() {
TimerCount++;
if(TimerCount == 6)
IsSampleRequired = true;
TimerCount = 0;
void isr_rotation() {
if((millis() - ContactBounceTime) > 15 ) { // Eliminar el rebote del contacto
del interruptor.
Rotations++;
ContactBounceTime = millis();
void getWindDirection() {
VaneValue = analogRead(WindVanePin);
if(CalDirection < 0)
Serial.print(" N");
Serial.print(" NE");
Serial.print(" E");
Serial.print(" S");
Serial.print(" SO");
Serial.print(" O");
Serial.print(" NO");
else
Serial.print(" N");
if(speed < 2)
Serial.println("Calma");
Serial.println("Aire ligera");
Serial.println("Brisa ligera");
Serial.println("Brisa suave");
Serial.println("Brisa moderada");
Serial.println("Brisa fresca");
Serial.println("Brisa fuerte");
Serial.println("Viento fuerte");
else
Serial.println("RUN");