Go Down

Topic: Mkr1200 + Anemo Davis (Read 295 times) previous topic - next topic

libertykite

Bonsoir à tous,

En adaptant légèrement le projet de cette page là : http://cactus.io/hookups/weather/anemometer/davis/hookup-arduino-to-davis-anemometer-wind-speed

J'ai réussi à lire mon anémo de la marque Davis

Voici le code

Code: [Select]

#include <math.h>

#define WindSensorPin (0) // The pin location of the anemometer sensor

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("Davis Wind Speed Test");
Serial.println("Rotations\tMPH");
}

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;

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();
}

}


1ère remarque, le MKR1200 ne peut pas avoir d'interruptions sur la pin 2, je suis donc passé sur la Pin (0).

Deuxième remarque, j'ai du commenter les deux lignes Sei() et cli(); Et en faisant comme ça, ça marche.

Et là du coup, je comprends pas pourquoi ça marche et pourquoi on ne doit pas activer, puis désactiver les interruptions. C'est normal ?

Merci d'avance pour vos lumières

J-M-L

#1
May 25, 2019, 03:38 pm Last Edit: May 25, 2019, 03:39 pm by J-M-L
Si vous ne désactivez pas les interruptions elle vont continuer à arriver pendant que vous faites des calculs donc c'est pas top, les valeurs ne seront pas précises, pire vous pouvez vous retrouver avec du grand n'importe quoi

Sur MKR vous ne pouvez pas utiliser sei() et cli() mais interrupts() et noInterrupts() (interruptions sur les pins 0, 1, 4, 5, 6, 7, 8, 9, A1, A2)

Vous pouvez aussi détachez et rattacher votre interruption car désactiver les interruptions globalement n'est pas une super idée
Hello - Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums.
Bonjour Pas de messages privés SVP, postez dans le forum directement pour que ça profite à tous

Go Up