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@0:5cee4b7380b2, 2021-07-06 (annotated)
- Committer:
- Giamarchi
- Date:
- Tue Jul 06 12:47:20 2021 +0000
- Revision:
- 0:5cee4b7380b2
Revision
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Giamarchi | 0:5cee4b7380b2 | 1 | /******************************************************************************* |
Giamarchi | 0:5cee4b7380b2 | 2 | Université de Montpellier |
Giamarchi | 0:5cee4b7380b2 | 3 | NemoSpace IUT de Nîmes |
Giamarchi | 0:5cee4b7380b2 | 4 | IniSat Modèle 1 Version 2 |
Giamarchi | 0:5cee4b7380b2 | 5 | *******************************************************************************/ |
Giamarchi | 0:5cee4b7380b2 | 6 | // TP n°3 : Correction |
Giamarchi | 0:5cee4b7380b2 | 7 | |
Giamarchi | 0:5cee4b7380b2 | 8 | // Exo 1 : Lecture tension batterie |
Giamarchi | 0:5cee4b7380b2 | 9 | // Exo 2 : Lecture courants faces solaires |
Giamarchi | 0:5cee4b7380b2 | 10 | // Exo 3 : Modes de fonctionnement |
Giamarchi | 0:5cee4b7380b2 | 11 | |
Giamarchi | 0:5cee4b7380b2 | 12 | #include "mbed.h" |
Giamarchi | 0:5cee4b7380b2 | 13 | #include "platform/mbed_thread.h" |
Giamarchi | 0:5cee4b7380b2 | 14 | #include "system.h" |
Giamarchi | 0:5cee4b7380b2 | 15 | #include "user.h" |
Giamarchi | 0:5cee4b7380b2 | 16 | |
Giamarchi | 0:5cee4b7380b2 | 17 | uint8_t etat, etat_mem; |
Giamarchi | 0:5cee4b7380b2 | 18 | uint16_t compteur; |
Giamarchi | 0:5cee4b7380b2 | 19 | float mes_accu; |
Giamarchi | 0:5cee4b7380b2 | 20 | |
Giamarchi | 0:5cee4b7380b2 | 21 | int main() |
Giamarchi | 0:5cee4b7380b2 | 22 | { |
Giamarchi | 0:5cee4b7380b2 | 23 | |
Giamarchi | 0:5cee4b7380b2 | 24 | Init_System(); |
Giamarchi | 0:5cee4b7380b2 | 25 | etat = 0; |
Giamarchi | 0:5cee4b7380b2 | 26 | |
Giamarchi | 0:5cee4b7380b2 | 27 | while (1) { |
Giamarchi | 0:5cee4b7380b2 | 28 | thread_sleep_for(1); // Boucle toutes les 1 milliseconde environ |
Giamarchi | 0:5cee4b7380b2 | 29 | compteur++; |
Giamarchi | 0:5cee4b7380b2 | 30 | // Gestion des modes avec une machine d'états |
Giamarchi | 0:5cee4b7380b2 | 31 | switch (etat) { |
Giamarchi | 0:5cee4b7380b2 | 32 | /******************************************************************************/ |
Giamarchi | 0:5cee4b7380b2 | 33 | // Mode Init : Mise sous tension |
Giamarchi | 0:5cee4b7380b2 | 34 | // Initialisation du µC |
Giamarchi | 0:5cee4b7380b2 | 35 | case 0: |
Giamarchi | 0:5cee4b7380b2 | 36 | Init_User_Fonctions(); |
Giamarchi | 0:5cee4b7380b2 | 37 | etat = 1; |
Giamarchi | 0:5cee4b7380b2 | 38 | Set_Led(Ve); |
Giamarchi | 0:5cee4b7380b2 | 39 | thread_sleep_for(3000); |
Giamarchi | 0:5cee4b7380b2 | 40 | break; |
Giamarchi | 0:5cee4b7380b2 | 41 | /******************************************************************************/ |
Giamarchi | 0:5cee4b7380b2 | 42 | // Mode Gestion : Gestion des actions |
Giamarchi | 0:5cee4b7380b2 | 43 | // Contrôle du système |
Giamarchi | 0:5cee4b7380b2 | 44 | case 1: |
Giamarchi | 0:5cee4b7380b2 | 45 | mes_accu = Mes_Bat(); |
Giamarchi | 0:5cee4b7380b2 | 46 | if(mes_accu < BAT_SEUIL_BAS_1) { |
Giamarchi | 0:5cee4b7380b2 | 47 | etat = 4; |
Giamarchi | 0:5cee4b7380b2 | 48 | Set_Led(Ro); |
Giamarchi | 0:5cee4b7380b2 | 49 | } else { |
Giamarchi | 0:5cee4b7380b2 | 50 | etat = 2; |
Giamarchi | 0:5cee4b7380b2 | 51 | Set_Led(Ve); |
Giamarchi | 0:5cee4b7380b2 | 52 | } |
Giamarchi | 0:5cee4b7380b2 | 53 | thread_sleep_for(1000); |
Giamarchi | 0:5cee4b7380b2 | 54 | break; |
Giamarchi | 0:5cee4b7380b2 | 55 | /******************************************************************************/ |
Giamarchi | 0:5cee4b7380b2 | 56 | // Mode Mission : Acquisition de données |
Giamarchi | 0:5cee4b7380b2 | 57 | // Mesure Batterie |
Giamarchi | 0:5cee4b7380b2 | 58 | // Mesure Courant faces solaires |
Giamarchi | 0:5cee4b7380b2 | 59 | // Stockage |
Giamarchi | 0:5cee4b7380b2 | 60 | case 2: |
Giamarchi | 0:5cee4b7380b2 | 61 | Mes_Bat(); |
Giamarchi | 0:5cee4b7380b2 | 62 | Mes_SP(); |
Giamarchi | 0:5cee4b7380b2 | 63 | if(mes_accu > BAT_SEUIL_HAUT_1) |
Giamarchi | 0:5cee4b7380b2 | 64 | { |
Giamarchi | 0:5cee4b7380b2 | 65 | etat = 3; |
Giamarchi | 0:5cee4b7380b2 | 66 | Set_Led(Ro_Ve); |
Giamarchi | 0:5cee4b7380b2 | 67 | } else |
Giamarchi | 0:5cee4b7380b2 | 68 | { |
Giamarchi | 0:5cee4b7380b2 | 69 | etat = 1; |
Giamarchi | 0:5cee4b7380b2 | 70 | } |
Giamarchi | 0:5cee4b7380b2 | 71 | thread_sleep_for(1000); |
Giamarchi | 0:5cee4b7380b2 | 72 | break; |
Giamarchi | 0:5cee4b7380b2 | 73 | /******************************************************************************/ |
Giamarchi | 0:5cee4b7380b2 | 74 | // Mode Radio : Transmission de données |
Giamarchi | 0:5cee4b7380b2 | 75 | // Mise en forme pour affichage |
Giamarchi | 0:5cee4b7380b2 | 76 | case 3: |
Giamarchi | 0:5cee4b7380b2 | 77 | Envoi_Mes_Bat(); |
Giamarchi | 0:5cee4b7380b2 | 78 | Envoi_Mes_SP(); |
Giamarchi | 0:5cee4b7380b2 | 79 | etat = 1; |
Giamarchi | 0:5cee4b7380b2 | 80 | thread_sleep_for(1000); |
Giamarchi | 0:5cee4b7380b2 | 81 | break; |
Giamarchi | 0:5cee4b7380b2 | 82 | /******************************************************************************/ |
Giamarchi | 0:5cee4b7380b2 | 83 | // Mode Survie : Attente recharge de l'accu |
Giamarchi | 0:5cee4b7380b2 | 84 | |
Giamarchi | 0:5cee4b7380b2 | 85 | case 4: |
Giamarchi | 0:5cee4b7380b2 | 86 | mes_accu = Mes_Bat(); |
Giamarchi | 0:5cee4b7380b2 | 87 | if(mes_accu < BAT_SEUIL_BAS_2) { |
Giamarchi | 0:5cee4b7380b2 | 88 | etat = 5; |
Giamarchi | 0:5cee4b7380b2 | 89 | Stop_User_Fonctions(); |
Giamarchi | 0:5cee4b7380b2 | 90 | } |
Giamarchi | 0:5cee4b7380b2 | 91 | |
Giamarchi | 0:5cee4b7380b2 | 92 | if(mes_accu > BAT_SEUIL_HAUT_1) { |
Giamarchi | 0:5cee4b7380b2 | 93 | etat = 1; |
Giamarchi | 0:5cee4b7380b2 | 94 | Set_Led(Ve); |
Giamarchi | 0:5cee4b7380b2 | 95 | } |
Giamarchi | 0:5cee4b7380b2 | 96 | break; |
Giamarchi | 0:5cee4b7380b2 | 97 | /******************************************************************************/ |
Giamarchi | 0:5cee4b7380b2 | 98 | // Mode Zombie : Coupure des consommateurs |
Giamarchi | 0:5cee4b7380b2 | 99 | // Passage en mode faible consommation |
Giamarchi | 0:5cee4b7380b2 | 100 | // Diminution de la fréquence du CPU |
Giamarchi | 0:5cee4b7380b2 | 101 | // Passage en mode Sleep |
Giamarchi | 0:5cee4b7380b2 | 102 | case 5: |
Giamarchi | 0:5cee4b7380b2 | 103 | sleep(); |
Giamarchi | 0:5cee4b7380b2 | 104 | mes_accu = Mes_Bat(); |
Giamarchi | 0:5cee4b7380b2 | 105 | if(mes_accu > BAT_SEUIL_HAUT_1) |
Giamarchi | 0:5cee4b7380b2 | 106 | etat = 0; |
Giamarchi | 0:5cee4b7380b2 | 107 | break; |
Giamarchi | 0:5cee4b7380b2 | 108 | /******************************************************************************/ |
Giamarchi | 0:5cee4b7380b2 | 109 | default: |
Giamarchi | 0:5cee4b7380b2 | 110 | etat = 0; |
Giamarchi | 0:5cee4b7380b2 | 111 | break; |
Giamarchi | 0:5cee4b7380b2 | 112 | /******************************************************************************/ |
Giamarchi | 0:5cee4b7380b2 | 113 | } // end switch |
Giamarchi | 0:5cee4b7380b2 | 114 | if(etat != etat_mem) // Debug des états |
Giamarchi | 0:5cee4b7380b2 | 115 | { |
Giamarchi | 0:5cee4b7380b2 | 116 | pc.printf("Etat_%d\r\n",etat); |
Giamarchi | 0:5cee4b7380b2 | 117 | etat_mem = etat; |
Giamarchi | 0:5cee4b7380b2 | 118 | } |
Giamarchi | 0:5cee4b7380b2 | 119 | } // end while |
Giamarchi | 0:5cee4b7380b2 | 120 | } // end main |
Giamarchi | 0:5cee4b7380b2 | 121 | /******************************************************************************/ |