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
Diff: main.cpp
- 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