Shared by Polytech Marseille to contribute to the improvement of the mbed community !
Dependencies: Adafruit_SGP30_mbed mbed GSM X_NUCLEO_IKS01A2 max31865 GroveGPS SDFileSystem DFPlayerMini BME280 DS1820
main.cpp@3:cb77ea3370e8, 2019-04-30 (annotated)
- Committer:
- ayoubzahir
- Date:
- Tue Apr 30 15:00:03 2019 +0000
- Revision:
- 3:cb77ea3370e8
- Parent:
- 0:d7a683cf76d9
This Program is shared by PolytechMarseille_MT to contribute to the improvement of the mbed community.; Have fun !
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ayoubzahir | 3:cb77ea3370e8 | 1 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 2 | // AMU - Aix-Marseille Université |
ayoubzahir | 3:cb77ea3370e8 | 3 | // Polytech Marseille - Microelectronique & Telecommunications (MT) |
ayoubzahir | 3:cb77ea3370e8 | 4 | // Projet MT5A "STM32 In the Sky - HAB", 2018-2019 |
ayoubzahir | 3:cb77ea3370e8 | 5 | // Enseignants : C.Dufaza & H. Aziza |
ayoubzahir | 3:cb77ea3370e8 | 6 | // Etudiants : ... |
ayoubzahir | 3:cb77ea3370e8 | 7 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 8 | // Version avril 2019, C.Dufaza |
ayoubzahir | 3:cb77ea3370e8 | 9 | /* todo : |
ayoubzahir | 3:cb77ea3370e8 | 10 | - resoudre incompatibilité mbed thermomètre DS18 |
ayoubzahir | 3:cb77ea3370e8 | 11 | - utilisation de l'entrée Reset du module GSM |
ayoubzahir | 3:cb77ea3370e8 | 12 | - check si le lecteur MP3 est bien actif |
ayoubzahir | 3:cb77ea3370e8 | 13 | */ |
ayoubzahir | 3:cb77ea3370e8 | 14 | |
ayoubzahir | 3:cb77ea3370e8 | 15 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 16 | //// ... Includes |
ayoubzahir | 3:cb77ea3370e8 | 17 | |
ayoubzahir | 3:cb77ea3370e8 | 18 | // Activation des différents modules de ce code (via directives de compilation) |
ayoubzahir | 3:cb77ea3370e8 | 19 | #include "define_myMODULES.h" |
ayoubzahir | 3:cb77ea3370e8 | 20 | // Assignation des entrées/sorties des différents modules |
ayoubzahir | 3:cb77ea3370e8 | 21 | #include "define_myIO.h" |
ayoubzahir | 3:cb77ea3370e8 | 22 | // Include usuels ... |
ayoubzahir | 3:cb77ea3370e8 | 23 | #include <stdio.h> |
ayoubzahir | 3:cb77ea3370e8 | 24 | #include <string> |
ayoubzahir | 3:cb77ea3370e8 | 25 | #include "mbed.h" |
ayoubzahir | 3:cb77ea3370e8 | 26 | |
ayoubzahir | 3:cb77ea3370e8 | 27 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 28 | //// Main code |
ayoubzahir | 3:cb77ea3370e8 | 29 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 30 | |
ayoubzahir | 3:cb77ea3370e8 | 31 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 32 | //// Variables globales ... |
ayoubzahir | 3:cb77ea3370e8 | 33 | |
ayoubzahir | 3:cb77ea3370e8 | 34 | // Compteur du nombre de recolte de données depuis le démarrage |
ayoubzahir | 3:cb77ea3370e8 | 35 | unsigned int hab_frame_counter = 1; |
ayoubzahir | 3:cb77ea3370e8 | 36 | // Mesure de la tension de la batterie |
ayoubzahir | 3:cb77ea3370e8 | 37 | float vbatt = 0.0; |
ayoubzahir | 3:cb77ea3370e8 | 38 | AnalogIn pin_vbatt(IO_VBATT); |
ayoubzahir | 3:cb77ea3370e8 | 39 | // Trame des données des capteurs à stocker sur la carte sd et au GPRS |
ayoubzahir | 3:cb77ea3370e8 | 40 | char sd_gprs_data[SD_GPRS_DATA_SIZE]; |
ayoubzahir | 3:cb77ea3370e8 | 41 | // GPS variables |
ayoubzahir | 3:cb77ea3370e8 | 42 | unsigned int timeUTC = 0; |
ayoubzahir | 3:cb77ea3370e8 | 43 | float lat = 0, lon = 0, alt = 0, speed = 0; |
ayoubzahir | 3:cb77ea3370e8 | 44 | // Xnucleo variables |
ayoubzahir | 3:cb77ea3370e8 | 45 | float xnuc_t = 0.0, xnuc_h = 0.0, xnuc_t2 = 0.0, xnuc_p = 0.0; |
ayoubzahir | 3:cb77ea3370e8 | 46 | int32_t xnuc_acc[3]; |
ayoubzahir | 3:cb77ea3370e8 | 47 | // PT100 variables |
ayoubzahir | 3:cb77ea3370e8 | 48 | double tempPT100 = 0; |
ayoubzahir | 3:cb77ea3370e8 | 49 | // SGP30 variables |
ayoubzahir | 3:cb77ea3370e8 | 50 | int eco2 = 0, tvoc = 0; |
ayoubzahir | 3:cb77ea3370e8 | 51 | // Temperature DS18 variable |
ayoubzahir | 3:cb77ea3370e8 | 52 | float tempDS18 = 0; |
ayoubzahir | 3:cb77ea3370e8 | 53 | // UV & Photo variables |
ayoubzahir | 3:cb77ea3370e8 | 54 | float uv = 0, photores = 0; |
ayoubzahir | 3:cb77ea3370e8 | 55 | // BME280 variables (temperature, pression, humidité exterieure) |
ayoubzahir | 3:cb77ea3370e8 | 56 | float bosch_t = 0, bosch_p = 0, bosch_h = 0; |
ayoubzahir | 3:cb77ea3370e8 | 57 | // Ozone variable |
ayoubzahir | 3:cb77ea3370e8 | 58 | double ozone = 0; |
ayoubzahir | 3:cb77ea3370e8 | 59 | |
ayoubzahir | 3:cb77ea3370e8 | 60 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 61 | //// Tickers d'interruption |
ayoubzahir | 3:cb77ea3370e8 | 62 | |
ayoubzahir | 3:cb77ea3370e8 | 63 | // Ticker executé toute les xx s pour recolter toute les données des capteurs, |
ayoubzahir | 3:cb77ea3370e8 | 64 | // les enregistrer sur la carte SD et les envoyer en UART à la carte LoRa |
ayoubzahir | 3:cb77ea3370e8 | 65 | #ifdef HAB_FUNCTION // Debut directive de compilation module HAB |
ayoubzahir | 3:cb77ea3370e8 | 66 | Ticker ticker_hab; // Object Ticker |
ayoubzahir | 3:cb77ea3370e8 | 67 | void isr_ticker_hab(); // Routine ISR appellée lors du tick |
ayoubzahir | 3:cb77ea3370e8 | 68 | void f_ticker_hab(); // Fonction utile appellée à la suite du tick |
ayoubzahir | 3:cb77ea3370e8 | 69 | bool flag_ticker_hab = 0; // Flag levé par l'ISR pour appeller la fonction utile |
ayoubzahir | 3:cb77ea3370e8 | 70 | #endif // Fin directive de compilation module HAB |
ayoubzahir | 3:cb77ea3370e8 | 71 | |
ayoubzahir | 3:cb77ea3370e8 | 72 | // Ticker executé toute les xx s pour vérifier l'etat du module GSM |
ayoubzahir | 3:cb77ea3370e8 | 73 | #ifdef GSM_FUNCTION // Debut directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 74 | Ticker ticker_check_gsm; // Object Ticker |
ayoubzahir | 3:cb77ea3370e8 | 75 | void isr_ticker_check_gsm(); // Routine ISR appellée lors du tick |
ayoubzahir | 3:cb77ea3370e8 | 76 | void f_ticker_check_gsm(); // Fonction utile appellée à la suite du tick |
ayoubzahir | 3:cb77ea3370e8 | 77 | bool flag_ticker_check_gsm = 0; // Flag levé par l'ISR pour appeller la fonction utile |
ayoubzahir | 3:cb77ea3370e8 | 78 | #endif // Fin directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 79 | |
ayoubzahir | 3:cb77ea3370e8 | 80 | // Ticker executé toute les 10 min pour vérifier l'etat du module GPRS SMS |
ayoubzahir | 3:cb77ea3370e8 | 81 | #ifdef SMS_FUNCTION // Debut directive de compilation SMS de données toutes les 10 min |
ayoubzahir | 3:cb77ea3370e8 | 82 | Ticker ticker_sms_data; // Object Ticker |
ayoubzahir | 3:cb77ea3370e8 | 83 | void isr_ticker_sms_data(); // Routine ISR appellée lors du tick |
ayoubzahir | 3:cb77ea3370e8 | 84 | void f_ticker_sms_data(); // Fonction utile appellée à la suite du tick |
ayoubzahir | 3:cb77ea3370e8 | 85 | bool flag_ticker_sms_data = 0; // Flag levé par l'ISR pour appeller la fonction utile |
ayoubzahir | 3:cb77ea3370e8 | 86 | #endif // Fin directive de compilation SMS de données toutes les 10 min |
ayoubzahir | 3:cb77ea3370e8 | 87 | |
ayoubzahir | 3:cb77ea3370e8 | 88 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 89 | // UART PC Debug |
ayoubzahir | 3:cb77ea3370e8 | 90 | #ifdef DEBUG_SERIAL_PC // ACtivation de la liaison UART PC pour Debug |
ayoubzahir | 3:cb77ea3370e8 | 91 | Serial serial_pc(SERIAL_TX, SERIAL_RX, DEBUG_SERIAL_PC_BAUDRATE); |
ayoubzahir | 3:cb77ea3370e8 | 92 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 93 | |
ayoubzahir | 3:cb77ea3370e8 | 94 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 95 | // Buzzer digital Out pin |
ayoubzahir | 3:cb77ea3370e8 | 96 | #ifdef BUZZ_FUNCTION // Debut directive de compilation buzzer |
ayoubzahir | 3:cb77ea3370e8 | 97 | DigitalOut pin_buzzer(IO_BUZZER,0); |
ayoubzahir | 3:cb77ea3370e8 | 98 | #endif // Fin directive de compilation buzzer |
ayoubzahir | 3:cb77ea3370e8 | 99 | |
ayoubzahir | 3:cb77ea3370e8 | 100 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 101 | // Carte SD |
ayoubzahir | 3:cb77ea3370e8 | 102 | #ifdef SD_FUNCTION // Debut directive de compilation carte SD |
ayoubzahir | 3:cb77ea3370e8 | 103 | #include "SDFileSystem.h" |
ayoubzahir | 3:cb77ea3370e8 | 104 | // MOSI, MISO, SCK, SS |
ayoubzahir | 3:cb77ea3370e8 | 105 | SDFileSystem sd(IO_SD_MOSI, IO_SD_MISO, IO_SD_SCK, IO_SD_CS, SD_FUNCTION_SDNAME); |
ayoubzahir | 3:cb77ea3370e8 | 106 | // flag_sd_ok = 1 après la 1ere initialisation reussie de la carte SD |
ayoubzahir | 3:cb77ea3370e8 | 107 | bool flag_sd_ok = 0; |
ayoubzahir | 3:cb77ea3370e8 | 108 | #endif // Fin directive de compilation carte SD |
ayoubzahir | 3:cb77ea3370e8 | 109 | |
ayoubzahir | 3:cb77ea3370e8 | 110 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 111 | // Lecteur MP3 DFPlayer |
ayoubzahir | 3:cb77ea3370e8 | 112 | #ifdef MP3_FUNCTION // Debut directive de compilation lecteur MP3 |
ayoubzahir | 3:cb77ea3370e8 | 113 | #include "DFPlayerMini.h" |
ayoubzahir | 3:cb77ea3370e8 | 114 | DFPlayerMini mp3(IO_MP3_TX, IO_MP3_RX); //TX, RX |
ayoubzahir | 3:cb77ea3370e8 | 115 | #endif // Fin directive de compilation MP3 |
ayoubzahir | 3:cb77ea3370e8 | 116 | |
ayoubzahir | 3:cb77ea3370e8 | 117 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 118 | // Module GSM |
ayoubzahir | 3:cb77ea3370e8 | 119 | #ifdef GSM_FUNCTION // Debut directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 120 | #include <GSM.h> // GSM Library |
ayoubzahir | 3:cb77ea3370e8 | 121 | // Flag mis à jour par interruption externe sur la LED NET. |
ayoubzahir | 3:cb77ea3370e8 | 122 | // Passe a true lorsque sa période de clignotement est d'environ 3s |
ayoubzahir | 3:cb77ea3370e8 | 123 | bool flag_gsm_network_ok = 0; |
ayoubzahir | 3:cb77ea3370e8 | 124 | // Flag a abaisser lors de la 1ere réponse materielle du module GSM |
ayoubzahir | 3:cb77ea3370e8 | 125 | bool flag_gsm_absent = 1; |
ayoubzahir | 3:cb77ea3370e8 | 126 | // Flag à lever lors de la confirmation de la présence matérielle du module GSM |
ayoubzahir | 3:cb77ea3370e8 | 127 | // et de son démarrage en cours, et à abaisser lorsque celui ci a également démarrer logiciellement |
ayoubzahir | 3:cb77ea3370e8 | 128 | bool flag_gsm_starting = 0; |
ayoubzahir | 3:cb77ea3370e8 | 129 | // Compteur calé sur le ticker HAB de période ~5 s, qui compte le temps depuis |
ayoubzahir | 3:cb77ea3370e8 | 130 | // le dernier reset du module GSM, pour eviter un reset trop fréquent si la connexion est mauvaise. |
ayoubzahir | 3:cb77ea3370e8 | 131 | unsigned int last_reset_gsm = 0; |
ayoubzahir | 3:cb77ea3370e8 | 132 | // GSM I/O PinInOut |
ayoubzahir | 3:cb77ea3370e8 | 133 | DigitalOut gsm_pwr(IO_GSM_PWR); // Sortie d'allumage du GSM |
ayoubzahir | 3:cb77ea3370e8 | 134 | // todo sortie RESET du GSM |
ayoubzahir | 3:cb77ea3370e8 | 135 | InterruptIn gsm_net(IO_GSM_NET); // Entrée de la LED "NET" |
ayoubzahir | 3:cb77ea3370e8 | 136 | DigitalIn gsm_status(IO_GSM_STAT); // Entrée de la LED "STATUS" |
ayoubzahir | 3:cb77ea3370e8 | 137 | //TX, RX, PWR, NET, STATUS, baudrate, num par defaut |
ayoubzahir | 3:cb77ea3370e8 | 138 | GSM gsm(IO_GSM_TX, IO_GSM_RX, GSM_BAUDRATE, GSM_SIM_NUMBER); |
ayoubzahir | 3:cb77ea3370e8 | 139 | // URL du serveur web |
ayoubzahir | 3:cb77ea3370e8 | 140 | char * url_srv_polytech = POLYTECH_SERVER; |
ayoubzahir | 3:cb77ea3370e8 | 141 | #endif // Fin directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 142 | |
ayoubzahir | 3:cb77ea3370e8 | 143 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 144 | // Module GPS |
ayoubzahir | 3:cb77ea3370e8 | 145 | #ifdef GPS_FUNCTION // Debut directive de compilation module GPS |
ayoubzahir | 3:cb77ea3370e8 | 146 | #include "GroveGPS.h" |
ayoubzahir | 3:cb77ea3370e8 | 147 | //TX, RX, liaison STM --> GPS |
ayoubzahir | 3:cb77ea3370e8 | 148 | Serial gps_serial(IO_GPS_TX, IO_GPS_RX, GPS_BAUDRATE); |
ayoubzahir | 3:cb77ea3370e8 | 149 | GroveGPS gps; |
ayoubzahir | 3:cb77ea3370e8 | 150 | void isr_gps_serial(); // Fonction d'interuption de reception sur le port UART GPS |
ayoubzahir | 3:cb77ea3370e8 | 151 | char timeUTCBuffer[16], latBuffer[16], lonBuffer[16], altBuffer[16], speedBuffer[16]; |
ayoubzahir | 3:cb77ea3370e8 | 152 | #endif // Fin directive de compilation module GPS |
ayoubzahir | 3:cb77ea3370e8 | 153 | |
ayoubzahir | 3:cb77ea3370e8 | 154 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 155 | // Shield capteurs ST X_NUCLEO_IKS01A2 |
ayoubzahir | 3:cb77ea3370e8 | 156 | #ifdef XNUCLEO_FUNCTION // Debut directive de compilation shield capteurs XNUCLEO |
ayoubzahir | 3:cb77ea3370e8 | 157 | #include "XNucleoIKS01A2.h" |
ayoubzahir | 3:cb77ea3370e8 | 158 | // Instantiate the expansion board: SDA, SCL, option(INT1, INT2) |
ayoubzahir | 3:cb77ea3370e8 | 159 | static XNucleoIKS01A2 *mems_expansion_board = XNucleoIKS01A2::instance(IO_XNUC_SDA, IO_XNUC_SCL); |
ayoubzahir | 3:cb77ea3370e8 | 160 | static HTS221Sensor *hum_temp = mems_expansion_board->ht_sensor; |
ayoubzahir | 3:cb77ea3370e8 | 161 | static LPS22HBSensor *press_temp = mems_expansion_board->pt_sensor; |
ayoubzahir | 3:cb77ea3370e8 | 162 | static LSM303AGRAccSensor *accelerometer = mems_expansion_board->accelerometer; |
ayoubzahir | 3:cb77ea3370e8 | 163 | #endif // Fin directive de compilation shield capteurs XNUCLEO |
ayoubzahir | 3:cb77ea3370e8 | 164 | |
ayoubzahir | 3:cb77ea3370e8 | 165 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 166 | // Sonde de température PT100 sur ampli MAX31865 |
ayoubzahir | 3:cb77ea3370e8 | 167 | #ifdef PT100_FUNCTION // Debut directive de compilation module PT100 |
ayoubzahir | 3:cb77ea3370e8 | 168 | #include "MAX31865.h" |
ayoubzahir | 3:cb77ea3370e8 | 169 | // MOSI, MISO, SCK, SS : SPI du MAX311865 |
ayoubzahir | 3:cb77ea3370e8 | 170 | MAX31865_RTD PT100(MAX31865_RTD::RTD_PT100,IO_PT100_MOSI, IO_PT100_MISO, IO_PT100_SCK, IO_PT100_CS); |
ayoubzahir | 3:cb77ea3370e8 | 171 | #endif // Fin directive de compilation module PT100 |
ayoubzahir | 3:cb77ea3370e8 | 172 | |
ayoubzahir | 3:cb77ea3370e8 | 173 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 174 | // Capteur de temperature (exterieur haut) DS181B20 |
ayoubzahir | 3:cb77ea3370e8 | 175 | #ifdef DS18_FUNCTION // Debut directive de compilation DS181B20 |
ayoubzahir | 3:cb77ea3370e8 | 176 | #include "DS1820.h" |
ayoubzahir | 3:cb77ea3370e8 | 177 | DS1820 ds18(IO_DS18); |
ayoubzahir | 3:cb77ea3370e8 | 178 | #endif // Fin directive de compilation DS181B20 |
ayoubzahir | 3:cb77ea3370e8 | 179 | |
ayoubzahir | 3:cb77ea3370e8 | 180 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 181 | // Capteurs lumière (UV et photoresistance) |
ayoubzahir | 3:cb77ea3370e8 | 182 | #ifdef UV_FUNCTION // Debut directive de compilation capteur UV |
ayoubzahir | 3:cb77ea3370e8 | 183 | AnalogIn pin_UV(IO_UV); |
ayoubzahir | 3:cb77ea3370e8 | 184 | #endif // Fin directive de compilation capteur UV |
ayoubzahir | 3:cb77ea3370e8 | 185 | #ifdef PHOTORES_FUNCTION // Debut directive de compilation capteur lumière |
ayoubzahir | 3:cb77ea3370e8 | 186 | AnalogIn pin_photores(IO_PHOTORES); |
ayoubzahir | 3:cb77ea3370e8 | 187 | #endif // Fin directive de compilation capteur lumière |
ayoubzahir | 3:cb77ea3370e8 | 188 | |
ayoubzahir | 3:cb77ea3370e8 | 189 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 190 | // Capteur Bosch BME280 (temperature, pression, humidité exterieure) |
ayoubzahir | 3:cb77ea3370e8 | 191 | #ifdef BOSCH_FUNCTION // Debut directive de compilation Bosch |
ayoubzahir | 3:cb77ea3370e8 | 192 | #include "BME280.h" |
ayoubzahir | 3:cb77ea3370e8 | 193 | BME280 bosch(IO_BOSCH_SDA, IO_BOSCH_SCL); // SDA, SCL |
ayoubzahir | 3:cb77ea3370e8 | 194 | #endif // Fin directive de compilation Bosch |
ayoubzahir | 3:cb77ea3370e8 | 195 | |
ayoubzahir | 3:cb77ea3370e8 | 196 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 197 | // Capteur eCO2/TVOC SGP30, voir note : |
ayoubzahir | 3:cb77ea3370e8 | 198 | // Le module eCO2/TVOC produira pendant ~20 s des resultats invalides |
ayoubzahir | 3:cb77ea3370e8 | 199 | // eCO2=400 et TVOC=0, patientez quelques instants |
ayoubzahir | 3:cb77ea3370e8 | 200 | // module à allumer 48h à l'avance pour résultats optimums |
ayoubzahir | 3:cb77ea3370e8 | 201 | #ifdef CO2_FUNCTION // Debut directive de compilation module CO2 |
ayoubzahir | 3:cb77ea3370e8 | 202 | #include "Adafruit_SGP30.h" |
ayoubzahir | 3:cb77ea3370e8 | 203 | Adafruit_SGP30 co2(IO_CO2_SDA, IO_CO2_SCL); // SDA, SCL |
ayoubzahir | 3:cb77ea3370e8 | 204 | #endif // Fin directive de compilation module CO2 |
ayoubzahir | 3:cb77ea3370e8 | 205 | |
ayoubzahir | 3:cb77ea3370e8 | 206 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 207 | // Capteur Ozone O3 |
ayoubzahir | 3:cb77ea3370e8 | 208 | // ... todo |
ayoubzahir | 3:cb77ea3370e8 | 209 | #ifdef O3_FUNCTION // Debut directive de compilation spi_ozone |
ayoubzahir | 3:cb77ea3370e8 | 210 | SPI spi_ozone(PB_15, PB_14, PB_13); // MOSI, MISO, SCK |
ayoubzahir | 3:cb77ea3370e8 | 211 | DigitalOut ozone_SS(IO_O3_CS,1); |
ayoubzahir | 3:cb77ea3370e8 | 212 | #endif // Fin directive de compilation spi_ozone |
ayoubzahir | 3:cb77ea3370e8 | 213 | |
ayoubzahir | 3:cb77ea3370e8 | 214 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 215 | // LORA Module |
ayoubzahir | 3:cb77ea3370e8 | 216 | #ifdef LORA_FUNCTION // Debut directive de compilation LoRa |
ayoubzahir | 3:cb77ea3370e8 | 217 | // todo: liaison UART avec carte LoRa + watchdog carte mère |
ayoubzahir | 3:cb77ea3370e8 | 218 | Serial lora_serial(IO_LORA_TX, IO_LORA_RX, LORA_FUNCTION_BAUDRATE); |
ayoubzahir | 3:cb77ea3370e8 | 219 | // Chaine de char contenant la trame des données des capteurs à envoyer |
ayoubzahir | 3:cb77ea3370e8 | 220 | char lora_data_tx[LORA_FUNCTION_DATASIZE]; |
ayoubzahir | 3:cb77ea3370e8 | 221 | #endif // Fin directive de compilation LoRa |
ayoubzahir | 3:cb77ea3370e8 | 222 | |
ayoubzahir | 3:cb77ea3370e8 | 223 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 224 | //// Fonctions annexes |
ayoubzahir | 3:cb77ea3370e8 | 225 | |
ayoubzahir | 3:cb77ea3370e8 | 226 | //////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 227 | // Pression - Altitude |
ayoubzahir | 3:cb77ea3370e8 | 228 | double sealevel(double P, double A) |
ayoubzahir | 3:cb77ea3370e8 | 229 | // Given a pressure P (mb) taken at a specific altitude (meters), |
ayoubzahir | 3:cb77ea3370e8 | 230 | // return the equivalent pressure (mb) at sea level. |
ayoubzahir | 3:cb77ea3370e8 | 231 | // This produces pressure readings that can be used for weather measurements. |
ayoubzahir | 3:cb77ea3370e8 | 232 | { return (P / pow(1 - (A / 44330.0), 5.255)); |
ayoubzahir | 3:cb77ea3370e8 | 233 | } |
ayoubzahir | 3:cb77ea3370e8 | 234 | |
ayoubzahir | 3:cb77ea3370e8 | 235 | double altitude(double P, double P0) |
ayoubzahir | 3:cb77ea3370e8 | 236 | // Given a pressure measurement P (mb) and the pressure at a baseline P0 (mb), |
ayoubzahir | 3:cb77ea3370e8 | 237 | // return altitude (meters) above baseline. |
ayoubzahir | 3:cb77ea3370e8 | 238 | { return (44330.0 * (1 - pow(P / P0, 1 / 5.255))); |
ayoubzahir | 3:cb77ea3370e8 | 239 | } |
ayoubzahir | 3:cb77ea3370e8 | 240 | |
ayoubzahir | 3:cb77ea3370e8 | 241 | // Initialise l'interruption GPS ... pré-déclaration |
ayoubzahir | 3:cb77ea3370e8 | 242 | void irq_gps_on(); |
ayoubzahir | 3:cb77ea3370e8 | 243 | void irq_gps_off(); |
ayoubzahir | 3:cb77ea3370e8 | 244 | |
ayoubzahir | 3:cb77ea3370e8 | 245 | // Permet de gérer les modes On-Off des Interruption & Tickers |
ayoubzahir | 3:cb77ea3370e8 | 246 | void all_irq_on_off(int gps_on_off, int gsm_on_off, int ticker_hab_on_off, int ticker_gsm_on_off) { |
ayoubzahir | 3:cb77ea3370e8 | 247 | // Interruption GPS On ou Off |
ayoubzahir | 3:cb77ea3370e8 | 248 | if(gps_on_off == 1) { irq_gps_on(); } |
ayoubzahir | 3:cb77ea3370e8 | 249 | if(gps_on_off == 0) { irq_gps_off(); } |
ayoubzahir | 3:cb77ea3370e8 | 250 | // Module GSM Enable ou Disable |
ayoubzahir | 3:cb77ea3370e8 | 251 | if(gsm_on_off == 1) { gsm_net.enable_irq(); } |
ayoubzahir | 3:cb77ea3370e8 | 252 | if(gsm_on_off == 0) { gsm_net.disable_irq(); } |
ayoubzahir | 3:cb77ea3370e8 | 253 | // Ticker HAB Attach ou Detach |
ayoubzahir | 3:cb77ea3370e8 | 254 | if(ticker_hab_on_off == 1) { ticker_hab.attach(&isr_ticker_hab, TICKER_HAB_TIME); } |
ayoubzahir | 3:cb77ea3370e8 | 255 | if(ticker_hab_on_off == 0) { ticker_hab.detach(); } |
ayoubzahir | 3:cb77ea3370e8 | 256 | // Ticker GSM Attach ou Detach |
ayoubzahir | 3:cb77ea3370e8 | 257 | if(ticker_gsm_on_off == 1) { ticker_check_gsm.attach(&isr_ticker_check_gsm, TICKER_CHECK_GSM_TIME); } |
ayoubzahir | 3:cb77ea3370e8 | 258 | if(ticker_gsm_on_off == 0) { ticker_check_gsm.detach(); } |
ayoubzahir | 3:cb77ea3370e8 | 259 | } |
ayoubzahir | 3:cb77ea3370e8 | 260 | |
ayoubzahir | 3:cb77ea3370e8 | 261 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 262 | // SD |
ayoubzahir | 3:cb77ea3370e8 | 263 | #ifdef SD_FUNCTION // Debut directive de compilation carte SD |
ayoubzahir | 3:cb77ea3370e8 | 264 | |
ayoubzahir | 3:cb77ea3370e8 | 265 | // Fonction qui ecrit le message dans le fichier passés en arguments sur la carte SD initialisée |
ayoubzahir | 3:cb77ea3370e8 | 266 | void ecriture_sd(char * fichier, char * message) { |
ayoubzahir | 3:cb77ea3370e8 | 267 | // Si la carte SD n'est pas initialisée on quitte |
ayoubzahir | 3:cb77ea3370e8 | 268 | if(flag_sd_ok == 0) return; |
ayoubzahir | 3:cb77ea3370e8 | 269 | // On désactive l'interruption UART pour GPS |
ayoubzahir | 3:cb77ea3370e8 | 270 | all_irq_on_off(0, 2, 2, 2); // irq_gps_off(); |
ayoubzahir | 3:cb77ea3370e8 | 271 | // Fichier en mode a - append ... du type "/sd/data.txt" |
ayoubzahir | 3:cb77ea3370e8 | 272 | FILE *fp = fopen(fichier, "a"); |
ayoubzahir | 3:cb77ea3370e8 | 273 | if(fp == NULL) { // Erreur d'ouverture du fichier |
ayoubzahir | 3:cb77ea3370e8 | 274 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 275 | serial_pc.printf("<<<< ERREUR >>>> carte SD, ouverture fichier impossible\n"); |
ayoubzahir | 3:cb77ea3370e8 | 276 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 277 | } |
ayoubzahir | 3:cb77ea3370e8 | 278 | else { // Fichier correctement ouvert en mode append, écriture puis fermeture |
ayoubzahir | 3:cb77ea3370e8 | 279 | fprintf(fp, message); fprintf(fp, "\n"); |
ayoubzahir | 3:cb77ea3370e8 | 280 | fclose(fp); |
ayoubzahir | 3:cb77ea3370e8 | 281 | } |
ayoubzahir | 3:cb77ea3370e8 | 282 | // Ré-activation de l'interruption UART pour GPS |
ayoubzahir | 3:cb77ea3370e8 | 283 | all_irq_on_off(1, 2, 2, 2); // irq_gps_on(); |
ayoubzahir | 3:cb77ea3370e8 | 284 | } |
ayoubzahir | 3:cb77ea3370e8 | 285 | |
ayoubzahir | 3:cb77ea3370e8 | 286 | #endif // Fin directive de compilation carte SD |
ayoubzahir | 3:cb77ea3370e8 | 287 | |
ayoubzahir | 3:cb77ea3370e8 | 288 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 289 | // GSM |
ayoubzahir | 3:cb77ea3370e8 | 290 | #ifdef GSM_FUNCTION // Debut directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 291 | |
ayoubzahir | 3:cb77ea3370e8 | 292 | // Initialise le GSM ... pré-déclaration |
ayoubzahir | 3:cb77ea3370e8 | 293 | void init_GSM(); |
ayoubzahir | 3:cb77ea3370e8 | 294 | |
ayoubzahir | 3:cb77ea3370e8 | 295 | // Variables GSM |
ayoubzahir | 3:cb77ea3370e8 | 296 | Timer timer_gsm_network; // Compteur de la période de clignotement de la LED "NET" |
ayoubzahir | 3:cb77ea3370e8 | 297 | unsigned int last_time_gsm_network = 0; |
ayoubzahir | 3:cb77ea3370e8 | 298 | |
ayoubzahir | 3:cb77ea3370e8 | 299 | void isr_network_gsm() { |
ayoubzahir | 3:cb77ea3370e8 | 300 | // Arret de toute les sources d'interruptions |
ayoubzahir | 3:cb77ea3370e8 | 301 | all_irq_on_off(0, 0, 2, 2); |
ayoubzahir | 3:cb77ea3370e8 | 302 | //irq_gps_off(); // Interruption GPS off |
ayoubzahir | 3:cb77ea3370e8 | 303 | //gsm_net.disable_irq(); // Disable interrupt GSM |
ayoubzahir | 3:cb77ea3370e8 | 304 | |
ayoubzahir | 3:cb77ea3370e8 | 305 | timer_gsm_network.stop(); // Arret du timer GSM |
ayoubzahir | 3:cb77ea3370e8 | 306 | last_time_gsm_network = timer_gsm_network.read_ms(); // Lecture du timer GSM |
ayoubzahir | 3:cb77ea3370e8 | 307 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 308 | //debug_if(DEBUG_SERIAL_PC, "Timer GSM Network (ms) : %d\n", last_time_gsm_network); |
ayoubzahir | 3:cb77ea3370e8 | 309 | //serial_pc.printf("Timer GSM Network (ms) : %d\n", last_time_gsm_network); |
ayoubzahir | 3:cb77ea3370e8 | 310 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 311 | // Seulement si la période de clignotement est d'environs 3s alors le module |
ayoubzahir | 3:cb77ea3370e8 | 312 | // GSM est bien connecté au réseau et est pret a etre utilisé. |
ayoubzahir | 3:cb77ea3370e8 | 313 | if(last_time_gsm_network > 2800 && last_time_gsm_network < 3200) { |
ayoubzahir | 3:cb77ea3370e8 | 314 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 315 | //serial_pc.printf("> Timer GSM Network (ms) : %d\n", last_time_gsm_network); |
ayoubzahir | 3:cb77ea3370e8 | 316 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 317 | flag_gsm_network_ok = 1; // le GSM est ok |
ayoubzahir | 3:cb77ea3370e8 | 318 | if(flag_gsm_starting == 1) { // est-il tjs en démarrage ? |
ayoubzahir | 3:cb77ea3370e8 | 319 | init_GSM(); |
ayoubzahir | 3:cb77ea3370e8 | 320 | flag_gsm_starting = 0; |
ayoubzahir | 3:cb77ea3370e8 | 321 | } } |
ayoubzahir | 3:cb77ea3370e8 | 322 | else flag_gsm_network_ok = 0; // le GSM n'est pas ok |
ayoubzahir | 3:cb77ea3370e8 | 323 | |
ayoubzahir | 3:cb77ea3370e8 | 324 | timer_gsm_network.reset(); // Raz et nouveau départ du timer GSM |
ayoubzahir | 3:cb77ea3370e8 | 325 | timer_gsm_network.start(); |
ayoubzahir | 3:cb77ea3370e8 | 326 | |
ayoubzahir | 3:cb77ea3370e8 | 327 | // On autorise de nouveau les interruptions GPS et GSM |
ayoubzahir | 3:cb77ea3370e8 | 328 | all_irq_on_off(1, 1, 2, 2); |
ayoubzahir | 3:cb77ea3370e8 | 329 | //irq_gps_on(); |
ayoubzahir | 3:cb77ea3370e8 | 330 | //gsm_net.enable_irq(); |
ayoubzahir | 3:cb77ea3370e8 | 331 | } |
ayoubzahir | 3:cb77ea3370e8 | 332 | |
ayoubzahir | 3:cb77ea3370e8 | 333 | // On initialise le GSM |
ayoubzahir | 3:cb77ea3370e8 | 334 | void init_GSM() { |
ayoubzahir | 3:cb77ea3370e8 | 335 | // Initialise (logiciellement) le module GSM |
ayoubzahir | 3:cb77ea3370e8 | 336 | if(gsm_status == 0) return; // Si module GSM arreté ou absent c'est inutile |
ayoubzahir | 3:cb77ea3370e8 | 337 | |
ayoubzahir | 3:cb77ea3370e8 | 338 | // Arret de toute les sources d'interruptions |
ayoubzahir | 3:cb77ea3370e8 | 339 | all_irq_on_off(0, 0, 0, 0); |
ayoubzahir | 3:cb77ea3370e8 | 340 | //irq_gps_off(); // Int sur RX UART |
ayoubzahir | 3:cb77ea3370e8 | 341 | //gsm_net.disable_irq(); // Int sur LED NET GSM |
ayoubzahir | 3:cb77ea3370e8 | 342 | //ticker_hab.detach(); // Ticker HAB |
ayoubzahir | 3:cb77ea3370e8 | 343 | //ticker_check_gsm.detach(); // Ticker check GSM |
ayoubzahir | 3:cb77ea3370e8 | 344 | |
ayoubzahir | 3:cb77ea3370e8 | 345 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 346 | serial_pc.printf(">>> GSM Initialisation <<<\n"); |
ayoubzahir | 3:cb77ea3370e8 | 347 | serial_pc.printf(" Init GSM : %d\n",gsm.init()); |
ayoubzahir | 3:cb77ea3370e8 | 348 | serial_pc.printf(" Statut SIM : %d\n",gsm.checkSIMStatus()); |
ayoubzahir | 3:cb77ea3370e8 | 349 | serial_pc.printf(" Force signal : %d\n",gsm.checkSignalStrength()); |
ayoubzahir | 3:cb77ea3370e8 | 350 | serial_pc.printf(" Reglage SMS : %d\n",gsm.settingSMS()); |
ayoubzahir | 3:cb77ea3370e8 | 351 | //serial_pc.printf(" Test SMS : %d\n",gsm.sendSMS(GSM_SEND_NUMBER, GSM_SEND_SMS_HELLO)); |
ayoubzahir | 3:cb77ea3370e8 | 352 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 353 | |
ayoubzahir | 3:cb77ea3370e8 | 354 | // On considere le GSM initialisé et n'est donc plus en phase de démarrage |
ayoubzahir | 3:cb77ea3370e8 | 355 | flag_gsm_starting = 0; |
ayoubzahir | 3:cb77ea3370e8 | 356 | |
ayoubzahir | 3:cb77ea3370e8 | 357 | // On autorise de nouveau les interruptions GPS et GSM, ticker HAB |
ayoubzahir | 3:cb77ea3370e8 | 358 | all_irq_on_off(1, 1, 1, 1); |
ayoubzahir | 3:cb77ea3370e8 | 359 | //irq_gps_on(); |
ayoubzahir | 3:cb77ea3370e8 | 360 | //gsm_net.enable_irq(); |
ayoubzahir | 3:cb77ea3370e8 | 361 | //ticker_hab.attach(&isr_ticker_hab, TICKER_HAB_TIME); |
ayoubzahir | 3:cb77ea3370e8 | 362 | //ticker_check_gsm.attach(&isr_ticker_check_gsm, TICKER_CHECK_GSM_TIME); |
ayoubzahir | 3:cb77ea3370e8 | 363 | } |
ayoubzahir | 3:cb77ea3370e8 | 364 | |
ayoubzahir | 3:cb77ea3370e8 | 365 | // Fonction qui allume le module GSM (matériellement) |
ayoubzahir | 3:cb77ea3370e8 | 366 | void gsm_pwr_on() { |
ayoubzahir | 3:cb77ea3370e8 | 367 | // Entrée : "bool attendre", specifie si la fonction doit attendre que le |
ayoubzahir | 3:cb77ea3370e8 | 368 | // module GSM démarre. |
ayoubzahir | 3:cb77ea3370e8 | 369 | if(gsm_status == 0) { |
ayoubzahir | 3:cb77ea3370e8 | 370 | // Arret de toute les sources d'interruptions |
ayoubzahir | 3:cb77ea3370e8 | 371 | all_irq_on_off(0, 0, 0, 0); |
ayoubzahir | 3:cb77ea3370e8 | 372 | |
ayoubzahir | 3:cb77ea3370e8 | 373 | // Creation et lancement d'un timer de time out du démarrage du module GSM |
ayoubzahir | 3:cb77ea3370e8 | 374 | Timer timer_gsm_init; |
ayoubzahir | 3:cb77ea3370e8 | 375 | timer_gsm_init.start(); |
ayoubzahir | 3:cb77ea3370e8 | 376 | |
ayoubzahir | 3:cb77ea3370e8 | 377 | // On considere que le GSM est sous-tension, on verifiera ... |
ayoubzahir | 3:cb77ea3370e8 | 378 | gsm_pwr = 1; |
ayoubzahir | 3:cb77ea3370e8 | 379 | |
ayoubzahir | 3:cb77ea3370e8 | 380 | while(gsm_status == 0) { |
ayoubzahir | 3:cb77ea3370e8 | 381 | wait(0.5); |
ayoubzahir | 3:cb77ea3370e8 | 382 | if(timer_gsm_init.read() > 5) { // Si après 5s ... ? |
ayoubzahir | 3:cb77ea3370e8 | 383 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 384 | serial_pc.printf("<<<< ERREUR >>>> module GSM absent\n"); |
ayoubzahir | 3:cb77ea3370e8 | 385 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 386 | flag_gsm_absent = 1; // Constatation de l'absence du module GSM |
ayoubzahir | 3:cb77ea3370e8 | 387 | timer_gsm_network.stop(); // Arrêt du timer GSM |
ayoubzahir | 3:cb77ea3370e8 | 388 | gsm_pwr = 0; // le GSM n'est donc pas sous tension |
ayoubzahir | 3:cb77ea3370e8 | 389 | // On autorise de nouveau les interruptions GPS et GSM, ticker HAB |
ayoubzahir | 3:cb77ea3370e8 | 390 | all_irq_on_off(1, 1, 1, 1); |
ayoubzahir | 3:cb77ea3370e8 | 391 | return; |
ayoubzahir | 3:cb77ea3370e8 | 392 | } |
ayoubzahir | 3:cb77ea3370e8 | 393 | } |
ayoubzahir | 3:cb77ea3370e8 | 394 | gsm_pwr = 0; |
ayoubzahir | 3:cb77ea3370e8 | 395 | timer_gsm_network.stop(); |
ayoubzahir | 3:cb77ea3370e8 | 396 | } |
ayoubzahir | 3:cb77ea3370e8 | 397 | else |
ayoubzahir | 3:cb77ea3370e8 | 398 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 399 | serial_pc.printf("Module GSM deja allume "); |
ayoubzahir | 3:cb77ea3370e8 | 400 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 401 | // Constatation de la présence du module GSM |
ayoubzahir | 3:cb77ea3370e8 | 402 | flag_gsm_absent = 0; |
ayoubzahir | 3:cb77ea3370e8 | 403 | // Indication que le module GSM est en train de démarrer materiellement |
ayoubzahir | 3:cb77ea3370e8 | 404 | // ou du moins qu'il faudra bientot faire l'init logiciel dès qu'il |
ayoubzahir | 3:cb77ea3370e8 | 405 | // sera pret (NET LED avec bonne période de 3s. |
ayoubzahir | 3:cb77ea3370e8 | 406 | flag_gsm_starting = 1; |
ayoubzahir | 3:cb77ea3370e8 | 407 | |
ayoubzahir | 3:cb77ea3370e8 | 408 | // On autorise de nouveau les interruptions GPS et GSM, ticker HAB |
ayoubzahir | 3:cb77ea3370e8 | 409 | all_irq_on_off(1, 1, 1, 1); |
ayoubzahir | 3:cb77ea3370e8 | 410 | |
ayoubzahir | 3:cb77ea3370e8 | 411 | } |
ayoubzahir | 3:cb77ea3370e8 | 412 | |
ayoubzahir | 3:cb77ea3370e8 | 413 | #endif // Fin directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 414 | |
ayoubzahir | 3:cb77ea3370e8 | 415 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 416 | // Ozone O3 |
ayoubzahir | 3:cb77ea3370e8 | 417 | #ifdef O3_FUNCTION // Debut directive de compilation spi_ozone |
ayoubzahir | 3:cb77ea3370e8 | 418 | |
ayoubzahir | 3:cb77ea3370e8 | 419 | double lecture_ozone() { |
ayoubzahir | 3:cb77ea3370e8 | 420 | // Variables |
ayoubzahir | 3:cb77ea3370e8 | 421 | double resultat = 0.0; |
ayoubzahir | 3:cb77ea3370e8 | 422 | uint32_t chiffre=0; |
ayoubzahir | 3:cb77ea3370e8 | 423 | uint8_t Buff[4]; |
ayoubzahir | 3:cb77ea3370e8 | 424 | for(int i=0; i<3;i++) Buff[i] = 0; |
ayoubzahir | 3:cb77ea3370e8 | 425 | |
ayoubzahir | 3:cb77ea3370e8 | 426 | // Paramètres Ozone |
ayoubzahir | 3:cb77ea3370e8 | 427 | spi_ozone.format(8,3); |
ayoubzahir | 3:cb77ea3370e8 | 428 | spi_ozone.frequency(1000000); |
ayoubzahir | 3:cb77ea3370e8 | 429 | ozone_SS.write(0); // Selection de l'esclave |
ayoubzahir | 3:cb77ea3370e8 | 430 | //spi_ozone.write(0x8F); |
ayoubzahir | 3:cb77ea3370e8 | 431 | wait_ms(100); |
ayoubzahir | 3:cb77ea3370e8 | 432 | Buff[0] = spi_ozone.write(0); |
ayoubzahir | 3:cb77ea3370e8 | 433 | Buff[1] = spi_ozone.write(0); |
ayoubzahir | 3:cb77ea3370e8 | 434 | Buff[2] = spi_ozone.write(0); |
ayoubzahir | 3:cb77ea3370e8 | 435 | Buff[3] = spi_ozone.write(0); |
ayoubzahir | 3:cb77ea3370e8 | 436 | ozone_SS.write(1); // Deselection de l'esclave |
ayoubzahir | 3:cb77ea3370e8 | 437 | |
ayoubzahir | 3:cb77ea3370e8 | 438 | chiffre = ((uint32_t)(Buff[0]) << 24) | ((uint32_t)(Buff[1]) << 16) | ((uint32_t)(Buff[2]) << 8) | (uint32_t)(Buff[3]); |
ayoubzahir | 3:cb77ea3370e8 | 439 | chiffre = chiffre >> 7; |
ayoubzahir | 3:cb77ea3370e8 | 440 | resultat = 100 - (chiffre/41943.040); // Conversion en %ADC |
ayoubzahir | 3:cb77ea3370e8 | 441 | return resultat; |
ayoubzahir | 3:cb77ea3370e8 | 442 | } |
ayoubzahir | 3:cb77ea3370e8 | 443 | |
ayoubzahir | 3:cb77ea3370e8 | 444 | #endif // Fin directive de compilation spi_ozone |
ayoubzahir | 3:cb77ea3370e8 | 445 | |
ayoubzahir | 3:cb77ea3370e8 | 446 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 447 | //// Tickers, Interruptions, Threads |
ayoubzahir | 3:cb77ea3370e8 | 448 | |
ayoubzahir | 3:cb77ea3370e8 | 449 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 450 | // GSM |
ayoubzahir | 3:cb77ea3370e8 | 451 | #ifdef GSM_FUNCTION // Debut directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 452 | |
ayoubzahir | 3:cb77ea3370e8 | 453 | void f_ticker_check_gsm() { |
ayoubzahir | 3:cb77ea3370e8 | 454 | // Fonction du ticker de surveillance du module GSM, lancée toute les .. s |
ayoubzahir | 3:cb77ea3370e8 | 455 | |
ayoubzahir | 3:cb77ea3370e8 | 456 | // Si module GSM absent, on retourne |
ayoubzahir | 3:cb77ea3370e8 | 457 | if(flag_gsm_absent == 1) return; |
ayoubzahir | 3:cb77ea3370e8 | 458 | |
ayoubzahir | 3:cb77ea3370e8 | 459 | // Arret de toute les sources d'interruptions |
ayoubzahir | 3:cb77ea3370e8 | 460 | all_irq_on_off(0, 2, 2, 2); |
ayoubzahir | 3:cb77ea3370e8 | 461 | |
ayoubzahir | 3:cb77ea3370e8 | 462 | // Si le module GSM est éteint, on l'allume |
ayoubzahir | 3:cb77ea3370e8 | 463 | if(gsm_status == 0) gsm_pwr_on(); |
ayoubzahir | 3:cb77ea3370e8 | 464 | |
ayoubzahir | 3:cb77ea3370e8 | 465 | // Si module GSM non connecté |
ayoubzahir | 3:cb77ea3370e8 | 466 | if(flag_gsm_network_ok == 0) { |
ayoubzahir | 3:cb77ea3370e8 | 467 | // Si cela fait plus de 15 trames que l'on a démarré alors |
ayoubzahir | 3:cb77ea3370e8 | 468 | if(hab_frame_counter - last_reset_gsm > 15) { |
ayoubzahir | 3:cb77ea3370e8 | 469 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 470 | serial_pc.printf("\n Reset du module GSM ..."); |
ayoubzahir | 3:cb77ea3370e8 | 471 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 472 | // todo : appui sur bouton reset du module gsm |
ayoubzahir | 3:cb77ea3370e8 | 473 | last_reset_gsm = hab_frame_counter; |
ayoubzahir | 3:cb77ea3370e8 | 474 | } } |
ayoubzahir | 3:cb77ea3370e8 | 475 | |
ayoubzahir | 3:cb77ea3370e8 | 476 | // met fin à l'envoi d'un sms, le module reste parfois bloqué dans la |
ayoubzahir | 3:cb77ea3370e8 | 477 | // commande d'envoi et ne répond pas "OK" lorsqu'on check power en envoyant "AT" |
ayoubzahir | 3:cb77ea3370e8 | 478 | gsm.gprsSerial.putc((char)0x1A); |
ayoubzahir | 3:cb77ea3370e8 | 479 | |
ayoubzahir | 3:cb77ea3370e8 | 480 | int sim_status = gsm.checkSIMStatus(); |
ayoubzahir | 3:cb77ea3370e8 | 481 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 482 | serial_pc.printf("\n>>> Check statut SIM : %d\n", sim_status); |
ayoubzahir | 3:cb77ea3370e8 | 483 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 484 | if(sim_status != 0) { init_GSM(); } // Il est nécessaire d'initialiser de nouveau le GSM |
ayoubzahir | 3:cb77ea3370e8 | 485 | |
ayoubzahir | 3:cb77ea3370e8 | 486 | // On autorise de nouveau les interruptions GPS et GSM, ticker HAB |
ayoubzahir | 3:cb77ea3370e8 | 487 | all_irq_on_off(1, 2, 2, 2); |
ayoubzahir | 3:cb77ea3370e8 | 488 | // Flag ticker GSM inactif |
ayoubzahir | 3:cb77ea3370e8 | 489 | flag_ticker_check_gsm = 0; |
ayoubzahir | 3:cb77ea3370e8 | 490 | } |
ayoubzahir | 3:cb77ea3370e8 | 491 | |
ayoubzahir | 3:cb77ea3370e8 | 492 | #endif // Fin directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 493 | |
ayoubzahir | 3:cb77ea3370e8 | 494 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 495 | // GPS |
ayoubzahir | 3:cb77ea3370e8 | 496 | #ifdef GPS_FUNCTION // Debut directive de compilation module GPS |
ayoubzahir | 3:cb77ea3370e8 | 497 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 498 | |
ayoubzahir | 3:cb77ea3370e8 | 499 | // GPS = fonctions d'activation et de desactivation de l'interruption UART |
ayoubzahir | 3:cb77ea3370e8 | 500 | void irq_gps_off() { |
ayoubzahir | 3:cb77ea3370e8 | 501 | // IRQ OFF : desactivation de l'interruption pour le port UART du GPS |
ayoubzahir | 3:cb77ea3370e8 | 502 | gps_serial.attach(NULL); |
ayoubzahir | 3:cb77ea3370e8 | 503 | } |
ayoubzahir | 3:cb77ea3370e8 | 504 | void irq_gps_on() { |
ayoubzahir | 3:cb77ea3370e8 | 505 | // IRQ ON : activation de l'interruption pour le port UART du GPS |
ayoubzahir | 3:cb77ea3370e8 | 506 | gps_serial.attach(&isr_gps_serial,Serial::RxIrq); |
ayoubzahir | 3:cb77ea3370e8 | 507 | } |
ayoubzahir | 3:cb77ea3370e8 | 508 | |
ayoubzahir | 3:cb77ea3370e8 | 509 | // Routine d'interruption (ISR) pour la reception sur port UART du GPS |
ayoubzahir | 3:cb77ea3370e8 | 510 | void isr_gps_serial() { |
ayoubzahir | 3:cb77ea3370e8 | 511 | if(gps_serial.readable()) { |
ayoubzahir | 3:cb77ea3370e8 | 512 | #ifdef GPS_DEBUG |
ayoubzahir | 3:cb77ea3370e8 | 513 | char c = gps_serial.getc(); |
ayoubzahir | 3:cb77ea3370e8 | 514 | serial_pc.putc(c); |
ayoubzahir | 3:cb77ea3370e8 | 515 | gps.readCharacter(c); |
ayoubzahir | 3:cb77ea3370e8 | 516 | #else |
ayoubzahir | 3:cb77ea3370e8 | 517 | gps.readCharacter(gps_serial.getc()); |
ayoubzahir | 3:cb77ea3370e8 | 518 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 519 | } |
ayoubzahir | 3:cb77ea3370e8 | 520 | } |
ayoubzahir | 3:cb77ea3370e8 | 521 | |
ayoubzahir | 3:cb77ea3370e8 | 522 | #endif // Fin directive de compilation module GPS |
ayoubzahir | 3:cb77ea3370e8 | 523 | |
ayoubzahir | 3:cb77ea3370e8 | 524 | //////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 525 | // SMS (GSM) |
ayoubzahir | 3:cb77ea3370e8 | 526 | // Ticker executé toute les xx sec pour envoi des données par sms |
ayoubzahir | 3:cb77ea3370e8 | 527 | #ifdef SMS_FUNCTION // Debut directive de compilation module SMS |
ayoubzahir | 3:cb77ea3370e8 | 528 | |
ayoubzahir | 3:cb77ea3370e8 | 529 | void f_ticker_sms_data() { |
ayoubzahir | 3:cb77ea3370e8 | 530 | if(flag_gsm_network_ok == 1) { |
ayoubzahir | 3:cb77ea3370e8 | 531 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 532 | serial_pc.printf(">>>>>> Send HAB data to SMS\n"); |
ayoubzahir | 3:cb77ea3370e8 | 533 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 534 | // Portable personnel de Dufaza |
ayoubzahir | 3:cb77ea3370e8 | 535 | gsm.sendSMS(GSM_SEND_NUMBER, sd_gprs_data); |
ayoubzahir | 3:cb77ea3370e8 | 536 | // Le SMS a ete envoyé ... |
ayoubzahir | 3:cb77ea3370e8 | 537 | flag_ticker_sms_data = 0; |
ayoubzahir | 3:cb77ea3370e8 | 538 | } } |
ayoubzahir | 3:cb77ea3370e8 | 539 | |
ayoubzahir | 3:cb77ea3370e8 | 540 | #endif // Fin directive de compilation module SMS |
ayoubzahir | 3:cb77ea3370e8 | 541 | |
ayoubzahir | 3:cb77ea3370e8 | 542 | //////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 543 | // HAB |
ayoubzahir | 3:cb77ea3370e8 | 544 | // Ticker executé toute les 5 s pour recolter toute les données, |
ayoubzahir | 3:cb77ea3370e8 | 545 | // les enregistrer sur la carte SD et les envoyer en UART à la carte LoRa |
ayoubzahir | 3:cb77ea3370e8 | 546 | #ifdef HAB_FUNCTION // Debut directive de compilation module HAB |
ayoubzahir | 3:cb77ea3370e8 | 547 | |
ayoubzahir | 3:cb77ea3370e8 | 548 | void f_ticker_hab() { |
ayoubzahir | 3:cb77ea3370e8 | 549 | //DS18 thermomètre pt1 (en 2 parties pour eviter d'attendre) |
ayoubzahir | 3:cb77ea3370e8 | 550 | #ifdef DS18_FUNCTION // Debut directive de compilation DS181B20 |
ayoubzahir | 3:cb77ea3370e8 | 551 | // todo |
ayoubzahir | 3:cb77ea3370e8 | 552 | #endif // Fin directive de compilation DS181B20 |
ayoubzahir | 3:cb77ea3370e8 | 553 | |
ayoubzahir | 3:cb77ea3370e8 | 554 | // Recuperation donnees capteurs ST X_NUCLEO_IKS01A2 |
ayoubzahir | 3:cb77ea3370e8 | 555 | #ifdef XNUCLEO_FUNCTION // Debut directive de compilation shield capteurs XNUCLEO |
ayoubzahir | 3:cb77ea3370e8 | 556 | hum_temp->get_temperature(&xnuc_t); |
ayoubzahir | 3:cb77ea3370e8 | 557 | hum_temp->get_humidity(&xnuc_h); |
ayoubzahir | 3:cb77ea3370e8 | 558 | press_temp->get_temperature(&xnuc_t2); |
ayoubzahir | 3:cb77ea3370e8 | 559 | press_temp->get_pressure(&xnuc_p); |
ayoubzahir | 3:cb77ea3370e8 | 560 | #endif // Fin directive de compilation shield capteurs XNUCLEO |
ayoubzahir | 3:cb77ea3370e8 | 561 | |
ayoubzahir | 3:cb77ea3370e8 | 562 | //PT100 |
ayoubzahir | 3:cb77ea3370e8 | 563 | #ifdef PT100_FUNCTION // Debut directive de compilation module PT100 |
ayoubzahir | 3:cb77ea3370e8 | 564 | PT100.read_all(); |
ayoubzahir | 3:cb77ea3370e8 | 565 | if(PT100.status() == 0) { |
ayoubzahir | 3:cb77ea3370e8 | 566 | tempPT100 = PT100.temperature(); |
ayoubzahir | 3:cb77ea3370e8 | 567 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 568 | //serial_pc.printf(">>>>>> Temp PT100 = %f degC \r\n",tempPT100); |
ayoubzahir | 3:cb77ea3370e8 | 569 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 570 | } |
ayoubzahir | 3:cb77ea3370e8 | 571 | else { |
ayoubzahir | 3:cb77ea3370e8 | 572 | tempPT100 = 0; |
ayoubzahir | 3:cb77ea3370e8 | 573 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 574 | serial_pc.printf("<<< ERREUR >>> Registre d'erreur PT100 : %d - ",PT100.status( )); |
ayoubzahir | 3:cb77ea3370e8 | 575 | if(PT100.status() & MAX31865_FAULT_HIGH_THRESHOLD) { |
ayoubzahir | 3:cb77ea3370e8 | 576 | serial_pc.printf("ERREUR PT100 seuil haut franchi\n"); |
ayoubzahir | 3:cb77ea3370e8 | 577 | } |
ayoubzahir | 3:cb77ea3370e8 | 578 | else if(PT100.status() & MAX31865_FAULT_LOW_THRESHOLD) { |
ayoubzahir | 3:cb77ea3370e8 | 579 | serial_pc.printf("ERREUR PT100 seuil bas franchi\n"); |
ayoubzahir | 3:cb77ea3370e8 | 580 | } |
ayoubzahir | 3:cb77ea3370e8 | 581 | else if(PT100.status() & MAX31865_FAULT_REFIN) { |
ayoubzahir | 3:cb77ea3370e8 | 582 | serial_pc.printf("ERREUR REFIN- > 0,85 x V_BIAS\n"); |
ayoubzahir | 3:cb77ea3370e8 | 583 | } |
ayoubzahir | 3:cb77ea3370e8 | 584 | else if(PT100.status( ) & MAX31865_FAULT_REFIN_FORCE) { |
ayoubzahir | 3:cb77ea3370e8 | 585 | serial_pc.printf("ERREUR REFIN- < 0,85 x V_BIAS, FORCE- ouvert\n"); |
ayoubzahir | 3:cb77ea3370e8 | 586 | } |
ayoubzahir | 3:cb77ea3370e8 | 587 | else if(PT100.status( ) & MAX31865_FAULT_RTDIN_FORCE ) { |
ayoubzahir | 3:cb77ea3370e8 | 588 | serial_pc.printf("ERREUR RTDIN- < 0,85 x V_BIAS, FORCE- ouvert\n"); |
ayoubzahir | 3:cb77ea3370e8 | 589 | } |
ayoubzahir | 3:cb77ea3370e8 | 590 | else if(PT100.status( ) & MAX31865_FAULT_VOLTAGE) { |
ayoubzahir | 3:cb77ea3370e8 | 591 | serial_pc.printf("ERREUR sur/sous-tension\n"); |
ayoubzahir | 3:cb77ea3370e8 | 592 | } |
ayoubzahir | 3:cb77ea3370e8 | 593 | else serial_pc.printf("ERREUR inconnue\n"); |
ayoubzahir | 3:cb77ea3370e8 | 594 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 595 | } |
ayoubzahir | 3:cb77ea3370e8 | 596 | #endif // Fin directive de compilation module PT100 |
ayoubzahir | 3:cb77ea3370e8 | 597 | |
ayoubzahir | 3:cb77ea3370e8 | 598 | // CO2 |
ayoubzahir | 3:cb77ea3370e8 | 599 | #ifdef CO2_FUNCTION // Debut directive de compilation module CO2 |
ayoubzahir | 3:cb77ea3370e8 | 600 | co2.IAQmeasure(); |
ayoubzahir | 3:cb77ea3370e8 | 601 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 602 | /*serial_pc.printf("TVOC : %d\n", co2.TVOC); |
ayoubzahir | 3:cb77ea3370e8 | 603 | serial_pc.printf("eCO2: %d\n", co2.eCO2);*/ |
ayoubzahir | 3:cb77ea3370e8 | 604 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 605 | eco2 = co2.eCO2; |
ayoubzahir | 3:cb77ea3370e8 | 606 | tvoc = co2.TVOC; |
ayoubzahir | 3:cb77ea3370e8 | 607 | #endif // Fin directive de compilation module CO2 |
ayoubzahir | 3:cb77ea3370e8 | 608 | |
ayoubzahir | 3:cb77ea3370e8 | 609 | //DS18 thermomètre pt2 (en 2 parties pour eviter d'attendre) |
ayoubzahir | 3:cb77ea3370e8 | 610 | #ifdef DS18_FUNCTION // Debut directive de compilation DS181B20 |
ayoubzahir | 3:cb77ea3370e8 | 611 | // todo |
ayoubzahir | 3:cb77ea3370e8 | 612 | #endif // Fin directive de compilation DS181B20 |
ayoubzahir | 3:cb77ea3370e8 | 613 | |
ayoubzahir | 3:cb77ea3370e8 | 614 | // Capteurs UV et lumiere |
ayoubzahir | 3:cb77ea3370e8 | 615 | #ifdef UV_FUNCTION // Debut directive de compilation capteur UV |
ayoubzahir | 3:cb77ea3370e8 | 616 | uv = pin_UV.read(); |
ayoubzahir | 3:cb77ea3370e8 | 617 | #endif // Fin directive de compilation capteur UV |
ayoubzahir | 3:cb77ea3370e8 | 618 | #ifdef PHOTORES_FUNCTION // Debut directive de compilation capteur lumière |
ayoubzahir | 3:cb77ea3370e8 | 619 | photores = pin_photores.read(); |
ayoubzahir | 3:cb77ea3370e8 | 620 | #endif // Fin directive de compilation capteur lumière |
ayoubzahir | 3:cb77ea3370e8 | 621 | |
ayoubzahir | 3:cb77ea3370e8 | 622 | // Triple capteur Bosch BME280 |
ayoubzahir | 3:cb77ea3370e8 | 623 | #ifdef BOSCH_FUNCTION // Debut directive de compilation Bosch |
ayoubzahir | 3:cb77ea3370e8 | 624 | bosch_t = bosch.getTemperature(); |
ayoubzahir | 3:cb77ea3370e8 | 625 | //bosch_p = bosch.getPressure(); |
ayoubzahir | 3:cb77ea3370e8 | 626 | bosch_p = 900.0 ; |
ayoubzahir | 3:cb77ea3370e8 | 627 | |
ayoubzahir | 3:cb77ea3370e8 | 628 | bosch_h = bosch.getHumidity(); |
ayoubzahir | 3:cb77ea3370e8 | 629 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 630 | //serial_pc.printf("-> Bosch : %.2f *C, %.2f mbar, %.2f %%\n", bosch.getTemperature(), bosch.getPressure(), bosch.getHumidity()); |
ayoubzahir | 3:cb77ea3370e8 | 631 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 632 | #endif // Fin directive de compilation Bosch |
ayoubzahir | 3:cb77ea3370e8 | 633 | |
ayoubzahir | 3:cb77ea3370e8 | 634 | // Ozone |
ayoubzahir | 3:cb77ea3370e8 | 635 | #ifdef O3_FUNCTION // Debut directive de compilation spi_ozone |
ayoubzahir | 3:cb77ea3370e8 | 636 | ozone = lecture_ozone(); |
ayoubzahir | 3:cb77ea3370e8 | 637 | #endif // Fin directive de compilation spi_ozone |
ayoubzahir | 3:cb77ea3370e8 | 638 | |
ayoubzahir | 3:cb77ea3370e8 | 639 | // Mesure tension batterie (tension ref* pont diviseur + chute diode) |
ayoubzahir | 3:cb77ea3370e8 | 640 | vbatt = ((double) pin_vbatt.read())*3.3*11.07+0.52; |
ayoubzahir | 3:cb77ea3370e8 | 641 | |
ayoubzahir | 3:cb77ea3370e8 | 642 | // Recuperation données GPS |
ayoubzahir | 3:cb77ea3370e8 | 643 | #ifdef GPS_FUNCTION // Debut directive de compilation module GPS |
ayoubzahir | 3:cb77ea3370e8 | 644 | gps.getTimestamp(timeUTCBuffer); |
ayoubzahir | 3:cb77ea3370e8 | 645 | gps.getLatitude(latBuffer); |
ayoubzahir | 3:cb77ea3370e8 | 646 | gps.getLongitude(lonBuffer); |
ayoubzahir | 3:cb77ea3370e8 | 647 | gps.getAltitude(altBuffer); |
ayoubzahir | 3:cb77ea3370e8 | 648 | gps.getSpeed(speedBuffer); |
ayoubzahir | 3:cb77ea3370e8 | 649 | //printf("UTC: %s\t Latitude: %s\t Longitude: %s\t altitude: %s\t speed: %s\n", timeUTCBuffer, latBuffer, lonBuffer, altBuffer, speedBuffer); |
ayoubzahir | 3:cb77ea3370e8 | 650 | // Convertion des chaine en entier et flottant |
ayoubzahir | 3:cb77ea3370e8 | 651 | timeUTC = atoi(timeUTCBuffer); |
ayoubzahir | 3:cb77ea3370e8 | 652 | lat = (float)atof(latBuffer); |
ayoubzahir | 3:cb77ea3370e8 | 653 | lon = (float)atof(lonBuffer); |
ayoubzahir | 3:cb77ea3370e8 | 654 | alt = (float)atof(altBuffer); |
ayoubzahir | 3:cb77ea3370e8 | 655 | speed = (float)atof(speedBuffer); |
ayoubzahir | 3:cb77ea3370e8 | 656 | #endif // Fin directive de compilation module GPS |
ayoubzahir | 3:cb77ea3370e8 | 657 | |
ayoubzahir | 3:cb77ea3370e8 | 658 | // Mise en forme dans un tableau de caractères |
ayoubzahir | 3:cb77ea3370e8 | 659 | sprintf((char*) sd_gprs_data, "%d-%.2f-%d-%f-%f-%.1f-%.1f-%.1f-%.1f-%.3f-%.3f-%.3f-%.1f-%.3f-%.2f-%.2f-%d-%d-%f-%.3f-%.3f", |
ayoubzahir | 3:cb77ea3370e8 | 660 | hab_frame_counter, vbatt, timeUTC, lat, lon, alt, speed, |
ayoubzahir | 3:cb77ea3370e8 | 661 | xnuc_t, xnuc_t2, tempPT100, tempDS18, bosch_t, xnuc_h, bosch_h, xnuc_p, bosch_p, eco2, tvoc, ozone, (double)uv*100.0, (double)photores*100.0); |
ayoubzahir | 3:cb77ea3370e8 | 662 | |
ayoubzahir | 3:cb77ea3370e8 | 663 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 664 | // Affichage des données sur port série debug |
ayoubzahir | 3:cb77ea3370e8 | 665 | serial_pc.printf("\n>>> HAB Frame Counter : %d\n", hab_frame_counter); |
ayoubzahir | 3:cb77ea3370e8 | 666 | serial_pc.printf("> Tension batterie : %f V\n", vbatt); |
ayoubzahir | 3:cb77ea3370e8 | 667 | #ifdef GPS_FUNCTION // Debut directive de compilation module GPS |
ayoubzahir | 3:cb77ea3370e8 | 668 | serial_pc.printf("> Temps UTC : %d\n", timeUTC); |
ayoubzahir | 3:cb77ea3370e8 | 669 | serial_pc.printf("> Latitude : %f\n", lat); |
ayoubzahir | 3:cb77ea3370e8 | 670 | serial_pc.printf("> Longitude : %f\n", lon); |
ayoubzahir | 3:cb77ea3370e8 | 671 | serial_pc.printf("> Altitude : %.2f m\n", alt); |
ayoubzahir | 3:cb77ea3370e8 | 672 | serial_pc.printf("> Vitesse : %.2f km/h\n", speed); |
ayoubzahir | 3:cb77ea3370e8 | 673 | #endif // Fin directive de compilation module GPS |
ayoubzahir | 3:cb77ea3370e8 | 674 | |
ayoubzahir | 3:cb77ea3370e8 | 675 | #ifdef XNUCLEO_FUNCTION // Debut directive de compilation shield capteurs XNUCLEO |
ayoubzahir | 3:cb77ea3370e8 | 676 | serial_pc.printf("> Temperature 1 (XNUCLEO) : %.3f *C\n", xnuc_t); |
ayoubzahir | 3:cb77ea3370e8 | 677 | serial_pc.printf("> Temperature 2 (XNUCLEO) : %.3f *C\n", xnuc_t2); |
ayoubzahir | 3:cb77ea3370e8 | 678 | #endif // Fin directive de compilation shield capteurs XNUCLEO |
ayoubzahir | 3:cb77ea3370e8 | 679 | |
ayoubzahir | 3:cb77ea3370e8 | 680 | #ifdef PT100_FUNCTION // Debut directive de compilation module PT100 |
ayoubzahir | 3:cb77ea3370e8 | 681 | serial_pc.printf("> Temperature 3 (PT100) : %.3f *C\n", tempPT100); |
ayoubzahir | 3:cb77ea3370e8 | 682 | #endif // Fin directive de compilation module PT100 |
ayoubzahir | 3:cb77ea3370e8 | 683 | |
ayoubzahir | 3:cb77ea3370e8 | 684 | #ifdef DS18_FUNCTION // Debut directive de compilation DS181B20 |
ayoubzahir | 3:cb77ea3370e8 | 685 | serial_pc.printf("> Temperature 4 (DS18) : %.3f *C\n", tempDS18); |
ayoubzahir | 3:cb77ea3370e8 | 686 | #endif // Fin directive de compilation DS181B20 |
ayoubzahir | 3:cb77ea3370e8 | 687 | |
ayoubzahir | 3:cb77ea3370e8 | 688 | #ifdef BOSCH_FUNCTION // Debut directive de compilation Bosch |
ayoubzahir | 3:cb77ea3370e8 | 689 | serial_pc.printf("> Temperature 5 (Bosch) : %.3f *C\n",bosch_t); |
ayoubzahir | 3:cb77ea3370e8 | 690 | #endif // Fin directive de compilation Bosch |
ayoubzahir | 3:cb77ea3370e8 | 691 | |
ayoubzahir | 3:cb77ea3370e8 | 692 | #ifdef XNUCLEO_FUNCTION // Debut directive de compilation shield capteurs XNUCLEO |
ayoubzahir | 3:cb77ea3370e8 | 693 | serial_pc.printf("> Humidite 1 (XNUCLEO) : %.2f %%\n", xnuc_h); |
ayoubzahir | 3:cb77ea3370e8 | 694 | #endif // Fin directive de compilation shield capteurs XNUCLEO |
ayoubzahir | 3:cb77ea3370e8 | 695 | |
ayoubzahir | 3:cb77ea3370e8 | 696 | #ifdef BOSCH_FUNCTION // Debut directive de compilation Bosch |
ayoubzahir | 3:cb77ea3370e8 | 697 | serial_pc.printf("> Humidite 2 (Bosch) : %.2f %%\n",bosch_h); |
ayoubzahir | 3:cb77ea3370e8 | 698 | #endif // Fin directive de compilation Bosch |
ayoubzahir | 3:cb77ea3370e8 | 699 | |
ayoubzahir | 3:cb77ea3370e8 | 700 | #ifdef XNUCLEO_FUNCTION // Debut directive de compilation shield capteurs XNUCLEO |
ayoubzahir | 3:cb77ea3370e8 | 701 | serial_pc.printf("> Pression 1 (XNUCLEO) : %.2f mbar - altitude calculee : %.2f m\n", xnuc_p, altitude(xnuc_p, BASE_PRESSURE)); |
ayoubzahir | 3:cb77ea3370e8 | 702 | #endif // Fin directive de compilation shield capteurs XNUCLEO |
ayoubzahir | 3:cb77ea3370e8 | 703 | |
ayoubzahir | 3:cb77ea3370e8 | 704 | #ifdef BOSCH_FUNCTION // Debut directive de compilation Bosch |
ayoubzahir | 3:cb77ea3370e8 | 705 | serial_pc.printf("> Pression 2 (Bosch) : %.2f mbar - altitude calculee : %.2f m\n",bosch_p, altitude(bosch_p, BASE_PRESSURE)); |
ayoubzahir | 3:cb77ea3370e8 | 706 | #endif // Fin directive de compilation Bosch |
ayoubzahir | 3:cb77ea3370e8 | 707 | |
ayoubzahir | 3:cb77ea3370e8 | 708 | #ifdef CO2_FUNCTION // Debut directive de compilation module CO2 |
ayoubzahir | 3:cb77ea3370e8 | 709 | serial_pc.printf("> eCO2 : %d ppm\n", eco2); |
ayoubzahir | 3:cb77ea3370e8 | 710 | serial_pc.printf("> TVOC : %d ppb\n", tvoc); |
ayoubzahir | 3:cb77ea3370e8 | 711 | #endif // Fin directive de compilation module CO2 |
ayoubzahir | 3:cb77ea3370e8 | 712 | |
ayoubzahir | 3:cb77ea3370e8 | 713 | #ifdef UV_FUNCTION // Debut directive de compilation capteur UV |
ayoubzahir | 3:cb77ea3370e8 | 714 | serial_pc.printf("> UV : %.3f %%ADC\n", (double)uv*100.0); |
ayoubzahir | 3:cb77ea3370e8 | 715 | #endif // Fin directive de compilation capteur UV |
ayoubzahir | 3:cb77ea3370e8 | 716 | |
ayoubzahir | 3:cb77ea3370e8 | 717 | #ifdef PHOTORES_FUNCTION // Debut directive de compilation capteur lumière |
ayoubzahir | 3:cb77ea3370e8 | 718 | serial_pc.printf("> Lum : %.3f %%ADC\n", (double)photores*100.0); |
ayoubzahir | 3:cb77ea3370e8 | 719 | #endif // Fin directive de compilation capteur lumière |
ayoubzahir | 3:cb77ea3370e8 | 720 | |
ayoubzahir | 3:cb77ea3370e8 | 721 | #ifdef O3_FUNCTION // Debut directive de compilation spi_ozone |
ayoubzahir | 3:cb77ea3370e8 | 722 | serial_pc.printf("> Ozone O3 : %f %%ADC\n", ozone); |
ayoubzahir | 3:cb77ea3370e8 | 723 | #endif // Fin directive de compilation spi_ozone |
ayoubzahir | 3:cb77ea3370e8 | 724 | |
ayoubzahir | 3:cb77ea3370e8 | 725 | serial_pc.printf("%s\n", sd_gprs_data); |
ayoubzahir | 3:cb77ea3370e8 | 726 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 727 | |
ayoubzahir | 3:cb77ea3370e8 | 728 | // Envoi de la chaine par GPRS au Polytech Server |
ayoubzahir | 3:cb77ea3370e8 | 729 | #ifdef GSM_FUNCTION // Debut directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 730 | #ifdef GPRS_FUNCTION // Debut directive de compilation données mobiles |
ayoubzahir | 3:cb77ea3370e8 | 731 | if(flag_gsm_network_ok == 1) { |
ayoubzahir | 3:cb77ea3370e8 | 732 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 733 | serial_pc.printf(">>>>>> Send HAB data to Polytech Server\n"); |
ayoubzahir | 3:cb77ea3370e8 | 734 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 735 | gsm.gprs_message(url_srv_polytech , sd_gprs_data); |
ayoubzahir | 3:cb77ea3370e8 | 736 | } |
ayoubzahir | 3:cb77ea3370e8 | 737 | #endif // Fin directive de compilation données mobiles |
ayoubzahir | 3:cb77ea3370e8 | 738 | /*if(flag_gsm_network_ok == 1) { |
ayoubzahir | 3:cb77ea3370e8 | 739 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 740 | serial_pc.printf("SMS : %d\n",gsm.sendSMS("+33676040268", sd_gprs_data)); // Envoi de la chaine par SMS |
ayoubzahir | 3:cb77ea3370e8 | 741 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 742 | */ |
ayoubzahir | 3:cb77ea3370e8 | 743 | #endif // Fin directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 744 | |
ayoubzahir | 3:cb77ea3370e8 | 745 | // Sauvegarde sur carte SD |
ayoubzahir | 3:cb77ea3370e8 | 746 | #ifdef SD_FUNCTION // Debut directive de compilation carte SD |
ayoubzahir | 3:cb77ea3370e8 | 747 | ecriture_sd(SD_FUNCTION_FILENAME, sd_gprs_data); |
ayoubzahir | 3:cb77ea3370e8 | 748 | #endif // Fin directive de compilation carte SD |
ayoubzahir | 3:cb77ea3370e8 | 749 | |
ayoubzahir | 3:cb77ea3370e8 | 750 | // Creation de la chaine à envoyer à la carte LoRa |
ayoubzahir | 3:cb77ea3370e8 | 751 | #ifdef LORA_FUNCTION // Debut directive de compilation LoRa |
ayoubzahir | 3:cb77ea3370e8 | 752 | sprintf((char*) lora_data_tx, "%.2f-%f-%f-%.1f-%.3f", vbatt, lat, lon, alt, tempPT100); |
ayoubzahir | 3:cb77ea3370e8 | 753 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 754 | serial_pc.printf("%s\n", lora_data_tx); |
ayoubzahir | 3:cb77ea3370e8 | 755 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 756 | #endif // Fin directive de compilation LoRa |
ayoubzahir | 3:cb77ea3370e8 | 757 | |
ayoubzahir | 3:cb77ea3370e8 | 758 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 759 | //serial_pc.printf("------------------------------------------------\n"); |
ayoubzahir | 3:cb77ea3370e8 | 760 | serial_pc.printf("\n"); |
ayoubzahir | 3:cb77ea3370e8 | 761 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 762 | |
ayoubzahir | 3:cb77ea3370e8 | 763 | // Increment du numéro de la trame transmise |
ayoubzahir | 3:cb77ea3370e8 | 764 | hab_frame_counter++; |
ayoubzahir | 3:cb77ea3370e8 | 765 | // Flag ticker HAB inactif |
ayoubzahir | 3:cb77ea3370e8 | 766 | flag_ticker_hab = 0; |
ayoubzahir | 3:cb77ea3370e8 | 767 | } |
ayoubzahir | 3:cb77ea3370e8 | 768 | |
ayoubzahir | 3:cb77ea3370e8 | 769 | #endif // Fin directive de compilation module HAB |
ayoubzahir | 3:cb77ea3370e8 | 770 | |
ayoubzahir | 3:cb77ea3370e8 | 771 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 772 | // Routines d'interruption appelées au tick des tickers et servant juste à lever un flag |
ayoubzahir | 3:cb77ea3370e8 | 773 | // Pensez à abaisser le flag dans f_ticker_hab() et f_ticker_gsm() ! |
ayoubzahir | 3:cb77ea3370e8 | 774 | #ifdef HAB_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 775 | void isr_ticker_hab() { flag_ticker_hab = 1; } |
ayoubzahir | 3:cb77ea3370e8 | 776 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 777 | |
ayoubzahir | 3:cb77ea3370e8 | 778 | #ifdef GSM_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 779 | void isr_ticker_check_gsm() { flag_ticker_check_gsm = 1; } |
ayoubzahir | 3:cb77ea3370e8 | 780 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 781 | |
ayoubzahir | 3:cb77ea3370e8 | 782 | #ifdef SMS_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 783 | void isr_ticker_sms_data() { flag_ticker_sms_data = 1; } |
ayoubzahir | 3:cb77ea3370e8 | 784 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 785 | |
ayoubzahir | 3:cb77ea3370e8 | 786 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 787 | // LoRa |
ayoubzahir | 3:cb77ea3370e8 | 788 | #ifdef LORA_FUNCTION // Debut directive de compilation LoRa |
ayoubzahir | 3:cb77ea3370e8 | 789 | |
ayoubzahir | 3:cb77ea3370e8 | 790 | void envoi_lora_data_tx() { |
ayoubzahir | 3:cb77ea3370e8 | 791 | lora_serial.printf("%s\n", lora_data_tx); |
ayoubzahir | 3:cb77ea3370e8 | 792 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 793 | serial_pc.printf("lora!\n"); // debug |
ayoubzahir | 3:cb77ea3370e8 | 794 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 795 | } |
ayoubzahir | 3:cb77ea3370e8 | 796 | |
ayoubzahir | 3:cb77ea3370e8 | 797 | void isr_lora_serial() { |
ayoubzahir | 3:cb77ea3370e8 | 798 | char c = lora_serial.getc(); |
ayoubzahir | 3:cb77ea3370e8 | 799 | if(c == 'a') envoi_lora_data_tx(); |
ayoubzahir | 3:cb77ea3370e8 | 800 | #ifdef MP3_FUNCTION // Debut directive de compilation lecteur MP3 |
ayoubzahir | 3:cb77ea3370e8 | 801 | elseif(c == 'b') mp3.mp3_play(); |
ayoubzahir | 3:cb77ea3370e8 | 802 | elseif(c == 'c') mp3.mp3_pause(); |
ayoubzahir | 3:cb77ea3370e8 | 803 | #endif // Fin directive de compilation lecteur MP3 |
ayoubzahir | 3:cb77ea3370e8 | 804 | #ifdef BUZZ_FUNCTION // Debut directive de compilation buzzer |
ayoubzahir | 3:cb77ea3370e8 | 805 | elseif(c == 'd') pin_buzzer.write(1); |
ayoubzahir | 3:cb77ea3370e8 | 806 | elseif(c == 'e') pin_buzzer.write(0); |
ayoubzahir | 3:cb77ea3370e8 | 807 | #endif // Fin directive de compilation buzzer |
ayoubzahir | 3:cb77ea3370e8 | 808 | } |
ayoubzahir | 3:cb77ea3370e8 | 809 | |
ayoubzahir | 3:cb77ea3370e8 | 810 | #endif // Fin directive de compilation LoRa |
ayoubzahir | 3:cb77ea3370e8 | 811 | |
ayoubzahir | 3:cb77ea3370e8 | 812 | |
ayoubzahir | 3:cb77ea3370e8 | 813 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 814 | ///////////////////////////// MAIN //////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 815 | ///////////////////////////////////////////////////////////////////////// |
ayoubzahir | 3:cb77ea3370e8 | 816 | |
ayoubzahir | 3:cb77ea3370e8 | 817 | int main() { |
ayoubzahir | 3:cb77ea3370e8 | 818 | |
ayoubzahir | 3:cb77ea3370e8 | 819 | // Affichage/listage des modules compilés/activés sur port série STLINK |
ayoubzahir | 3:cb77ea3370e8 | 820 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 821 | serial_pc.printf("\n\n-----------------------------------------------------------------------------------\n"); |
ayoubzahir | 3:cb77ea3370e8 | 822 | serial_pc.printf("--- AMU Aix-Marseille Universit\xE9 - Polytech Marseille MT - STM32 in the Sky HAB ---\n"); |
ayoubzahir | 3:cb77ea3370e8 | 823 | vbatt = ((double)pin_vbatt.read())*3.3*11.07+0.52; // Tension batterie (tension ref * pont diviseur + chute diode) |
ayoubzahir | 3:cb77ea3370e8 | 824 | serial_pc.printf("- Tension batterie = %f V\n", vbatt); |
ayoubzahir | 3:cb77ea3370e8 | 825 | serial_pc.printf("- Liste des Fonctionalit\xE9s & Capteurs op\xE9rationnels ...\n"); |
ayoubzahir | 3:cb77ea3370e8 | 826 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 827 | |
ayoubzahir | 3:cb77ea3370e8 | 828 | //Buzzer, léger bip au démarrage |
ayoubzahir | 3:cb77ea3370e8 | 829 | #ifdef BUZZ_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 830 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 831 | serial_pc.printf("-> Buzzer ON ... "); |
ayoubzahir | 3:cb77ea3370e8 | 832 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 833 | for(int i=1; i<BUZZ_FUNCTION_DURATION; i++) // #périodes de 1,5kHz |
ayoubzahir | 3:cb77ea3370e8 | 834 | { // 333us x 2 = 1,5k Hz |
ayoubzahir | 3:cb77ea3370e8 | 835 | pin_buzzer.write(1); wait_us(BUZZ_FUNCTION_HZ); |
ayoubzahir | 3:cb77ea3370e8 | 836 | pin_buzzer.write(0); wait_us(BUZZ_FUNCTION_HZ); |
ayoubzahir | 3:cb77ea3370e8 | 837 | }; |
ayoubzahir | 3:cb77ea3370e8 | 838 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 839 | serial_pc.printf("OFF\n"); |
ayoubzahir | 3:cb77ea3370e8 | 840 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 841 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 842 | |
ayoubzahir | 3:cb77ea3370e8 | 843 | // Shield ST X_NUCLEO_IKS01A2 |
ayoubzahir | 3:cb77ea3370e8 | 844 | #ifdef XNUCLEO_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 845 | // Hum, Temp, Press, Temp, Accelero enable |
ayoubzahir | 3:cb77ea3370e8 | 846 | hum_temp->enable(); |
ayoubzahir | 3:cb77ea3370e8 | 847 | press_temp->enable(); |
ayoubzahir | 3:cb77ea3370e8 | 848 | accelerometer->enable(); |
ayoubzahir | 3:cb77ea3370e8 | 849 | // Lecture des capteurs |
ayoubzahir | 3:cb77ea3370e8 | 850 | hum_temp->get_temperature(&xnuc_t); |
ayoubzahir | 3:cb77ea3370e8 | 851 | hum_temp->get_humidity(&xnuc_h); |
ayoubzahir | 3:cb77ea3370e8 | 852 | press_temp->get_temperature(&xnuc_t2); |
ayoubzahir | 3:cb77ea3370e8 | 853 | press_temp->get_pressure(&xnuc_p); |
ayoubzahir | 3:cb77ea3370e8 | 854 | accelerometer->get_x_axes(xnuc_acc); |
ayoubzahir | 3:cb77ea3370e8 | 855 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 856 | serial_pc.printf("-> XNucleo = %.3f \xB0 C, %.3f \xB0 C, %.3f mbar, %.2f %%, ",xnuc_t, xnuc_t2, xnuc_p, xnuc_h); |
ayoubzahir | 3:cb77ea3370e8 | 857 | serial_pc.printf("Acc x = %ld, y = %ld, z = %ld\n", xnuc_acc[0], xnuc_acc[1], xnuc_acc[2]); |
ayoubzahir | 3:cb77ea3370e8 | 858 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 859 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 860 | |
ayoubzahir | 3:cb77ea3370e8 | 861 | // GSM |
ayoubzahir | 3:cb77ea3370e8 | 862 | #ifdef GSM_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 863 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 864 | serial_pc.printf("-> GSM ON "); |
ayoubzahir | 3:cb77ea3370e8 | 865 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 866 | gsm_pwr_on(); |
ayoubzahir | 3:cb77ea3370e8 | 867 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 868 | |
ayoubzahir | 3:cb77ea3370e8 | 869 | // GPRS SMS |
ayoubzahir | 3:cb77ea3370e8 | 870 | #ifdef GPRS_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 871 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 872 | serial_pc.printf("& GPRS ON\n"); |
ayoubzahir | 3:cb77ea3370e8 | 873 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 874 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 875 | |
ayoubzahir | 3:cb77ea3370e8 | 876 | #ifdef PT100_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 877 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 878 | serial_pc.printf("-> PT100 = "); |
ayoubzahir | 3:cb77ea3370e8 | 879 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 880 | // Configuration initiale du MAX31865 |
ayoubzahir | 3:cb77ea3370e8 | 881 | /* |
ayoubzahir | 3:cb77ea3370e8 | 882 | 1: v_biais : Vbias (tension de polarisation) activée (true) ou non (false) |
ayoubzahir | 3:cb77ea3370e8 | 883 | 2: conversion_mode : mode de conversion automatique activé (true) ou non (false) |
ayoubzahir | 3:cb77ea3370e8 | 884 | 3: one_shot : mesure au coup par coup (true) ou en continue (false) |
ayoubzahir | 3:cb77ea3370e8 | 885 | 4: three_wire : mesure 3 fils activée (true) ou 2/4 fils (false) |
ayoubzahir | 3:cb77ea3370e8 | 886 | 5: fault_cycle : detection d'erreur (voir datasheet) activée (true) ou non (false) |
ayoubzahir | 3:cb77ea3370e8 | 887 | 6: fault_clear : acquittement automatique des erreurs activée (true) ou non (false) |
ayoubzahir | 3:cb77ea3370e8 | 888 | 7: filter_50hz : filtre 50 Hz activé (true) ou non (false) |
ayoubzahir | 3:cb77ea3370e8 | 889 | 8: low_threshold : seuil d'erreur bas. (0x0000 = 0) |
ayoubzahir | 3:cb77ea3370e8 | 890 | 9: high_threshold : seuil d'erreur haut. (0x7fff = 32767) |
ayoubzahir | 3:cb77ea3370e8 | 891 | */ |
ayoubzahir | 3:cb77ea3370e8 | 892 | PT100.configure(true, true, false, false, MAX31865_FAULT_DETECTION_NONE, true, true, 0x0000, 0x7fff); |
ayoubzahir | 3:cb77ea3370e8 | 893 | PT100.read_all(); |
ayoubzahir | 3:cb77ea3370e8 | 894 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 895 | if(PT100.status() == 0) { |
ayoubzahir | 3:cb77ea3370e8 | 896 | //serial_pc.printf("PT100 OK Temp = %.3f *C\n",PT100.temperature()); |
ayoubzahir | 3:cb77ea3370e8 | 897 | serial_pc.printf("PT100 OK\n"); |
ayoubzahir | 3:cb77ea3370e8 | 898 | } |
ayoubzahir | 3:cb77ea3370e8 | 899 | else { |
ayoubzahir | 3:cb77ea3370e8 | 900 | serial_pc.printf("\n!!! Registre d'erreur PT100 = %d - ",PT100.status( )); |
ayoubzahir | 3:cb77ea3370e8 | 901 | if(PT100.status() & MAX31865_FAULT_HIGH_THRESHOLD) { |
ayoubzahir | 3:cb77ea3370e8 | 902 | serial_pc.printf("ERREUR PT100 seuil haut franchi\n"); |
ayoubzahir | 3:cb77ea3370e8 | 903 | } |
ayoubzahir | 3:cb77ea3370e8 | 904 | else if(PT100.status() & MAX31865_FAULT_LOW_THRESHOLD) { |
ayoubzahir | 3:cb77ea3370e8 | 905 | serial_pc.printf("ERREUR PT100 seuil bas franchi\n"); |
ayoubzahir | 3:cb77ea3370e8 | 906 | } |
ayoubzahir | 3:cb77ea3370e8 | 907 | else if(PT100.status() & MAX31865_FAULT_REFIN) { |
ayoubzahir | 3:cb77ea3370e8 | 908 | serial_pc.printf("ERREUR REFIN- > 0,85 x V_BIAS\n"); |
ayoubzahir | 3:cb77ea3370e8 | 909 | } |
ayoubzahir | 3:cb77ea3370e8 | 910 | else if(PT100.status( ) & MAX31865_FAULT_REFIN_FORCE) { |
ayoubzahir | 3:cb77ea3370e8 | 911 | serial_pc.printf("ERREUR REFIN- < 0,85 x V_BIAS, FORCE- ouvert\n"); |
ayoubzahir | 3:cb77ea3370e8 | 912 | } |
ayoubzahir | 3:cb77ea3370e8 | 913 | else if(PT100.status( ) & MAX31865_FAULT_RTDIN_FORCE ) { |
ayoubzahir | 3:cb77ea3370e8 | 914 | serial_pc.printf("ERREUR RTDIN- < 0,85 x V_BIAS, FORCE- ouvert\n"); |
ayoubzahir | 3:cb77ea3370e8 | 915 | } |
ayoubzahir | 3:cb77ea3370e8 | 916 | else if(PT100.status( ) & MAX31865_FAULT_VOLTAGE) { |
ayoubzahir | 3:cb77ea3370e8 | 917 | serial_pc.printf("ERREUR sur/sous-tension\n"); |
ayoubzahir | 3:cb77ea3370e8 | 918 | } |
ayoubzahir | 3:cb77ea3370e8 | 919 | else serial_pc.printf("ERREUR inconnue\n"); |
ayoubzahir | 3:cb77ea3370e8 | 920 | } |
ayoubzahir | 3:cb77ea3370e8 | 921 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 922 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 923 | |
ayoubzahir | 3:cb77ea3370e8 | 924 | // Carte SD, initialisation, et creation d'un fichier de test d'ecriture |
ayoubzahir | 3:cb77ea3370e8 | 925 | // /!\ Faire cette étape après l'initialisation du capteur PT100 qui partage le même SPI |
ayoubzahir | 3:cb77ea3370e8 | 926 | #ifdef SD_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 927 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 928 | serial_pc.printf("-> SD = "); |
ayoubzahir | 3:cb77ea3370e8 | 929 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 930 | //mkdir("/sd/TEST", 0777); |
ayoubzahir | 3:cb77ea3370e8 | 931 | FILE *fp = fopen(SD_FUNCTION_TESTFILENAME, "w"); |
ayoubzahir | 3:cb77ea3370e8 | 932 | if(fp == NULL) { |
ayoubzahir | 3:cb77ea3370e8 | 933 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 934 | serial_pc.printf("ERREUR - Ecriture carte SD\n"); |
ayoubzahir | 3:cb77ea3370e8 | 935 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 936 | // Desactivation de la sauvegarde sur carte SD |
ayoubzahir | 3:cb77ea3370e8 | 937 | flag_sd_ok = 0; |
ayoubzahir | 3:cb77ea3370e8 | 938 | } |
ayoubzahir | 3:cb77ea3370e8 | 939 | else { |
ayoubzahir | 3:cb77ea3370e8 | 940 | fprintf(fp, "AMU - Polytech Marseille - HAB STM32 in the Sky - Test ecriture SD"); |
ayoubzahir | 3:cb77ea3370e8 | 941 | fclose(fp); |
ayoubzahir | 3:cb77ea3370e8 | 942 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 943 | serial_pc.printf("Ecriture carte SD - ok\n"); |
ayoubzahir | 3:cb77ea3370e8 | 944 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 945 | //Activation de la sauvegarde sur carte SD |
ayoubzahir | 3:cb77ea3370e8 | 946 | flag_sd_ok = 1; |
ayoubzahir | 3:cb77ea3370e8 | 947 | } |
ayoubzahir | 3:cb77ea3370e8 | 948 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 949 | |
ayoubzahir | 3:cb77ea3370e8 | 950 | // CO2 |
ayoubzahir | 3:cb77ea3370e8 | 951 | #ifdef CO2_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 952 | co2.begin(); |
ayoubzahir | 3:cb77ea3370e8 | 953 | co2.IAQmeasure(); |
ayoubzahir | 3:cb77ea3370e8 | 954 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 955 | serial_pc.printf("-> CO2 = TVOC = %d, eCO2 = %d\n", co2.TVOC, co2.eCO2); |
ayoubzahir | 3:cb77ea3370e8 | 956 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 957 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 958 | |
ayoubzahir | 3:cb77ea3370e8 | 959 | //DS18 thermomètre |
ayoubzahir | 3:cb77ea3370e8 | 960 | #ifdef DS18_FUNCTION // Debut directive de compilation DS181B20 |
ayoubzahir | 3:cb77ea3370e8 | 961 | |
ayoubzahir | 3:cb77ea3370e8 | 962 | if (ds18.begin()) { |
ayoubzahir | 3:cb77ea3370e8 | 963 | while (1) { |
ayoubzahir | 3:cb77ea3370e8 | 964 | ds18.startConversion(); // start temperature conversion from analog to digital |
ayoubzahir | 3:cb77ea3370e8 | 965 | wait(1.0); // let DS1820 complete the temperature conversion |
ayoubzahir | 3:cb77ea3370e8 | 966 | result = ds18.read(tempDS18); // read temperature from DS1820 and perform cyclic redundancy check (CRC) |
ayoubzahir | 3:cb77ea3370e8 | 967 | switch (result) { |
ayoubzahir | 3:cb77ea3370e8 | 968 | case 0: // no errors -> 'tempDS18' contains the value of measured temperature |
ayoubzahir | 3:cb77ea3370e8 | 969 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 970 | serial_pc.printf("temp = %3.1f%cC\r\n", tempDS18, 176); |
ayoubzahir | 3:cb77ea3370e8 | 971 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 972 | break; |
ayoubzahir | 3:cb77ea3370e8 | 973 | case 1: // no sensor present -> 'tempDS18' is not updated |
ayoubzahir | 3:cb77ea3370e8 | 974 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 975 | serial_pc.printf("no sensor present\n\r"); |
ayoubzahir | 3:cb77ea3370e8 | 976 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 977 | break; |
ayoubzahir | 3:cb77ea3370e8 | 978 | case 2: // CRC error -> 'tempDS18' is not updated |
ayoubzahir | 3:cb77ea3370e8 | 979 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 980 | serial_pc.printf("CRC error\r\n"); |
ayoubzahir | 3:cb77ea3370e8 | 981 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 982 | } |
ayoubzahir | 3:cb77ea3370e8 | 983 | } |
ayoubzahir | 3:cb77ea3370e8 | 984 | } |
ayoubzahir | 3:cb77ea3370e8 | 985 | else |
ayoubzahir | 3:cb77ea3370e8 | 986 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 987 | serial_pc.printf("No DS1820 sensor found!\r\n"); |
ayoubzahir | 3:cb77ea3370e8 | 988 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 989 | |
ayoubzahir | 3:cb77ea3370e8 | 990 | #endif // Fin directive de compilation DS181B20 |
ayoubzahir | 3:cb77ea3370e8 | 991 | |
ayoubzahir | 3:cb77ea3370e8 | 992 | //UV |
ayoubzahir | 3:cb77ea3370e8 | 993 | #ifdef UV_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 994 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 995 | serial_pc.printf("-> UV = %.3f %%ADC\n",pin_UV.read()); |
ayoubzahir | 3:cb77ea3370e8 | 996 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 997 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 998 | |
ayoubzahir | 3:cb77ea3370e8 | 999 | //Photoresistance |
ayoubzahir | 3:cb77ea3370e8 | 1000 | #ifdef PHOTORES_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 1001 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 1002 | serial_pc.printf("-> Photoresistance = %.3f %%ADC\n",(double)pin_photores.read()*100.0); |
ayoubzahir | 3:cb77ea3370e8 | 1003 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1004 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1005 | |
ayoubzahir | 3:cb77ea3370e8 | 1006 | // Triple capteur Bosch BME280 |
ayoubzahir | 3:cb77ea3370e8 | 1007 | #ifdef BOSCH_FUNCTION // Debut directive de compilation Bosch |
ayoubzahir | 3:cb77ea3370e8 | 1008 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 1009 | serial_pc.printf("-> Bosch = %.2f *C, %.2f mbar, %.2f %%\n", bosch.getTemperature(), bosch.getPressure(), bosch.getHumidity()); |
ayoubzahir | 3:cb77ea3370e8 | 1010 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1011 | #endif // Fin directive de compilation Bosch |
ayoubzahir | 3:cb77ea3370e8 | 1012 | |
ayoubzahir | 3:cb77ea3370e8 | 1013 | // Lecteur MP3 |
ayoubzahir | 3:cb77ea3370e8 | 1014 | // Creer un fichier 0.mp3 à la racine de la carte SD |
ayoubzahir | 3:cb77ea3370e8 | 1015 | #ifdef MP3_FUNCTION // Debut directive de compilation lecteur MP3 |
ayoubzahir | 3:cb77ea3370e8 | 1016 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 1017 | serial_pc.printf("-> MP3 ON\n"); |
ayoubzahir | 3:cb77ea3370e8 | 1018 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1019 | mp3.mp3_reset(); |
ayoubzahir | 3:cb77ea3370e8 | 1020 | wait(1); |
ayoubzahir | 3:cb77ea3370e8 | 1021 | mp3.mp3_set_EQ(0); |
ayoubzahir | 3:cb77ea3370e8 | 1022 | wait(0.5); |
ayoubzahir | 3:cb77ea3370e8 | 1023 | mp3.mp3_set_volume(20); |
ayoubzahir | 3:cb77ea3370e8 | 1024 | wait(0.5); |
ayoubzahir | 3:cb77ea3370e8 | 1025 | mp3.mp3_set_device(2); // 1,2,3,4,5 : USB,SD,AUX,SLEEP,FLASH |
ayoubzahir | 3:cb77ea3370e8 | 1026 | wait(0.5); |
ayoubzahir | 3:cb77ea3370e8 | 1027 | mp3.mp3_single_loop(0); |
ayoubzahir | 3:cb77ea3370e8 | 1028 | //mp3.mp3_single_play(0) ; |
ayoubzahir | 3:cb77ea3370e8 | 1029 | wait(0.5); |
ayoubzahir | 3:cb77ea3370e8 | 1030 | //serial_pc.printf("We are in the MP3 func !!!!!\n\r"); |
ayoubzahir | 3:cb77ea3370e8 | 1031 | mp3.mp3_play(); |
ayoubzahir | 3:cb77ea3370e8 | 1032 | #endif // Fin directive de compilation MP3 |
ayoubzahir | 3:cb77ea3370e8 | 1033 | |
ayoubzahir | 3:cb77ea3370e8 | 1034 | #ifdef LORA_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 1035 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 1036 | serial_pc.printf("-> LoRa ON\n"); |
ayoubzahir | 3:cb77ea3370e8 | 1037 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1038 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1039 | |
ayoubzahir | 3:cb77ea3370e8 | 1040 | #ifdef GPS_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 1041 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 1042 | serial_pc.printf("-> GPS ON\n"); |
ayoubzahir | 3:cb77ea3370e8 | 1043 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1044 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1045 | |
ayoubzahir | 3:cb77ea3370e8 | 1046 | #ifdef O3_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 1047 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 1048 | serial_pc.printf("-> Ozone O3 = %f %%ADC\n", lecture_ozone()); |
ayoubzahir | 3:cb77ea3370e8 | 1049 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1050 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1051 | |
ayoubzahir | 3:cb77ea3370e8 | 1052 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 1053 | serial_pc.printf("\n"); |
ayoubzahir | 3:cb77ea3370e8 | 1054 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1055 | |
ayoubzahir | 3:cb77ea3370e8 | 1056 | ////// Lancement des ticker et des interruptions //////// |
ayoubzahir | 3:cb77ea3370e8 | 1057 | |
ayoubzahir | 3:cb77ea3370e8 | 1058 | // GPS |
ayoubzahir | 3:cb77ea3370e8 | 1059 | // Mise en place de l'interruption pour le port UART du GPS |
ayoubzahir | 3:cb77ea3370e8 | 1060 | #ifdef GPS_FUNCTION // Debut directive de compilation module GPS |
ayoubzahir | 3:cb77ea3370e8 | 1061 | gps_serial.attach(&isr_gps_serial,Serial::RxIrq); |
ayoubzahir | 3:cb77ea3370e8 | 1062 | #endif // Fin directive de compilation module GPS |
ayoubzahir | 3:cb77ea3370e8 | 1063 | |
ayoubzahir | 3:cb77ea3370e8 | 1064 | // Ticker de creation de la chaine de données toute les 5s |
ayoubzahir | 3:cb77ea3370e8 | 1065 | ticker_hab.attach(&isr_ticker_hab, TICKER_HAB_TIME); |
ayoubzahir | 3:cb77ea3370e8 | 1066 | |
ayoubzahir | 3:cb77ea3370e8 | 1067 | // GSM |
ayoubzahir | 3:cb77ea3370e8 | 1068 | #ifdef GSM_FUNCTION // Debut directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 1069 | if(flag_gsm_absent == 0) { |
ayoubzahir | 3:cb77ea3370e8 | 1070 | |
ayoubzahir | 3:cb77ea3370e8 | 1071 | // Interruption sur LED "NET" et compteur de sa période |
ayoubzahir | 3:cb77ea3370e8 | 1072 | timer_gsm_network.reset(); // Démarrage du compteur de la période de clignotement de la LED "NET" |
ayoubzahir | 3:cb77ea3370e8 | 1073 | timer_gsm_network.start(); |
ayoubzahir | 3:cb77ea3370e8 | 1074 | gsm_net.rise(&isr_network_gsm); // Attachement de l'interruption externe sur la LED "NET" |
ayoubzahir | 3:cb77ea3370e8 | 1075 | |
ayoubzahir | 3:cb77ea3370e8 | 1076 | // Ticker de surveillance GSM toute les xx sec |
ayoubzahir | 3:cb77ea3370e8 | 1077 | ticker_check_gsm.attach(&isr_ticker_check_gsm, TICKER_CHECK_GSM_TIME); |
ayoubzahir | 3:cb77ea3370e8 | 1078 | |
ayoubzahir | 3:cb77ea3370e8 | 1079 | // Ticker d'envoi de données par sms toute les xx sec |
ayoubzahir | 3:cb77ea3370e8 | 1080 | #ifdef SMS_FUNCTION // Debut directive de compilation envoi SMS |
ayoubzahir | 3:cb77ea3370e8 | 1081 | ticker_sms_data.attach(&isr_ticker_sms_data, TICKER_SMS_DATA_TIME); |
ayoubzahir | 3:cb77ea3370e8 | 1082 | #endif // Fin directive de compilation SMS de données toutes les xx sec |
ayoubzahir | 3:cb77ea3370e8 | 1083 | } |
ayoubzahir | 3:cb77ea3370e8 | 1084 | #endif // Fin directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 1085 | |
ayoubzahir | 3:cb77ea3370e8 | 1086 | // LoRa |
ayoubzahir | 3:cb77ea3370e8 | 1087 | // Mise en place de l'interruption pour le port UART LoRa |
ayoubzahir | 3:cb77ea3370e8 | 1088 | #ifdef LORA_FUNCTION // Debut directive de compilation LoRa |
ayoubzahir | 3:cb77ea3370e8 | 1089 | lora_serial.attach(&isr_lora_serial,Serial::RxIrq); |
ayoubzahir | 3:cb77ea3370e8 | 1090 | #endif // Fin directive de compilation LoRa |
ayoubzahir | 3:cb77ea3370e8 | 1091 | |
ayoubzahir | 3:cb77ea3370e8 | 1092 | /////////////////// BOUCLE PRINCIPALE ///////////////// |
ayoubzahir | 3:cb77ea3370e8 | 1093 | while(1) { |
ayoubzahir | 3:cb77ea3370e8 | 1094 | |
ayoubzahir | 3:cb77ea3370e8 | 1095 | // Vérification du flag d'interruption pour la routine de recuperation |
ayoubzahir | 3:cb77ea3370e8 | 1096 | // des données des capteurs, enregistrement, envoi LoRa, etc. |
ayoubzahir | 3:cb77ea3370e8 | 1097 | #ifdef HAB_FUNCTION |
ayoubzahir | 3:cb77ea3370e8 | 1098 | if(flag_ticker_hab == 1) f_ticker_hab(); |
ayoubzahir | 3:cb77ea3370e8 | 1099 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1100 | |
ayoubzahir | 3:cb77ea3370e8 | 1101 | // Vérification du flag d'interruption pour la routine de vérification |
ayoubzahir | 3:cb77ea3370e8 | 1102 | // de l'état du module |
ayoubzahir | 3:cb77ea3370e8 | 1103 | #ifdef GSM_FUNCTION // Debut directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 1104 | if(flag_ticker_check_gsm == 1) |
ayoubzahir | 3:cb77ea3370e8 | 1105 | { if ( (altitude(xnuc_p, BASE_PRESSURE) < GSM_START_ALTITUDE ) || (altitude(bosch_p, BASE_PRESSURE) < GSM_START_ALTITUDE) ) |
ayoubzahir | 3:cb77ea3370e8 | 1106 | { |
ayoubzahir | 3:cb77ea3370e8 | 1107 | #ifdef DEBUG_SERIAL_PC |
ayoubzahir | 3:cb77ea3370e8 | 1108 | serial_pc.printf("> Pression 1 (XNUCLEO) : %.2f mbar - altitude GSM : %.2f m\n", xnuc_p, altitude(xnuc_p, BASE_PRESSURE)); |
ayoubzahir | 3:cb77ea3370e8 | 1109 | serial_pc.printf("> Pression 1 (BOSCH) : %.2f mbar - altitude GSM : %.2f m\n", bosch_p, altitude(bosch_p, BASE_PRESSURE)); |
ayoubzahir | 3:cb77ea3370e8 | 1110 | #endif |
ayoubzahir | 3:cb77ea3370e8 | 1111 | f_ticker_check_gsm(); |
ayoubzahir | 3:cb77ea3370e8 | 1112 | } |
ayoubzahir | 3:cb77ea3370e8 | 1113 | } |
ayoubzahir | 3:cb77ea3370e8 | 1114 | #endif // Fin directive de compilation module GSM |
ayoubzahir | 3:cb77ea3370e8 | 1115 | |
ayoubzahir | 3:cb77ea3370e8 | 1116 | // Vérification du flag d'interruption pour la routine d'envoi de SMS |
ayoubzahir | 3:cb77ea3370e8 | 1117 | // de donnée toute les 10 min |
ayoubzahir | 3:cb77ea3370e8 | 1118 | #ifdef SMS_FUNCTION // Debut directive de compilation SMS de données toutes les 10 min |
ayoubzahir | 3:cb77ea3370e8 | 1119 | if(flag_ticker_sms_data == 1) f_ticker_sms_data(); |
ayoubzahir | 3:cb77ea3370e8 | 1120 | #endif // Fin directive de compilation SMS de données toutes les 10 min |
ayoubzahir | 3:cb77ea3370e8 | 1121 | } |
ayoubzahir | 3:cb77ea3370e8 | 1122 | } |