FabLab Nîmes / Mbed 2 deprecated FabLab_Anemometre

Dependencies:   mbed

Revision:
3:c75f8eddeaf4
Parent:
2:c1a4641eeacf
--- a/fonctions.h	Thu Feb 17 18:16:35 2022 +0000
+++ b/fonctions.h	Wed Mar 02 22:28:23 2022 +0000
@@ -3,52 +3,63 @@
 //  
 //  Description de fonctions utilisées pour la station météo
 //==============================================================================
+#include "mbed.h"
 //              Déclaration des variables et des constantes
-
-//  Tableau de correspondance des angles avec l'encodeur optique
-const int16_t table[32] = {  -1,  0, 72, 12,144,132, 84,120,
-                            216,348,204, 24,156,168,192,180,
-                            288,300, 60, 48,276,312, 96,108,
-                            228,336,240, 36,264,324,252, -1};
                
-DigitalIn  B0(PB_4);                    // Encodeur bit de poids faible
-DigitalIn  B1(PB_5);
-DigitalIn  B2(PA_11);
-DigitalIn  B3(PA_8);
-DigitalIn  B4(PB_1);                    // Encodeur bit de poids fort
+InterruptIn  Anem(PB_4);                // La ligne est déclarée en interruption
+Timer Fenetre_Temps;                    // Déclaration d'un compteur
+
+uint16_t nombre;
 
-DigitalOut  CMD_LED_IR(PB_6);           // Commande des 5 Leds infrarouges
+void ISR_Compteur(void)                 // Fonction d'interruption (Interrupt Sub Routine)
+{
+    nombre++;                           // Compte le nombre de rotation de l'axe
+}
 
 void Init_Fonctions(void)
 {
-//    B0.mode(PullUp);
-//    B1.mode(PullUp);
-//    B2.mode(PullUp);
-//    B3.mode(PullUp);
-//    B4.mode(PullUp);
+    Anem.mode(PullUp);                  // Activation résistance de Pullup
+    Fenetre_Temps.start();              // Déclenche le timer
+    Anem.rise(&ISR_Compteur);           // Interruption sur front montant
 }
 //==============================================================================
 //              Fonction : Girouette
 //  Entrée : Pas de paramètres en entrée
-//  Sortie : Angle, multiple de 12° et -1 en cas d'erreur.
+//  Sortie : vitesse du vent en 16bits
 
-int16_t Girouette (void)
+int16_t Anemometre (void)
 {
-uint16_t direction = 0;                          // variable initialisée à 0
-//  Activation des 5 Leds infrarouges
-    CMD_LED_IR = 1;
-//  Délai pour laisser le temps aux aux Leds IR de s'activer
-    wait_us(50);    
-//  Lecture de l'encodeur optique issu de la girouette
-    direction = B0;                 // Bit de poids faible à droite
-    direction |= (B1<<1);
-    direction |= (B2<<2);
-    direction |= (B3<<3);
-    direction |= (B4<<4);           // Bit de poids fort en position 5
-    direction = direction & 0b00011111;
-//  Résultat -> direction = 0b000 B4 B3 B2 B1 B0    
-//  Coupure des 5 Leds infrarouges
-    CMD_LED_IR = 0;
-//  Conversion en angle par lecture dans la table    
-    return table[direction];
-}
\ No newline at end of file
+int16_t vit;                          // variable locale
+
+    if(Fenetre_Temps.read_ms() > 1000)      // Mesure d'une fréquence
+    {
+        vit = nombre/4;                 // Formule de conversion
+        nombre = 0;
+        Fenetre_Temps.reset();
+    }
+    else
+    {
+        vit = -1;                       // Lecture non disponible
+    }
+    return vit;
+}
+
+//  Nucleo - L432KC
+
+//  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
+
+