Commit fb14bdf6 authored by Maxime Robin's avatar Maxime Robin

timer pour anemometre OK et comptage impulsions OK

parent e02e6b8f
......@@ -32,6 +32,7 @@
#include <MAX31865.h>
#include <SHTSensor.h>
#include <I2CEEPROM.h>
#include <TimerOne.h>
#define CHIP_ADDRESS 0x50
#define EEPROM_BYTES 64000 // Number of bytes in EEPROM chip
......@@ -40,6 +41,9 @@
#define ROWS 4
#define COLS 4
#define TEMPS_ACQUISITION_ANEMOMETRE_us 1000000 // ça fait 1 seconde, en µs :)
// pour PT100
#define RTD_CS_PIN 10
......@@ -219,29 +223,22 @@ void mesurePT100() {
}
unsigned short int compteurImpulsions=0;
float vitesseVent=0;
void incrementCompteurAnemometre() {
compteurImpulsions+=1; }
void mesureAnemometre() {
lcd.clear();
Serial.println("Entree mesure anemometre");
/**
* naturellement, à chaque front montant sur l'entrée de l'anémomètre,
* un compteur sera incrémenté.
* Au début de cette fonction, on remet ce compteur à 0 (compteurImpulsions = 0),
* On attends une seconde,
* Puis on détermine la fréquence associée puis la vitesse du vent.
*/
unsigned short int startTime=millis();
float freqHz=0, vitesseVent=0;
void ISR_mesureVitVent() {
float freqHz=(compteurImpulsions/3.); // obtention du nombre de tours effectues
freqHz=freqHz/(TEMPS_ACQUISITION_ANEMOMETRE_us/1000000.);
vitesseVent=0.0980*freqHz; // vitesse en m/s. D'après datasheet, 0.0980 m/s per Hz
compteurImpulsions=0;
while(millis() - startTime < 5000); //équivalent non bloquant d'un delay(). Permet au compteur de s'incrémenter.
freqHz=5/compteurImpulsions;
vitesseVent=0.0980*freqHz; // vit en m/s. D'après datasheet, 0.0980 m/s per Hz
}
void mesureAnemometre() {
Serial.print("Vitesse Vent : "); Serial.print(vitesseVent); Serial.println(" m/s");
lcd.setCursor(0,1); lcd.print("V=");
lcd.setCursor(2,1); lcd.print(vitesseVent);
lcd.setCursor(3,1); lcd.print(vitesseVent);
lcd.setCursor(8,1); lcd.print("m/s");
}
......@@ -250,7 +247,7 @@ void mesureGirouette() {
Serial.println("Entree mesure Girouette");
float dirVent =0;
dirVent=360*analogRead(A0)/1024;
dirVent=360.*analogRead(A0)/1024.;
// conversion directe en degrés car le analogRead mappe les 5V sur 1024 points
lcd.setCursor(0,1); lcd.print("D=");
......@@ -335,8 +332,11 @@ void setup()
maxPT100.configure( true, true, false, true, MAX31865_FAULT_DETECTION_NONE,
true, true, 0x0000, 0x7fff );
// Anemometre
// Reglage préalable pour l'anémomètre : à chaque front montant, on incrémente un compteur
attachInterrupt(digitalPinToInterrupt(2), incrementCompteurAnemometre,RISING);
attachInterrupt(0, incrementCompteurAnemometre,RISING);
Timer1.initialize(TEMPS_ACQUISITION_ANEMOMETRE_us); // set a timer of lenght 1 000 000 microseconds (or 1 sec)
Timer1.attachInterrupt(ISR_mesureVitVent,1000000);
pinMode(A0, INPUT);
......@@ -434,9 +434,9 @@ void loop()
mesureSHT75(); break;
case 6:
mesureThermocouple(); break;
case 7: break;
case 7:
mesurePT100(); break;
case 8: break;
case 8:
mesureAnemometre(); break;
case 9:
mesureGirouette(); break;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment