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

Committer:
Giamarchi
Date:
Wed Jun 30 22:59:26 2021 +0000
Revision:
1:ec64d7748431
Parent:
0:8b4bad2aad3f
Publish

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Giamarchi 0:8b4bad2aad3f 1 /*******************************************************************************
Giamarchi 0:8b4bad2aad3f 2 Université de Montpellier
Giamarchi 0:8b4bad2aad3f 3 NemoSpace IUT de Nîmes
Giamarchi 0:8b4bad2aad3f 4 IniSat Modèle 1 Version 2
Giamarchi 0:8b4bad2aad3f 5 *******************************************************************************/
Giamarchi 0:8b4bad2aad3f 6 // TP n°4 : Trame
Giamarchi 0:8b4bad2aad3f 7
Giamarchi 0:8b4bad2aad3f 8 // Exo 1 : Lecture de la température
Giamarchi 0:8b4bad2aad3f 9 // Exo 2 : Sélection des trames GGA ou RMC
Giamarchi 0:8b4bad2aad3f 10 // Exo 3 : Décodage des coordonnées GPS
Giamarchi 0:8b4bad2aad3f 11
Giamarchi 0:8b4bad2aad3f 12 // La lecture du GPS utilise une liaison série software
Giamarchi 0:8b4bad2aad3f 13
Giamarchi 0:8b4bad2aad3f 14 #include "mbed.h"
Giamarchi 0:8b4bad2aad3f 15
Giamarchi 0:8b4bad2aad3f 16 #include "platform/mbed_thread.h"
Giamarchi 0:8b4bad2aad3f 17 #include "system.h"
Giamarchi 0:8b4bad2aad3f 18 #include "user.h"
Giamarchi 0:8b4bad2aad3f 19 #include "soft_uart.h"
Giamarchi 0:8b4bad2aad3f 20 #include "gps.h"
Giamarchi 0:8b4bad2aad3f 21
Giamarchi 0:8b4bad2aad3f 22 uint8_t etat, etat_mem;
Giamarchi 0:8b4bad2aad3f 23 uint16_t compteur;
Giamarchi 0:8b4bad2aad3f 24 float mes_accu;
Giamarchi 0:8b4bad2aad3f 25
Giamarchi 0:8b4bad2aad3f 26 int main()
Giamarchi 0:8b4bad2aad3f 27 {
Giamarchi 0:8b4bad2aad3f 28 Init_System();
Giamarchi 0:8b4bad2aad3f 29 etat = 0;
Giamarchi 0:8b4bad2aad3f 30 Init_Soft_UART();
Giamarchi 0:8b4bad2aad3f 31 thread_sleep_for(1000);
Giamarchi 0:8b4bad2aad3f 32
Giamarchi 0:8b4bad2aad3f 33 while (1) {
Giamarchi 0:8b4bad2aad3f 34 thread_sleep_for(1); // Boucle toutes les 1 milliseconde environ
Giamarchi 0:8b4bad2aad3f 35 compteur++;
Giamarchi 0:8b4bad2aad3f 36 // Gestion des modes avec une machine d'états
Giamarchi 0:8b4bad2aad3f 37 switch (etat) {
Giamarchi 0:8b4bad2aad3f 38 /******************************************************************************/
Giamarchi 0:8b4bad2aad3f 39 // Mode Init : Mise sous tension
Giamarchi 0:8b4bad2aad3f 40 // Initialisation du µC
Giamarchi 0:8b4bad2aad3f 41 case 0:
Giamarchi 0:8b4bad2aad3f 42 Init_User_Fonctions();
Giamarchi 0:8b4bad2aad3f 43 thread_sleep_for(1000);
Giamarchi 0:8b4bad2aad3f 44 Stop_Led();
Giamarchi 0:8b4bad2aad3f 45 GPS_Init();
Giamarchi 0:8b4bad2aad3f 46 Start_Led();
Giamarchi 0:8b4bad2aad3f 47 Set_Led(Ve);
Giamarchi 0:8b4bad2aad3f 48 thread_sleep_for(1000);
Giamarchi 0:8b4bad2aad3f 49 etat = 1;
Giamarchi 0:8b4bad2aad3f 50 break;
Giamarchi 0:8b4bad2aad3f 51 /******************************************************************************/
Giamarchi 0:8b4bad2aad3f 52 // Mode Gestion : Gestion des actions
Giamarchi 0:8b4bad2aad3f 53 // Contrôle du système
Giamarchi 0:8b4bad2aad3f 54 case 1:
Giamarchi 0:8b4bad2aad3f 55 mes_accu = Mes_Bat();
Giamarchi 0:8b4bad2aad3f 56 if(mes_accu < BAT_SEUIL_BAS_1) {
Giamarchi 0:8b4bad2aad3f 57 etat = 4;
Giamarchi 0:8b4bad2aad3f 58 Set_Led(Ro);
Giamarchi 0:8b4bad2aad3f 59 } else {
Giamarchi 0:8b4bad2aad3f 60 etat = 2;
Giamarchi 0:8b4bad2aad3f 61 Set_Led(Ve);
Giamarchi 0:8b4bad2aad3f 62 }
Giamarchi 0:8b4bad2aad3f 63 thread_sleep_for(1000);
Giamarchi 0:8b4bad2aad3f 64 break;
Giamarchi 0:8b4bad2aad3f 65 /******************************************************************************/
Giamarchi 0:8b4bad2aad3f 66 // Mode Mission : Acquisition de données
Giamarchi 0:8b4bad2aad3f 67 // Mesure Batterie
Giamarchi 0:8b4bad2aad3f 68 // Mesure Courant faces solaires
Giamarchi 0:8b4bad2aad3f 69 // Stockage
Giamarchi 0:8b4bad2aad3f 70 case 2:
Giamarchi 0:8b4bad2aad3f 71 Lect_GPS();
Giamarchi 0:8b4bad2aad3f 72 Mes_SP();
Giamarchi 0:8b4bad2aad3f 73 Mes_Temp();
Giamarchi 0:8b4bad2aad3f 74 mes_accu = Mes_Bat();
Giamarchi 0:8b4bad2aad3f 75 if(mes_accu > BAT_SEUIL_HAUT_1)
Giamarchi 0:8b4bad2aad3f 76 {
Giamarchi 0:8b4bad2aad3f 77 etat = 3;
Giamarchi 0:8b4bad2aad3f 78 Set_Led(Ro_Ve);
Giamarchi 0:8b4bad2aad3f 79 }
Giamarchi 0:8b4bad2aad3f 80 else
Giamarchi 0:8b4bad2aad3f 81 {
Giamarchi 0:8b4bad2aad3f 82 etat = 1;
Giamarchi 0:8b4bad2aad3f 83 }
Giamarchi 0:8b4bad2aad3f 84 // thread_sleep_for(1000);
Giamarchi 0:8b4bad2aad3f 85 break;
Giamarchi 0:8b4bad2aad3f 86 /******************************************************************************/
Giamarchi 0:8b4bad2aad3f 87 // Mode Radio : Transmission de données
Giamarchi 0:8b4bad2aad3f 88 // Mise en forme pour affichage
Giamarchi 0:8b4bad2aad3f 89 case 3:
Giamarchi 0:8b4bad2aad3f 90 // Envoi_GPS();
Giamarchi 0:8b4bad2aad3f 91 GPS_Decodage();
Giamarchi 0:8b4bad2aad3f 92 Envoi_Mes_Bat();
Giamarchi 0:8b4bad2aad3f 93 // Envoi_Mes_SP();
Giamarchi 0:8b4bad2aad3f 94 // Envoi_Mes_Temp();
Giamarchi 0:8b4bad2aad3f 95
Giamarchi 0:8b4bad2aad3f 96 // thread_sleep_for(1000);
Giamarchi 0:8b4bad2aad3f 97 etat = 1;
Giamarchi 0:8b4bad2aad3f 98 break;
Giamarchi 0:8b4bad2aad3f 99 /******************************************************************************/
Giamarchi 0:8b4bad2aad3f 100 // Mode Survie : Attente recharge de l'accu
Giamarchi 0:8b4bad2aad3f 101
Giamarchi 0:8b4bad2aad3f 102 case 4:
Giamarchi 0:8b4bad2aad3f 103 mes_accu = Mes_Bat();
Giamarchi 0:8b4bad2aad3f 104 if(mes_accu < BAT_SEUIL_BAS_2) {
Giamarchi 0:8b4bad2aad3f 105 etat = 5;
Giamarchi 0:8b4bad2aad3f 106 Stop_User_Fonctions();
Giamarchi 0:8b4bad2aad3f 107 }
Giamarchi 0:8b4bad2aad3f 108
Giamarchi 0:8b4bad2aad3f 109 if(mes_accu > BAT_SEUIL_HAUT_1) {
Giamarchi 0:8b4bad2aad3f 110 etat = 1;
Giamarchi 0:8b4bad2aad3f 111 Set_Led(Ve);
Giamarchi 0:8b4bad2aad3f 112 }
Giamarchi 0:8b4bad2aad3f 113 break;
Giamarchi 0:8b4bad2aad3f 114 /******************************************************************************/
Giamarchi 0:8b4bad2aad3f 115 // Mode Zombie : Coupure des consommateurs
Giamarchi 0:8b4bad2aad3f 116 // Passage en mode faible consommation
Giamarchi 0:8b4bad2aad3f 117 // Diminution de la fréquence du CPU
Giamarchi 0:8b4bad2aad3f 118 // Passage en mode Sleep
Giamarchi 0:8b4bad2aad3f 119 case 5:
Giamarchi 0:8b4bad2aad3f 120 sleep();
Giamarchi 0:8b4bad2aad3f 121 mes_accu = Mes_Bat();
Giamarchi 0:8b4bad2aad3f 122 if(mes_accu > BAT_SEUIL_HAUT_1)
Giamarchi 0:8b4bad2aad3f 123 etat = 0;
Giamarchi 0:8b4bad2aad3f 124 break;
Giamarchi 0:8b4bad2aad3f 125 /******************************************************************************/
Giamarchi 0:8b4bad2aad3f 126 default:
Giamarchi 0:8b4bad2aad3f 127 etat = 0;
Giamarchi 0:8b4bad2aad3f 128 break;
Giamarchi 0:8b4bad2aad3f 129 /******************************************************************************/
Giamarchi 0:8b4bad2aad3f 130 } // end switch
Giamarchi 0:8b4bad2aad3f 131 /* if(etat != etat_mem) // Debug des états
Giamarchi 0:8b4bad2aad3f 132 {
Giamarchi 0:8b4bad2aad3f 133 pc.printf("Etat_%d\r\n",etat);
Giamarchi 0:8b4bad2aad3f 134 etat_mem = etat;
Giamarchi 0:8b4bad2aad3f 135 }*/
Giamarchi 0:8b4bad2aad3f 136 } // end while
Giamarchi 0:8b4bad2aad3f 137 } // end main
Giamarchi 0:8b4bad2aad3f 138 /******************************************************************************/
Giamarchi 0:8b4bad2aad3f 139
Giamarchi 0:8b4bad2aad3f 140