FabLab Nîmes / Mbed 2 deprecated FabLab_Anemometre

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Giamarchi
Date:
Wed Mar 02 22:28:23 2022 +0000
Parent:
2:c1a4641eeacf
Commit message:
Station Meteo; Anemometre

Changed in this revision

fonctions.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- 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
+
+
--- a/main.cpp	Thu Feb 17 18:16:35 2022 +0000
+++ b/main.cpp	Wed Mar 02 22:28:23 2022 +0000
@@ -3,9 +3,9 @@
 //  Initiation à la Programmation
 //  Auteur : Frédéric Giamarchi
 
-//  Date : 3 fev. 2022
-//  TP : Girouette
-//  Encodeur optique pour girouette
+//  Date : 3 mars 2022
+//  TP : Anémomètre
+//  Lecture optique par interruption
 //  Utilisation de fonctions décrites dans un fichier séparé
 //==============================================================================
 //              Déclarations des ressources
@@ -21,31 +21,26 @@
 //              Déclaration des variables
 
 char c;                                 // variable de type caractère
-float temp;                           // variable de type réel
-int16_t angle;
+float temp;                             // variable de type réel
+int16_t vitesse;                        // variable de type 16 bits signée
 
 //==============================================================================
 //              Début du Programme
 int main()                              // Fonction principale
 {
     Init_Fonctions();                   // Exécute cette fonction
-    
-    pc.printf("\r\nFabLab TP Girouette\r\n\n");
-    
+    pc.printf("\r\nFabLab TP Anemometre\r\n\n");
+
 //==============================================================================
 //              Boucle Infinie
     while(1)
     {
-        wait(1.0);                      // Toutes les secondes
+        vitesse = Anemometre();
         
-        angle = Girouette();            // Lecture de la girouette
-        if(angle == 0)
-            DEL = 1;                    // La girouette pointe vers le Nord
-        else
-            DEL = 0;
-            
-        pc.printf("Dir Vent : %d\n",angle);     // Affiche l'angle sur Putty
-        
+        if(vitesse != -1)               // Lecture disponible
+        {
+            pc.printf("Vit Vent : %d\n",vitesse);     // Affichage sur Putty  
+        }
     }           // Fin du while(1)
 //==============================================================================
 }               // Fin du Programme