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@0:8b4bad2aad3f, 2021-06-30 (annotated)
- Committer:
- Giamarchi
- Date:
- Wed Jun 30 22:33:54 2021 +0000
- Revision:
- 0:8b4bad2aad3f
TP4 Trame
Who changed what in which revision?
User | Revision | Line number | New 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 |