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
Diff: anemo.h
- Revision:
- 6:5a2c3d7d4623
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/anemo.h Thu Jun 16 17:05:58 2022 +0000
@@ -0,0 +1,115 @@
+//==============================================================================
+// 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
+
+