IniSat Modèle 1 Version 2 TP 4 : Etude d'un capteur Exo 1 : Lecture température Exo 2 : GPS, décodage données GGA
main.cpp
- Committer:
- Giamarchi
- Date:
- 2021-07-07
- Revision:
- 0:de81bcbbbb72
File content as of revision 0:de81bcbbbb72:
/******************************************************************************* Université de Montpellier NemoSpace IUT de Nîmes IniSat Modèle 1 Version 2 *******************************************************************************/ // TP n°4 : Correction // Exo 1 : Lecture de la température // Exo 2 : Sélection des trames GGA ou RMC // Exo 3 : Décodage des coordonnées GPS // La lecture du GPS utilise une liaison série software #include "mbed.h" #include "platform/mbed_thread.h" #include "system.h" #include "user.h" #include "soft_uart.h" #include "gps.h" uint8_t etat, etat_mem; uint16_t compteur; float mes_accu; int main() { Init_System(); etat = 0; Init_Soft_UART(); thread_sleep_for(1000); 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(); thread_sleep_for(1000); Stop_Led(); GPS_Init(); Start_Led(); Set_Led(Ve); thread_sleep_for(1000); etat = 1; 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: Lect_GPS(); Mes_SP(); Mes_Temp(); mes_accu = Mes_Bat(); 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_GPS(); GPS_Decodage(); Envoi_Mes_Bat(); // Envoi_Mes_SP(); // Envoi_Mes_Temp(); // thread_sleep_for(1000); etat = 1; 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 /******************************************************************************/