FabLab Nîmes / Mbed 2 deprecated FabLab_Station_Meteo

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
Giamarchi
Date:
Thu Jun 16 17:05:58 2022 +0000
Parent:
5:46a732673cc5
Commit message:
maj

Changed in this revision

anemo.h Show annotated file Show diff for this revision Revisions of this file
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
serial.h Show annotated file Show diff for this revision Revisions of this file
--- /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
+
+
--- a/fonctions.h	Sat Mar 26 09:26:26 2022 +0000
+++ b/fonctions.h	Thu Jun 16 17:05:58 2022 +0000
@@ -3,49 +3,28 @@
 //  
 //  Description de fonctions utilisées pour la station météo
 //==============================================================================
-#include "mbed.h"
-//              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
+//#include "mbed.h"
+// #include <string.h>
 
-uint16_t nombre;
+//==============================================================================
+//             Déclaration des broches
+DigitalOut  DEL(PA_11);              // Ligne PA_11 sur la carte Nucléo
+Serial      pc(USBTX, USBRX);           // Dialogue Série port USB à 9600 Baud
 
-void ISR_Compteur(void)                 // Fonction d'interruption (Interrupt Sub Routine)
-{
-    nombre++;                           // Compte le nombre de rotation de l'axe
-}
+//==============================================================================
+//              Déclaration des variables et des constante
+const char * const titre[] = {"Station Meteo","1.0",};
 
+//==============================================================================
+//              Déclaration des fonctions
 void Init_Fonctions(void)
 {
-    Anem.mode(PullUp);                  // Activation résistance de Pullup
-    Fenetre_Temps.start();              // Déclenche le timer
-    Anem.rise(&ISR_Compteur);           // Interruption sur front montant
-    Anem.fall(&ISR_Compteur);
+    pc.printf("\r\n%s",titre[0]);
+    pc.printf("\tV%s\r\n",titre[1]);
+    pc.printf("FabLab Nimes\r\n");
 }
-//==============================================================================
-//              Fonction : Girouette
-//  Entrée : Pas de paramètres en entrée
-//  Sortie : vitesse du vent en 16bits
-
-int16_t Anemometre (void)
-{
-int16_t vit;                          // variable locale
-
-    if(Fenetre_Temps.read_ms() >= 1000)      // Mesure d'une fréquence
-    {
-        vit = nombre/8;                 // Formule de conversion
-        nombre = 0;
-        Fenetre_Temps.reset();
-    }
-    else
-    {
-        vit = -1;                       // Lecture non disponible
-    }
-    return vit;
-}
-
-//  Nucleo - L432KC
+               
+//  Nucleo - L031K6
 
 //  PA_9                    Vin
 //  PA_10                   Gnd
@@ -62,5 +41,3 @@
 //  PA_11                   Aref
 //  PB_5                    3V3
 //  PB_4                    PB_3
-
-
--- a/main.cpp	Sat Mar 26 09:26:26 2022 +0000
+++ b/main.cpp	Thu Jun 16 17:05:58 2022 +0000
@@ -3,81 +3,74 @@
 //  Initiation à la Programmation
 //  Auteur : Frédéric Giamarchi
 
-//  Date : 24 mars 2022
-//  TP : Liaison Bluetooth
+//  Date : 04 juin 2022
+//  TP : Station Meteo
 //  
 //  Utilisation de fonctions décrites dans un fichier séparé
 //==============================================================================
 //              Déclarations des ressources
 #include "mbed.h"
 #include "fonctions.h"                  // Appel des fonctions du fichier : fonctions.h
-#include "soft_uart.h"
-
-//==============================================================================
-//              Déclaration des broches
-DigitalOut  DEL(PA_11);              // Ligne PA_11 sur la carte Nucléo
-Serial      pc(USBTX, USBRX);           // Dialogue Série port USB à 9600 Baud
+#include "serial.h"
+#include "anemo.h"
 
 //==============================================================================
 //              Déclaration des variables
-
-char c;                                 // variable de type caractère
+unsigned char c;                                 // variable de type caractère
 float temp;                             // variable de type réel
-int16_t vitesse;                        // variable de type 16 bits signée
-char tab[10];                           // tableau de variable de type caractère
-char buf[10];
-uint8_t ptr, k;
+unsigned int vitesse;                        // variable de type 16 bits signée
+unsigned int etat;
+unsigned int cmd_menu;
 
 //==============================================================================
 //              Début du Programme
 int main()                              // Fonction principale
 {
-    Init_Fonctions();                   // Exécute cette fonction
-    pc.printf("\r\nFabLab Bluetooth\r\n\n");
-    
-    init_uart();                        // Initialise la liaison série soft
-    printStr("FabLab Bluetooth\r\n");
-    ptr = 0;
-    k = 0;
+   Init_Fonctions();                   // Exécute cette fonction
+
 
+    Init_Serial();
+
+    etat = 0;
 //==============================================================================
 //              Boucle Infinie
-    while(1)
+    while(true)
     {
-        if (kbhit())                    // Un caractère est reçu sur le BT
-        {
-            buf[k] = _getchar();        // Mémorise le carcatère dans un tableau
-            
-            if((buf[k] == 0x0A) || (buf[k] == 0x0D))      // Test touche entrée en mode ASCII
-            {
-                buf[k] = 0;             // Transforme le tableau en chaine de caractères  
-                k = 0;                  // Met le pointeur à 0
-                pc.printf("%s\n\r",buf);     // Envoi le texte vers le PC 
-            }
-            else
-            {
-                k++;                // incrémente pour lire le prochain caractère
-            }
-            
-        }
-        if(pc.readable())                  // Si appui caractère au clavier
+        Commande_Up();                  // Lecture d'une commande montante
+
+        switch (etat)
         {
-            tab[ptr] = pc.getc();       // Mémorise le caractère et vide le registre de réception
-            
-            if((tab[ptr] == 0x0A) || (tab[ptr] == 0x0D))      // Test touche entrée en mode ASCII
-            {
-                tab[ptr] = 0;         // Transforme le tableau en chaine de caractères  
-                ptr = 0;
-                printStr(tab);          // Envoi le texte vers le BT
-                printStr("\r\n");  
-            }
-            else
-            {
-                ptr++;
-            }
+            case 0:                         // Initialisation du système
+                Init_Anemo();
+                
+                cmd_menu = 0;
+                etat = 1;
+                break;
+            case 1:                         // Menu
+                Menu();
+                cmd_menu = Get_Config();
+                etat = 2;
+                break;
+            case 2:                         // Gestion des Instrumesnts
+                // Gestion_Temperature(cmd_menu);
+                Gestion_Anemometre(cmd_menu);
+                // Gestion_Girouette(cmd_menu);
+                // Gestion_Pluviometre(cmd_menu);
+                etat = 3;
+                break;
+            case 3:                         // Gestion des données
+                vitesse = Lecture_Anemometre();
+                if(vitesse > 0)
+                {
+                    pc.printf("#A%d\r\n",vitesse);
+                }
+                etat = 1;
+                break;
+            default:
+                etat = 0;
+                break;
         }
-
-    }           // Fin du while(1)
+    }//         Fin du while(true)
 //==============================================================================
-}               // Fin du Programme
-//==============================================================================
\ No newline at end of file
+}//             Fin du Programme
+//==============================================================================
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/serial.h	Thu Jun 16 17:05:58 2022 +0000
@@ -0,0 +1,104 @@
+//==============================================================================
+//  Fichier : serial.h
+//  
+//  Description de fonctions utilisées pour la communication série
+//==============================================================================
+//              Déclarations des ressources
+//#include "soft_uart.h"
+#include "mbed.h"
+//==============================================================================
+
+
+//==============================================================================
+//              Déclaration des variables
+char cmd[10];                           // tableau de variable de type caractère
+char buf[10];
+int ptr, k;
+int config_menu;
+
+//==============================================================================
+void Init_Serial(void)
+{
+    ptr = 0;
+    config_menu = 1;
+//    k = 0;
+
+  //  init_uart();                        // Initialise la liaison série soft
+  //  printStr("FabLab Bluetooth\r\n");
+}
+
+void Commande_Up(void)
+{
+/*    if (kbhit())                    // Un caractère est reçu sur le BT
+    {
+        buf[k] = _getchar();        // Mémorise le carcatère dans un tableau
+        
+        if((buf[k] == 0x0A) || (buf[k] == 0x0D))      // Test touche entrée en mode ASCII
+        {
+            buf[k] = 0;             // Transforme le tableau en chaine de caractères  
+            k = 0;                  // Met le pointeur à 0
+            pc.printf("%s\n\r",buf);     // Envoi le texte vers le PC 
+        }
+        else
+        {
+            k++;                // incrémente pour lire le prochain caractère
+        }
+        
+    }
+*/
+    if(pc.readable())                  // Si appui caractère au clavier
+    {
+        cmd[ptr] = pc.getc();       // Mémorise le caractère et vide le registre de réception
+        
+        if((cmd[ptr] == 0x0A) || (cmd[ptr] == 0x0D))      // Test touche entrée en mode ASCII
+        {
+            cmd[ptr] = 0;         // Transforme le tableau en chaine de caractères  
+            ptr = 0;
+
+            if(config_menu & 0x01)         // Controle Echo On/Off
+            {
+                pc.printf("%s\n\r",cmd);     // Envoi le texte vers le PC 
+            }
+        }
+        else
+        {
+            ptr++;
+        }
+    }
+}
+
+void Menu(void)
+{
+
+    if(cmd[0] == '$')
+    {
+        switch (cmd[1])
+        {
+            case 'A':                   //  Anémomètre On
+                config_menu = config_menu | 0b00000010;
+                break;
+            case 'a':                   //  Anémomètre Off
+                config_menu = config_menu & 0b11111101;
+                break;
+            case 'E':                   //  Echo du message On
+                config_menu = config_menu | 0b00000001;
+                break;
+            case 'e':                   //  Echo du message Off
+                config_menu = config_menu & 0b11111110;
+                break;
+            case 'T':                   //  Thermomètre On
+                config_menu = config_menu | 0b00000100;
+                break;
+            case 't':                   //  Thermomètre Off
+                config_menu = config_menu & 0b11111011;
+                break;
+            default:
+                break;
+        }
+    }
+}
+
+int Get_Config(void)
+{
+    return config_menu;
+}