IniSat Modèle 1 Version 2 TP 3 : Gestion des données Exo 1 : Lecture tension batterie Exo 2 : Lecture courants faces solaires Exo 3 : Modes de fonctionnement

Revision:
0:5cee4b7380b2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Tue Jul 06 12:47:20 2021 +0000
@@ -0,0 +1,121 @@
+/*******************************************************************************
+    Université de Montpellier
+    NemoSpace   IUT de Nîmes
+    IniSat Modèle 1 Version 2
+*******************************************************************************/
+//      TP n°3 : Correction
+
+//  Exo 1 : Lecture tension batterie
+//  Exo 2 : Lecture courants faces solaires
+//  Exo 3 : Modes de fonctionnement
+
+#include "mbed.h"
+#include "platform/mbed_thread.h"
+#include "system.h"
+#include "user.h"
+
+uint8_t etat, etat_mem;
+uint16_t compteur;
+float mes_accu;
+
+int main()
+{
+
+    Init_System();
+    etat = 0;
+
+    while (1) {
+        thread_sleep_for(1);        // Boucle toutes les 1 milliseconde environ
+        compteur++;
+//      Gestion des modes avec une machine d'états
+        switch (etat) {
+/******************************************************************************/
+// Mode Init :      Mise sous tension
+//                  Initialisation du µC
+            case 0:
+                Init_User_Fonctions();
+                etat = 1;
+                Set_Led(Ve);
+                thread_sleep_for(3000);
+                break;
+/******************************************************************************/
+//  Mode Gestion :  Gestion des actions
+//                  Contrôle du système
+            case 1:
+                mes_accu = Mes_Bat();
+                if(mes_accu < BAT_SEUIL_BAS_1) {
+                    etat = 4;
+                    Set_Led(Ro);
+                } else {
+                    etat = 2;
+                    Set_Led(Ve);
+                }
+                thread_sleep_for(1000);
+                break;
+/******************************************************************************/
+//  Mode Mission :  Acquisition de données
+//                      Mesure Batterie
+//                      Mesure Courant faces solaires
+//                  Stockage
+            case 2:
+                Mes_Bat();
+                Mes_SP();
+                if(mes_accu > BAT_SEUIL_HAUT_1)
+                {
+                    etat = 3;
+                    Set_Led(Ro_Ve);
+                } else
+                {
+                    etat = 1;
+                }
+                thread_sleep_for(1000);
+                break;
+/******************************************************************************/
+//  Mode Radio :    Transmission de données
+//                  Mise en forme pour affichage
+            case 3:
+                Envoi_Mes_Bat();
+                Envoi_Mes_SP();
+                etat = 1;
+                thread_sleep_for(1000);
+                break;
+/******************************************************************************/
+//  Mode Survie :   Attente recharge de l'accu
+
+            case 4:
+                mes_accu = Mes_Bat();
+                if(mes_accu < BAT_SEUIL_BAS_2) {
+                    etat = 5;
+                    Stop_User_Fonctions();
+                }
+
+                if(mes_accu > BAT_SEUIL_HAUT_1) {
+                    etat = 1;
+                    Set_Led(Ve);
+                }
+                break;
+/******************************************************************************/
+//  Mode Zombie :   Coupure des consommateurs
+//                  Passage en mode faible consommation
+//                  Diminution de la fréquence du CPU
+//                  Passage en mode Sleep
+            case 5:
+                sleep();
+                mes_accu = Mes_Bat();
+                if(mes_accu > BAT_SEUIL_HAUT_1)
+                    etat = 0;
+                break;
+/******************************************************************************/
+            default:
+                etat = 0;
+                break;
+/******************************************************************************/
+        }   // end switch
+        if(etat != etat_mem)            //  Debug des états
+        {
+            pc.printf("Etat_%d\r\n",etat);
+            etat_mem = etat;
+        }
+    }   // end while
+}   // end main
+/******************************************************************************/
\ No newline at end of file