IniSat Modèle 1 Version 2 TP 5 : Station Sol Exo 1 : Enregistrement GPS sur carte SD Exo 2 : Mise en place d'un protocole de communication avec la station sol
Dependencies: mbed
main.cpp@0:798c7207505d, 2022-05-31 (annotated)
- Committer:
- Giamarchi
- Date:
- Tue May 31 13:40:28 2022 +0000
- Revision:
- 0:798c7207505d
MAJ
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Giamarchi | 0:798c7207505d | 1 | /******************************************************************************* |
Giamarchi | 0:798c7207505d | 2 | Université de Montpellier |
Giamarchi | 0:798c7207505d | 3 | NemoSpace IUT de Nîmes |
Giamarchi | 0:798c7207505d | 4 | IniSat Modèle 1 Version 2 |
Giamarchi | 0:798c7207505d | 5 | *******************************************************************************/ |
Giamarchi | 0:798c7207505d | 6 | // La lecture du GPS utilise une liaison série software |
Giamarchi | 0:798c7207505d | 7 | |
Giamarchi | 0:798c7207505d | 8 | // TP n°5 : Correction |
Giamarchi | 0:798c7207505d | 9 | |
Giamarchi | 0:798c7207505d | 10 | // Exo 1 : Enregistrement des coordonnées GPS sur carte SD |
Giamarchi | 0:798c7207505d | 11 | // Exo 2 : Gestion de messages descendants (Supervision) et montants (Commande) |
Giamarchi | 0:798c7207505d | 12 | // Exo 3 : Tracer sur My Maps votre déplacement autour du batiment (Mission) |
Giamarchi | 0:798c7207505d | 13 | |
Giamarchi | 0:798c7207505d | 14 | #include "mbed.h" |
Giamarchi | 0:798c7207505d | 15 | //#include "platform/mbed_thread.h" |
Giamarchi | 0:798c7207505d | 16 | #include "SDFileSystem.h" |
Giamarchi | 0:798c7207505d | 17 | |
Giamarchi | 0:798c7207505d | 18 | #include "system.h" |
Giamarchi | 0:798c7207505d | 19 | #include "user.h" |
Giamarchi | 0:798c7207505d | 20 | #include "soft_uart.h" |
Giamarchi | 0:798c7207505d | 21 | #include "gps.h" |
Giamarchi | 0:798c7207505d | 22 | |
Giamarchi | 0:798c7207505d | 23 | SDFileSystem sd(PB_5, PB_4, PB_3, PA_11, "sd"); // MOSI, MISO, SCK, CS -> SPI pins on the Inisat |
Giamarchi | 0:798c7207505d | 24 | |
Giamarchi | 0:798c7207505d | 25 | uint8_t etat, etat_mem; |
Giamarchi | 0:798c7207505d | 26 | uint16_t compteur; |
Giamarchi | 0:798c7207505d | 27 | float mes_accu; |
Giamarchi | 0:798c7207505d | 28 | |
Giamarchi | 0:798c7207505d | 29 | int main() |
Giamarchi | 0:798c7207505d | 30 | { |
Giamarchi | 0:798c7207505d | 31 | Init_System(); |
Giamarchi | 0:798c7207505d | 32 | etat = 0; |
Giamarchi | 0:798c7207505d | 33 | Init_Soft_UART(); |
Giamarchi | 0:798c7207505d | 34 | // thread_sleep_for(1000); |
Giamarchi | 0:798c7207505d | 35 | |
Giamarchi | 0:798c7207505d | 36 | // Setup a serial interrupt function to receive data |
Giamarchi | 0:798c7207505d | 37 | |
Giamarchi | 0:798c7207505d | 38 | wait_ms(1000); |
Giamarchi | 0:798c7207505d | 39 | |
Giamarchi | 0:798c7207505d | 40 | while (1) { |
Giamarchi | 0:798c7207505d | 41 | // thread_sleep_for(1); // Boucle toutes les 1 milliseconde environ |
Giamarchi | 0:798c7207505d | 42 | wait_ms(1); |
Giamarchi | 0:798c7207505d | 43 | compteur++; |
Giamarchi | 0:798c7207505d | 44 | |
Giamarchi | 0:798c7207505d | 45 | // Gestion des modes avec une machine d'états |
Giamarchi | 0:798c7207505d | 46 | switch (etat) { |
Giamarchi | 0:798c7207505d | 47 | /******************************************************************************/ |
Giamarchi | 0:798c7207505d | 48 | // Mode Init : Mise sous tension |
Giamarchi | 0:798c7207505d | 49 | // Initialisation du µC |
Giamarchi | 0:798c7207505d | 50 | case 0: { |
Giamarchi | 0:798c7207505d | 51 | Init_User_Fonctions(); |
Giamarchi | 0:798c7207505d | 52 | // thread_sleep_for(1000); |
Giamarchi | 0:798c7207505d | 53 | wait_ms(1000); |
Giamarchi | 0:798c7207505d | 54 | Stop_Led(); |
Giamarchi | 0:798c7207505d | 55 | GPS_Init(); |
Giamarchi | 0:798c7207505d | 56 | Start_Led(); |
Giamarchi | 0:798c7207505d | 57 | Set_Led(Ve); |
Giamarchi | 0:798c7207505d | 58 | // thread_sleep_for(1000); |
Giamarchi | 0:798c7207505d | 59 | wait_ms(1000); |
Giamarchi | 0:798c7207505d | 60 | etat = 1; |
Giamarchi | 0:798c7207505d | 61 | break; } |
Giamarchi | 0:798c7207505d | 62 | /******************************************************************************/ |
Giamarchi | 0:798c7207505d | 63 | // Mode Gestion : Gestion des actions |
Giamarchi | 0:798c7207505d | 64 | // Contrôle du système |
Giamarchi | 0:798c7207505d | 65 | case 1: |
Giamarchi | 0:798c7207505d | 66 | mes_accu = Mes_Bat(); |
Giamarchi | 0:798c7207505d | 67 | if(mes_accu < BAT_SEUIL_BAS_1) { |
Giamarchi | 0:798c7207505d | 68 | etat = 4; |
Giamarchi | 0:798c7207505d | 69 | Set_Led(Ro); |
Giamarchi | 0:798c7207505d | 70 | } else { |
Giamarchi | 0:798c7207505d | 71 | etat = 2; |
Giamarchi | 0:798c7207505d | 72 | Set_Led(Ve); |
Giamarchi | 0:798c7207505d | 73 | } |
Giamarchi | 0:798c7207505d | 74 | // thread_sleep_for(1000); |
Giamarchi | 0:798c7207505d | 75 | wait_ms(1000); |
Giamarchi | 0:798c7207505d | 76 | break; |
Giamarchi | 0:798c7207505d | 77 | /******************************************************************************/ |
Giamarchi | 0:798c7207505d | 78 | // Mode Mission : Acquisition de données |
Giamarchi | 0:798c7207505d | 79 | // Mesure Batterie |
Giamarchi | 0:798c7207505d | 80 | // Mesure Courant faces solaires |
Giamarchi | 0:798c7207505d | 81 | // Stockage |
Giamarchi | 0:798c7207505d | 82 | case 2: |
Giamarchi | 0:798c7207505d | 83 | Lect_GPS(); |
Giamarchi | 0:798c7207505d | 84 | GPS_Decodage(); |
Giamarchi | 0:798c7207505d | 85 | Mes_SP(); |
Giamarchi | 0:798c7207505d | 86 | Mes_Temp(); |
Giamarchi | 0:798c7207505d | 87 | mes_accu = Mes_Bat(); |
Giamarchi | 0:798c7207505d | 88 | if(mes_accu > BAT_SEUIL_HAUT_1) |
Giamarchi | 0:798c7207505d | 89 | { |
Giamarchi | 0:798c7207505d | 90 | etat = 3; |
Giamarchi | 0:798c7207505d | 91 | Set_Led(Ro_Ve); |
Giamarchi | 0:798c7207505d | 92 | } |
Giamarchi | 0:798c7207505d | 93 | else |
Giamarchi | 0:798c7207505d | 94 | { |
Giamarchi | 0:798c7207505d | 95 | etat = 1; |
Giamarchi | 0:798c7207505d | 96 | } |
Giamarchi | 0:798c7207505d | 97 | // thread_sleep_for(1000); |
Giamarchi | 0:798c7207505d | 98 | // wait_ms(1000); |
Giamarchi | 0:798c7207505d | 99 | break; |
Giamarchi | 0:798c7207505d | 100 | /******************************************************************************/ |
Giamarchi | 0:798c7207505d | 101 | // Mode Radio : Transmission de données |
Giamarchi | 0:798c7207505d | 102 | // Mise en forme pour affichage |
Giamarchi | 0:798c7207505d | 103 | case 3: |
Giamarchi | 0:798c7207505d | 104 | Envoi_GPS(); |
Giamarchi | 0:798c7207505d | 105 | Envoi_Mes_Bat(); |
Giamarchi | 0:798c7207505d | 106 | // Envoi_Mes_SP(); |
Giamarchi | 0:798c7207505d | 107 | // Envoi_Mes_Temp(); |
Giamarchi | 0:798c7207505d | 108 | |
Giamarchi | 0:798c7207505d | 109 | // thread_sleep_for(1000); |
Giamarchi | 0:798c7207505d | 110 | // wait_ms(1000); |
Giamarchi | 0:798c7207505d | 111 | etat = 1; |
Giamarchi | 0:798c7207505d | 112 | break; |
Giamarchi | 0:798c7207505d | 113 | /******************************************************************************/ |
Giamarchi | 0:798c7207505d | 114 | // Mode Survie : Attente recharge de l'accu |
Giamarchi | 0:798c7207505d | 115 | |
Giamarchi | 0:798c7207505d | 116 | case 4: |
Giamarchi | 0:798c7207505d | 117 | mes_accu = Mes_Bat(); |
Giamarchi | 0:798c7207505d | 118 | if(mes_accu < BAT_SEUIL_BAS_2) { |
Giamarchi | 0:798c7207505d | 119 | etat = 5; |
Giamarchi | 0:798c7207505d | 120 | Stop_User_Fonctions(); |
Giamarchi | 0:798c7207505d | 121 | } |
Giamarchi | 0:798c7207505d | 122 | |
Giamarchi | 0:798c7207505d | 123 | if(mes_accu > BAT_SEUIL_HAUT_1) { |
Giamarchi | 0:798c7207505d | 124 | etat = 1; |
Giamarchi | 0:798c7207505d | 125 | Set_Led(Ve); |
Giamarchi | 0:798c7207505d | 126 | } |
Giamarchi | 0:798c7207505d | 127 | break; |
Giamarchi | 0:798c7207505d | 128 | /******************************************************************************/ |
Giamarchi | 0:798c7207505d | 129 | // Mode Zombie : Coupure des consommateurs |
Giamarchi | 0:798c7207505d | 130 | // Passage en mode faible consommation |
Giamarchi | 0:798c7207505d | 131 | // Diminution de la fréquence du CPU |
Giamarchi | 0:798c7207505d | 132 | // Passage en mode Sleep |
Giamarchi | 0:798c7207505d | 133 | case 5: |
Giamarchi | 0:798c7207505d | 134 | sleep(); |
Giamarchi | 0:798c7207505d | 135 | mes_accu = Mes_Bat(); |
Giamarchi | 0:798c7207505d | 136 | if(mes_accu > BAT_SEUIL_HAUT_1) |
Giamarchi | 0:798c7207505d | 137 | etat = 0; |
Giamarchi | 0:798c7207505d | 138 | break; |
Giamarchi | 0:798c7207505d | 139 | /******************************************************************************/ |
Giamarchi | 0:798c7207505d | 140 | default: |
Giamarchi | 0:798c7207505d | 141 | etat = 0; |
Giamarchi | 0:798c7207505d | 142 | break; |
Giamarchi | 0:798c7207505d | 143 | /******************************************************************************/ |
Giamarchi | 0:798c7207505d | 144 | } // end switch |
Giamarchi | 0:798c7207505d | 145 | /* if(etat != etat_mem) // Debug des états |
Giamarchi | 0:798c7207505d | 146 | { |
Giamarchi | 0:798c7207505d | 147 | pc.printf("Etat_%d\r\n",etat); |
Giamarchi | 0:798c7207505d | 148 | etat_mem = etat; |
Giamarchi | 0:798c7207505d | 149 | }*/ |
Giamarchi | 0:798c7207505d | 150 | /******************************************************************************/ |
Giamarchi | 0:798c7207505d | 151 | } // end while |
Giamarchi | 0:798c7207505d | 152 | } // end main |
Giamarchi | 0:798c7207505d | 153 | /******************************************************************************/ |