Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed
anemo.h
- Committer:
- Giamarchi
- Date:
- 2022-06-16
- Revision:
- 6:5a2c3d7d4623
File content as of revision 6:5a2c3d7d4623:
//==============================================================================
// Fichier : anemo.h
//
// Description de fonctions utilisées pour la station météo
//==============================================================================
// Déclaration des variables et des constantes
InterruptIn Anem(PB_4); // La ligne est déclarée en interruption
Timer Fenetre_Temps; // Déclaration d'un compteur
Ticker Tick_Anemo;
uint16_t nombre;
int16_t vitesse_anemo; // vitesse anemometre
uint8_t etat_anemo;
uint8_t anemo_ok;
void ISR_Compteur(void) // Fonction d'interruption (Interrupt Sub Routine)
{
nombre++; // Compte le nombre de rotation de l'axe
}
void Init_Anemo(void)
{
Anem.mode(PullUp); // Activation résistance de Pullup
etat_anemo = 0; // Initialisation de la machine à états
anemo_ok = 0; // Lecture non disponible
}
//==============================================================================
// Fonction : Gestion Anemometre
// Entrée : On Off de la tache
// Sortie : Pas de paramètre en sortie
// Interne: variable d'état et de mesure
void Gestion_Anemometre (unsigned int val_anemo)
{
switch (etat_anemo)
{
case 0: // Tache au repos
if((val_anemo & 0x02) == 0x02)
etat_anemo = 1;
else
{
anemo_ok = 0;
Fenetre_Temps.stop(); // Mettre à 0
Anem.disable_irq();
}
break;
case 1:
Fenetre_Temps.start(); // Déclenche le timer
Fenetre_Temps.reset(); // Mettre à 0
Anem.rise(&ISR_Compteur); // Interruption sur front montant
Anem.fall(&ISR_Compteur); // et sur front descendant
Anem.enable_irq();
etat_anemo = 2;
break;
case 2:
if(Fenetre_Temps.read_ms() >= 1000) // Mesure d'une fréquence
{
vitesse_anemo = nombre/2; // Formule de conversion
nombre = 0;
Fenetre_Temps.stop(); // Mettre à 0
etat_anemo = 3;
}
break;
case 3: // Lecture disponible
anemo_ok = 1;
etat_anemo = 0;
break;
default:
etat_anemo = 0;
break;
}
}
//==============================================================================
// Fonction : Lecture Anemometre
// Entrée : Pas de paramètres en entrée
// Sortie : vitesse anemometre
// Interne: variable d'état
int Lecture_Anemometre(void)
{
int resultat;
if (anemo_ok == 1)
{
resultat = vitesse_anemo;
anemo_ok = 0;
}
else
{
resultat = 0;
}
return resultat;
}
//==============================================================================
// Nucleo - L031K6
// PA_9 Vin
// PA_10 Gnd
// NRST NRST
// Gnd 5V
// PA_12 PA_2
// PB_0 PA_7
// PB_7 PA_6
// PB_6 PA_5
// PB_1 PA_4
// NC PA_3
// NC PA_1
// PA_8 PA_0
// PA_11 Aref
// PB_5 3V3
// PB_4 PB_3