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
main.cpp
- Committer:
- Giamarchi
- Date:
- 2021-07-06
- Revision:
- 0:5cee4b7380b2
File content as of revision 0:5cee4b7380b2:
/******************************************************************************* 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 /******************************************************************************/