FFT à reprogrammer Gestion des trames réseaux à améliorer (certaines trames ne se transmettent pas)
Dependencies: mbed SHT21_ncleee HX711 mbed-dsp DS1820
main.cpp@0:4311d41c5fbc, 2021-01-25 (annotated)
- Committer:
- Lambdys
- Date:
- Mon Jan 25 10:10:24 2021 +0000
- Revision:
- 0:4311d41c5fbc
Prototype B-Smart. Cible: Nucleo L432KC
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Lambdys | 0:4311d41c5fbc | 1 | /*-------------------------------------*/ |
Lambdys | 0:4311d41c5fbc | 2 | /* Ruche connectée B-Smart V15 */ |
Lambdys | 0:4311d41c5fbc | 3 | /* Contrôle baremetal */ |
Lambdys | 0:4311d41c5fbc | 4 | /* */ |
Lambdys | 0:4311d41c5fbc | 5 | /* BIROLINI Nikolaï */ |
Lambdys | 0:4311d41c5fbc | 6 | /* GOURDET Hadrien */ |
Lambdys | 0:4311d41c5fbc | 7 | /* HULOT Alexandra */ |
Lambdys | 0:4311d41c5fbc | 8 | /* LEBRETON Maxime */ |
Lambdys | 0:4311d41c5fbc | 9 | /* */ |
Lambdys | 0:4311d41c5fbc | 10 | /* Janvier 2021 */ |
Lambdys | 0:4311d41c5fbc | 11 | /* Polytech Sorbonne */ |
Lambdys | 0:4311d41c5fbc | 12 | /*-------------------------------------*/ |
Lambdys | 0:4311d41c5fbc | 13 | |
Lambdys | 0:4311d41c5fbc | 14 | #include "SHT21_ncleee.h" |
Lambdys | 0:4311d41c5fbc | 15 | #include "arm_math.h" |
Lambdys | 0:4311d41c5fbc | 16 | #include "arm_const_structs.h" |
Lambdys | 0:4311d41c5fbc | 17 | #include "DS1820.h" |
Lambdys | 0:4311d41c5fbc | 18 | #include "HX711.h" |
Lambdys | 0:4311d41c5fbc | 19 | |
Lambdys | 0:4311d41c5fbc | 20 | #define DEBUG 1 |
Lambdys | 0:4311d41c5fbc | 21 | |
Lambdys | 0:4311d41c5fbc | 22 | |
Lambdys | 0:4311d41c5fbc | 23 | HX711 Balance(D11,D10); |
Lambdys | 0:4311d41c5fbc | 24 | Serial pc(USBTX,USBRX); |
Lambdys | 0:4311d41c5fbc | 25 | AnalogOut MEAS_ENABLE(A3); |
Lambdys | 0:4311d41c5fbc | 26 | |
Lambdys | 0:4311d41c5fbc | 27 | //=1 VMEAS |
Lambdys | 0:4311d41c5fbc | 28 | //=0 SIGFOX |
Lambdys | 0:4311d41c5fbc | 29 | |
Lambdys | 0:4311d41c5fbc | 30 | Serial sigfox(D1,D0);//TX:PA_2:A7 RX:PA_3:A2 |
Lambdys | 0:4311d41c5fbc | 31 | |
Lambdys | 0:4311d41c5fbc | 32 | |
Lambdys | 0:4311d41c5fbc | 33 | #define min(a, b) ((a) < (b) ? (a) : (b)) |
Lambdys | 0:4311d41c5fbc | 34 | #define max(a, b) ((a) > (b) ? (a) : (b)) |
Lambdys | 0:4311d41c5fbc | 35 | #define SIZE 7 |
Lambdys | 0:4311d41c5fbc | 36 | #define TEMPPRESENCE 35 |
Lambdys | 0:4311d41c5fbc | 37 | #define FFT_SIZE 1024 |
Lambdys | 0:4311d41c5fbc | 38 | |
Lambdys | 0:4311d41c5fbc | 39 | DigitalOut TPL5110_DONE(D5); |
Lambdys | 0:4311d41c5fbc | 40 | |
Lambdys | 0:4311d41c5fbc | 41 | typedef struct _frame //champ de bits |
Lambdys | 0:4311d41c5fbc | 42 | { |
Lambdys | 0:4311d41c5fbc | 43 | unsigned char *field; //tableau de char |
Lambdys | 0:4311d41c5fbc | 44 | int offset; //index |
Lambdys | 0:4311d41c5fbc | 45 | int size; //taille de la trame en bits |
Lambdys | 0:4311d41c5fbc | 46 | } Frame; |
Lambdys | 0:4311d41c5fbc | 47 | |
Lambdys | 0:4311d41c5fbc | 48 | void new_frame(Frame* frame,unsigned char* field) |
Lambdys | 0:4311d41c5fbc | 49 | { |
Lambdys | 0:4311d41c5fbc | 50 | frame->field = field; |
Lambdys | 0:4311d41c5fbc | 51 | frame->offset = 0; //on part du premier char |
Lambdys | 0:4311d41c5fbc | 52 | frame->size = SIZE*8; |
Lambdys | 0:4311d41c5fbc | 53 | } |
Lambdys | 0:4311d41c5fbc | 54 | |
Lambdys | 0:4311d41c5fbc | 55 | |
Lambdys | 0:4311d41c5fbc | 56 | |
Lambdys | 0:4311d41c5fbc | 57 | int get_bit(Frame *frame) //fonction de debuggage |
Lambdys | 0:4311d41c5fbc | 58 | { |
Lambdys | 0:4311d41c5fbc | 59 | int char_index = frame->offset / 8; |
Lambdys | 0:4311d41c5fbc | 60 | int bit_index = 7-(frame->offset % 8); |
Lambdys | 0:4311d41c5fbc | 61 | frame->offset++; |
Lambdys | 0:4311d41c5fbc | 62 | |
Lambdys | 0:4311d41c5fbc | 63 | return ((frame->field[char_index] & (1 << bit_index)) > 0) ? 1 : 0; |
Lambdys | 0:4311d41c5fbc | 64 | } |
Lambdys | 0:4311d41c5fbc | 65 | void print_frame(Frame *frame) //fonction de debuggage |
Lambdys | 0:4311d41c5fbc | 66 | { |
Lambdys | 0:4311d41c5fbc | 67 | int cur_offset = frame->offset; |
Lambdys | 0:4311d41c5fbc | 68 | frame->offset = 0; |
Lambdys | 0:4311d41c5fbc | 69 | pc.printf("Frame {\r\n\ttaille : %d / %d\r\n\tbitfield : ", cur_offset, frame->size); |
Lambdys | 0:4311d41c5fbc | 70 | while (frame->offset < cur_offset) |
Lambdys | 0:4311d41c5fbc | 71 | { |
Lambdys | 0:4311d41c5fbc | 72 | printf(get_bit(frame) == 1 ? "1" : "0"); |
Lambdys | 0:4311d41c5fbc | 73 | if (frame->offset % 8 == 0) |
Lambdys | 0:4311d41c5fbc | 74 | printf(" "); |
Lambdys | 0:4311d41c5fbc | 75 | } |
Lambdys | 0:4311d41c5fbc | 76 | pc.printf("\r\n}\r\n"); |
Lambdys | 0:4311d41c5fbc | 77 | } |
Lambdys | 0:4311d41c5fbc | 78 | void stock_bit(unsigned char bit, Frame *frame) //set le bit n°offset à 1 si bit>0, sinon à 0 |
Lambdys | 0:4311d41c5fbc | 79 | { |
Lambdys | 0:4311d41c5fbc | 80 | if (frame->offset < frame->size) |
Lambdys | 0:4311d41c5fbc | 81 | { |
Lambdys | 0:4311d41c5fbc | 82 | int char_index = frame->offset / 8; //n° du char |
Lambdys | 0:4311d41c5fbc | 83 | int bit_index = 7 -(frame->offset % 8); //n° du bit |
Lambdys | 0:4311d41c5fbc | 84 | unsigned char char_mask = ~(1 << bit_index); //mask pour garder tous les bits existants sauf celui qui nous intéresse |
Lambdys | 0:4311d41c5fbc | 85 | |
Lambdys | 0:4311d41c5fbc | 86 | frame->field[char_index] = (frame->field[char_index] & char_mask) + ((bit > 0 ? 1 : 0) << bit_index); //place le bit à sa place |
Lambdys | 0:4311d41c5fbc | 87 | frame->offset++; //bit modifié, on se déplace |
Lambdys | 0:4311d41c5fbc | 88 | } |
Lambdys | 0:4311d41c5fbc | 89 | } |
Lambdys | 0:4311d41c5fbc | 90 | void stock_int(unsigned int value, int taille_en_bits, Frame *frame) //stocke les bits d'un int |
Lambdys | 0:4311d41c5fbc | 91 | { |
Lambdys | 0:4311d41c5fbc | 92 | if(DEBUG) |
Lambdys | 0:4311d41c5fbc | 93 | { |
Lambdys | 0:4311d41c5fbc | 94 | pc.printf(" Mesure %d ,taille = %d\r\n",value,taille_en_bits); |
Lambdys | 0:4311d41c5fbc | 95 | } |
Lambdys | 0:4311d41c5fbc | 96 | |
Lambdys | 0:4311d41c5fbc | 97 | for (int i = 0; i < taille_en_bits; i++){ |
Lambdys | 0:4311d41c5fbc | 98 | stock_bit(value & (1 << (taille_en_bits - i - 1)), frame); |
Lambdys | 0:4311d41c5fbc | 99 | //print_frame(frame); |
Lambdys | 0:4311d41c5fbc | 100 | } |
Lambdys | 0:4311d41c5fbc | 101 | } |
Lambdys | 0:4311d41c5fbc | 102 | void validate_frame(Frame *frame) //on met toute la fin à zéro si pas déjà utilisée |
Lambdys | 0:4311d41c5fbc | 103 | { |
Lambdys | 0:4311d41c5fbc | 104 | while (frame->offset < frame->size) |
Lambdys | 0:4311d41c5fbc | 105 | stock_bit(0, frame); |
Lambdys | 0:4311d41c5fbc | 106 | } |
Lambdys | 0:4311d41c5fbc | 107 | |
Lambdys | 0:4311d41c5fbc | 108 | |
Lambdys | 0:4311d41c5fbc | 109 | |
Lambdys | 0:4311d41c5fbc | 110 | void send_frame(Frame *frame) //fonction de debuggage |
Lambdys | 0:4311d41c5fbc | 111 | { |
Lambdys | 0:4311d41c5fbc | 112 | sigfox.printf("AT$SF="); |
Lambdys | 0:4311d41c5fbc | 113 | if(DEBUG) pc.printf("AT$SF="); |
Lambdys | 0:4311d41c5fbc | 114 | for ( int i = 0 ; i < frame->size / 8 ; i++) { |
Lambdys | 0:4311d41c5fbc | 115 | sigfox.printf("%0X", frame->field[i]); |
Lambdys | 0:4311d41c5fbc | 116 | |
Lambdys | 0:4311d41c5fbc | 117 | if(DEBUG) pc.printf("%0X", frame->field[i]); |
Lambdys | 0:4311d41c5fbc | 118 | } |
Lambdys | 0:4311d41c5fbc | 119 | sigfox.printf("\r\n"); |
Lambdys | 0:4311d41c5fbc | 120 | if(DEBUG) pc.printf("\r\n"); |
Lambdys | 0:4311d41c5fbc | 121 | } |
Lambdys | 0:4311d41c5fbc | 122 | |
Lambdys | 0:4311d41c5fbc | 123 | void stock_temp(Frame *frame, float temp) |
Lambdys | 0:4311d41c5fbc | 124 | { |
Lambdys | 0:4311d41c5fbc | 125 | temp = min(temp, 45.5f); |
Lambdys | 0:4311d41c5fbc | 126 | temp = max(temp, -18); |
Lambdys | 0:4311d41c5fbc | 127 | //temp = max(temp, -10); |
Lambdys | 0:4311d41c5fbc | 128 | int bits = (int)((temp/2. + 36) * 2 + 0.5f); //round(temp+18)*2 |
Lambdys | 0:4311d41c5fbc | 129 | stock_int(bits, 7, frame); |
Lambdys | 0:4311d41c5fbc | 130 | } |
Lambdys | 0:4311d41c5fbc | 131 | |
Lambdys | 0:4311d41c5fbc | 132 | /* Masse test enhanced */ |
Lambdys | 0:4311d41c5fbc | 133 | void stock_masse(Frame *frame, float masse) |
Lambdys | 0:4311d41c5fbc | 134 | { |
Lambdys | 0:4311d41c5fbc | 135 | /*bib = https://apiarobotics.com/fr/connaissances/poids-dune-ruche */ |
Lambdys | 0:4311d41c5fbc | 136 | /*encadrer la masse entre 15kg et 50 kg*/ |
Lambdys | 0:4311d41c5fbc | 137 | masse = max(masse, 15.f);//masse mini = 15kg |
Lambdys | 0:4311d41c5fbc | 138 | masse = min(masse, 50.f);//masse max = 50kg |
Lambdys | 0:4311d41c5fbc | 139 | |
Lambdys | 0:4311d41c5fbc | 140 | if(debug) pc.printf("[MASSE]masse retenue (kg)= %f\n", masse); |
Lambdys | 0:4311d41c5fbc | 141 | |
Lambdys | 0:4311d41c5fbc | 142 | /*ajout d'offset */ |
Lambdys | 0:4311d41c5fbc | 143 | masse-=15; //masse mini |
Lambdys | 0:4311d41c5fbc | 144 | |
Lambdys | 0:4311d41c5fbc | 145 | /*produit en croix */ |
Lambdys | 0:4311d41c5fbc | 146 | /*10kg = 0x00 */ |
Lambdys | 0:4311d41c5fbc | 147 | /*50kg = 0xff */ |
Lambdys | 0:4311d41c5fbc | 148 | /*précision = 35kg/190 = 184g */ |
Lambdys | 0:4311d41c5fbc | 149 | masse = masse*(255.0-65)/35.0; //produit en croix (35 = masse max - masse mini) |
Lambdys | 0:4311d41c5fbc | 150 | masse += 65; //offset binaire. Si on veux transmettre une valeur <65 = bug !! (valeur obtenue par tatonnement) |
Lambdys | 0:4311d41c5fbc | 151 | |
Lambdys | 0:4311d41c5fbc | 152 | |
Lambdys | 0:4311d41c5fbc | 153 | int bits = (int)masse; |
Lambdys | 0:4311d41c5fbc | 154 | |
Lambdys | 0:4311d41c5fbc | 155 | if(debug) pc.printf("[MASSE]valeur binaire retenue = %d\n", bits); |
Lambdys | 0:4311d41c5fbc | 156 | |
Lambdys | 0:4311d41c5fbc | 157 | stock_int(bits,8,frame); |
Lambdys | 0:4311d41c5fbc | 158 | } |
Lambdys | 0:4311d41c5fbc | 159 | |
Lambdys | 0:4311d41c5fbc | 160 | void stock_vent(Frame *frame, float vent) |
Lambdys | 0:4311d41c5fbc | 161 | { |
Lambdys | 0:4311d41c5fbc | 162 | vent = min(vent, 70); |
Lambdys | 0:4311d41c5fbc | 163 | vent = max(vent, 0); |
Lambdys | 0:4311d41c5fbc | 164 | int bits = (int)(vent*0.1f + 0.5f); |
Lambdys | 0:4311d41c5fbc | 165 | stock_int(bits, 3, frame); |
Lambdys | 0:4311d41c5fbc | 166 | } |
Lambdys | 0:4311d41c5fbc | 167 | void stock_humidity(Frame *frame,float humidity) |
Lambdys | 0:4311d41c5fbc | 168 | { |
Lambdys | 0:4311d41c5fbc | 169 | humidity = min(humidity,100); |
Lambdys | 0:4311d41c5fbc | 170 | humidity = max(humidity,20); |
Lambdys | 0:4311d41c5fbc | 171 | int bits = (int)(humidity*31/100+0.5f); |
Lambdys | 0:4311d41c5fbc | 172 | stock_int(bits,5,frame); |
Lambdys | 0:4311d41c5fbc | 173 | } |
Lambdys | 0:4311d41c5fbc | 174 | void stock_battery(Frame *frame,float battery) |
Lambdys | 0:4311d41c5fbc | 175 | { |
Lambdys | 0:4311d41c5fbc | 176 | battery = min(battery,100); |
Lambdys | 0:4311d41c5fbc | 177 | battery = max(battery,0); |
Lambdys | 0:4311d41c5fbc | 178 | int bits = (int)(battery*63/100+0.5f); |
Lambdys | 0:4311d41c5fbc | 179 | stock_int(bits,6,frame); |
Lambdys | 0:4311d41c5fbc | 180 | } |
Lambdys | 0:4311d41c5fbc | 181 | |
Lambdys | 0:4311d41c5fbc | 182 | InterruptIn anemo(D13);//D13 |
Lambdys | 0:4311d41c5fbc | 183 | //ATTENTION: ne pas oublier de ratacher l'interupt à une fonction (dans le main)! |
Lambdys | 0:4311d41c5fbc | 184 | |
Lambdys | 0:4311d41c5fbc | 185 | AnalogIn analog_battery(A0); |
Lambdys | 0:4311d41c5fbc | 186 | AnalogIn analog_luminosity(A1); |
Lambdys | 0:4311d41c5fbc | 187 | AnalogIn analog_TMP36(A4); |
Lambdys | 0:4311d41c5fbc | 188 | //AnalogIn analog_FFT(A5); |
Lambdys | 0:4311d41c5fbc | 189 | |
Lambdys | 0:4311d41c5fbc | 190 | //I2C i2c(PB_4, PA_7);//SDA:A12, SCL:A6 |
Lambdys | 0:4311d41c5fbc | 191 | I2C i2c(PB_4, PA_7);//SDA:A12, SCL:A6 |
Lambdys | 0:4311d41c5fbc | 192 | SHT21 sht(&i2c); |
Lambdys | 0:4311d41c5fbc | 193 | |
Lambdys | 0:4311d41c5fbc | 194 | Timer t_anemo; |
Lambdys | 0:4311d41c5fbc | 195 | int cpt_anemo; |
Lambdys | 0:4311d41c5fbc | 196 | |
Lambdys | 0:4311d41c5fbc | 197 | void anemo_counter() //IRQ Anémomètre |
Lambdys | 0:4311d41c5fbc | 198 | { |
Lambdys | 0:4311d41c5fbc | 199 | cpt_anemo++; |
Lambdys | 0:4311d41c5fbc | 200 | if(debug)pc.printf("WIND ! cpt_anemo = %d \n",cpt_anemo); |
Lambdys | 0:4311d41c5fbc | 201 | } |
Lambdys | 0:4311d41c5fbc | 202 | |
Lambdys | 0:4311d41c5fbc | 203 | //FFT |
Lambdys | 0:4311d41c5fbc | 204 | |
Lambdys | 0:4311d41c5fbc | 205 | int FFT_compt; |
Lambdys | 0:4311d41c5fbc | 206 | float fmax; |
Lambdys | 0:4311d41c5fbc | 207 | /* Pour simplifier l'interprétation des mesures, un instant est relié à chaque mesure */ |
Lambdys | 0:4311d41c5fbc | 208 | float FFT_DUREE[FFT_SIZE]; |
Lambdys | 0:4311d41c5fbc | 209 | |
Lambdys | 0:4311d41c5fbc | 210 | /* Signal en entrée analogique */ |
Lambdys | 0:4311d41c5fbc | 211 | float signal_reel[FFT_SIZE+1]; |
Lambdys | 0:4311d41c5fbc | 212 | |
Lambdys | 0:4311d41c5fbc | 213 | /* Signal après dérivation */ |
Lambdys | 0:4311d41c5fbc | 214 | float signal_reelDiff[FFT_SIZE]; |
Lambdys | 0:4311d41c5fbc | 215 | |
Lambdys | 0:4311d41c5fbc | 216 | /* Signal avant la FFT (il contient les composantes réeles et complexes (composante complexe nulle)) */ |
Lambdys | 0:4311d41c5fbc | 217 | float FFT_in[FFT_SIZE*2]; |
Lambdys | 0:4311d41c5fbc | 218 | |
Lambdys | 0:4311d41c5fbc | 219 | /* Spectre à la sortie de FFT */ |
Lambdys | 0:4311d41c5fbc | 220 | float FFT_out[FFT_SIZE*2]; |
Lambdys | 0:4311d41c5fbc | 221 | |
Lambdys | 0:4311d41c5fbc | 222 | /* Reference index at which max energy of bin ocuurs */ |
Lambdys | 0:4311d41c5fbc | 223 | uint32_t testIndex = 0; |
Lambdys | 0:4311d41c5fbc | 224 | |
Lambdys | 0:4311d41c5fbc | 225 | /* Flag FFT complexe. La FFT sera effectuée uniquement sur la composante réele. Donc flag à '0' */ |
Lambdys | 0:4311d41c5fbc | 226 | int ifftFlag = 0; |
Lambdys | 0:4311d41c5fbc | 227 | |
Lambdys | 0:4311d41c5fbc | 228 | int doBitReverse = 1; |
Lambdys | 0:4311d41c5fbc | 229 | |
Lambdys | 0:4311d41c5fbc | 230 | /* Energie maximale */ |
Lambdys | 0:4311d41c5fbc | 231 | float maxValue; |
Lambdys | 0:4311d41c5fbc | 232 | AnalogIn analog_FFT(A5); |
Lambdys | 0:4311d41c5fbc | 233 | float Fe= 4000;//Fréquence echantillonage |
Lambdys | 0:4311d41c5fbc | 234 | float Te = 1/Fe; |
Lambdys | 0:4311d41c5fbc | 235 | int MortReine = 0;//Mort de la reine 0 = vivant, 1=mort |
Lambdys | 0:4311d41c5fbc | 236 | int ToutVaBien = 0;//Si tout va bien= 0 sinon = 1 |
Lambdys | 0:4311d41c5fbc | 237 | int Stress = 0;//Abeille en stress = 1 sinon 0 |
Lambdys | 0:4311d41c5fbc | 238 | int bebe = 0;//Essaimage = 1 sinon 0 |
Lambdys | 0:4311d41c5fbc | 239 | int moyenneAmp=0; |
Lambdys | 0:4311d41c5fbc | 240 | int moyenneNorm=0;//Moyenne amplitude sur tout le spectre |
Lambdys | 0:4311d41c5fbc | 241 | int moyEss=0; //Moyenne amplitude entre 200Hz et 500 Hz |
Lambdys | 0:4311d41c5fbc | 242 | |
Lambdys | 0:4311d41c5fbc | 243 | |
Lambdys | 0:4311d41c5fbc | 244 | |
Lambdys | 0:4311d41c5fbc | 245 | int main(void) |
Lambdys | 0:4311d41c5fbc | 246 | { |
Lambdys | 0:4311d41c5fbc | 247 | TPL5110_DONE=0; |
Lambdys | 0:4311d41c5fbc | 248 | MEAS_ENABLE = 1; |
Lambdys | 0:4311d41c5fbc | 249 | anemo.disable_irq(); |
Lambdys | 0:4311d41c5fbc | 250 | anemo.rise(&anemo_counter);//attacher une fonction à l'interrupt |
Lambdys | 0:4311d41c5fbc | 251 | //--------------------------------------------- données brutes------------------------------------------ |
Lambdys | 0:4311d41c5fbc | 252 | float temp_ext = 10.; // variable pour la température extérieure |
Lambdys | 0:4311d41c5fbc | 253 | |
Lambdys | 0:4311d41c5fbc | 254 | float temp_int_1 = 20.5; // mesures des 8 sondes de température à l'intérieur de la ruche |
Lambdys | 0:4311d41c5fbc | 255 | float temp_int_2 = 20.5; |
Lambdys | 0:4311d41c5fbc | 256 | float temp_int_3 = 20.5; |
Lambdys | 0:4311d41c5fbc | 257 | float temp_int_4 = 20.5; |
Lambdys | 0:4311d41c5fbc | 258 | float temp_int_5 = 20.5; |
Lambdys | 0:4311d41c5fbc | 259 | //float temp_int_6 = 20.5; |
Lambdys | 0:4311d41c5fbc | 260 | //float temp_int_7 = 20.5; |
Lambdys | 0:4311d41c5fbc | 261 | //float temp_int_8 = 20.5; |
Lambdys | 0:4311d41c5fbc | 262 | float temp_int; //température intérieure moyenne |
Lambdys | 0:4311d41c5fbc | 263 | int luminosity = 2; |
Lambdys | 0:4311d41c5fbc | 264 | float masse = 0; |
Lambdys | 0:4311d41c5fbc | 265 | float force_vent = 50.0; |
Lambdys | 0:4311d41c5fbc | 266 | float battery = 2.0; |
Lambdys | 0:4311d41c5fbc | 267 | float humidity = 56.6; |
Lambdys | 0:4311d41c5fbc | 268 | int cadre_1_2 = 1;//non utilisé mais crash si 0! |
Lambdys | 0:4311d41c5fbc | 269 | int cadre_3 = 0; |
Lambdys | 0:4311d41c5fbc | 270 | int cadre_4 = 0; |
Lambdys | 0:4311d41c5fbc | 271 | int cadre_5 = 0; |
Lambdys | 0:4311d41c5fbc | 272 | int cadre_6 = 0; |
Lambdys | 0:4311d41c5fbc | 273 | int cadre_7 = 0; |
Lambdys | 0:4311d41c5fbc | 274 | int cadre_8 = 1;//remplacer par reine; |
Lambdys | 0:4311d41c5fbc | 275 | int cadre_9_10 = 0;//remplacer par presence_ruche; |
Lambdys | 0:4311d41c5fbc | 276 | int stress = 0; |
Lambdys | 0:4311d41c5fbc | 277 | int essaimage = 0; |
Lambdys | 0:4311d41c5fbc | 278 | int reine = 1; |
Lambdys | 0:4311d41c5fbc | 279 | int abeilles = 0; |
Lambdys | 0:4311d41c5fbc | 280 | //------------ pour la tx |
Lambdys | 0:4311d41c5fbc | 281 | |
Lambdys | 0:4311d41c5fbc | 282 | long masse_valeur_moyenne; |
Lambdys | 0:4311d41c5fbc | 283 | long masse_valeur; |
Lambdys | 0:4311d41c5fbc | 284 | float battery_read; |
Lambdys | 0:4311d41c5fbc | 285 | float luminosity_read; |
Lambdys | 0:4311d41c5fbc | 286 | |
Lambdys | 0:4311d41c5fbc | 287 | if(debug)pc.printf("1.Initialisation DS1820\n"); |
Lambdys | 0:4311d41c5fbc | 288 | DS1820 sensor_DS1820_1(D2); |
Lambdys | 0:4311d41c5fbc | 289 | DS1820 sensor_DS1820_2(D3); |
Lambdys | 0:4311d41c5fbc | 290 | DS1820 sensor_DS1820_3(D6); |
Lambdys | 0:4311d41c5fbc | 291 | DS1820 sensor_DS1820_4(D9); |
Lambdys | 0:4311d41c5fbc | 292 | |
Lambdys | 0:4311d41c5fbc | 293 | if(debug)pc.printf("1a.Lecture DS1820: 1/4\n"); |
Lambdys | 0:4311d41c5fbc | 294 | sensor_DS1820_1.convertTemperature(true, DS1820::all_devices); // start temperature conversion |
Lambdys | 0:4311d41c5fbc | 295 | wait(1); // let DS1820 complete the temperature conversion |
Lambdys | 0:4311d41c5fbc | 296 | temp_int_1 = sensor_DS1820_1.temperature(); |
Lambdys | 0:4311d41c5fbc | 297 | |
Lambdys | 0:4311d41c5fbc | 298 | if(debug)pc.printf("1a.Lecture DS1820: 2/4\n"); |
Lambdys | 0:4311d41c5fbc | 299 | sensor_DS1820_2.convertTemperature(true, DS1820::all_devices); // start temperature conversion |
Lambdys | 0:4311d41c5fbc | 300 | wait(1); // let DS1820 complete the temperature conversion |
Lambdys | 0:4311d41c5fbc | 301 | temp_int_2 = sensor_DS1820_2.temperature(); |
Lambdys | 0:4311d41c5fbc | 302 | |
Lambdys | 0:4311d41c5fbc | 303 | if(debug)pc.printf("1a.Lecture DS1820: 3/4\n"); |
Lambdys | 0:4311d41c5fbc | 304 | sensor_DS1820_3.convertTemperature(true, DS1820::all_devices); // start temperature conversion |
Lambdys | 0:4311d41c5fbc | 305 | wait(1); // let DS1820 complete the temperature conversion |
Lambdys | 0:4311d41c5fbc | 306 | temp_int_3 = sensor_DS1820_3.temperature(); |
Lambdys | 0:4311d41c5fbc | 307 | |
Lambdys | 0:4311d41c5fbc | 308 | if(debug)pc.printf("1a.Lecture DS1820: 4/4\n"); |
Lambdys | 0:4311d41c5fbc | 309 | sensor_DS1820_4.convertTemperature(true, DS1820::all_devices); // start temperature conversion |
Lambdys | 0:4311d41c5fbc | 310 | wait(1); // let DS1820 complete the temperature conversion |
Lambdys | 0:4311d41c5fbc | 311 | temp_int_4 = sensor_DS1820_4.temperature(); |
Lambdys | 0:4311d41c5fbc | 312 | |
Lambdys | 0:4311d41c5fbc | 313 | if(debug)pc.printf("1b.Initialisation et lecture SHT20\n"); |
Lambdys | 0:4311d41c5fbc | 314 | temp_int_5 = sht.readTemp(); |
Lambdys | 0:4311d41c5fbc | 315 | |
Lambdys | 0:4311d41c5fbc | 316 | temp_int = (temp_int_1 + temp_int_5 + temp_int_5 + temp_int_5 + temp_int_5)/5.0; |
Lambdys | 0:4311d41c5fbc | 317 | |
Lambdys | 0:4311d41c5fbc | 318 | if(debug)pc.printf("[TEMP]: temperature interieure moyenne = %f oC\n",temp_int); |
Lambdys | 0:4311d41c5fbc | 319 | |
Lambdys | 0:4311d41c5fbc | 320 | if(debug)pc.printf("1c.Lecture TMP36\n"); |
Lambdys | 0:4311d41c5fbc | 321 | /* https://learn.adafruit.com/tmp36-temperature-sensor */ |
Lambdys | 0:4311d41c5fbc | 322 | temp_ext = analog_TMP36.read(); |
Lambdys | 0:4311d41c5fbc | 323 | temp_ext*=3.3;//mise à l'échelle val analogique 0 à 1 en tension 0 à 3.3V |
Lambdys | 0:4311d41c5fbc | 324 | temp_ext-=0.500; //-500 mV |
Lambdys | 0:4311d41c5fbc | 325 | temp_ext/=0.010; //cf datasheet, div par 10 mV |
Lambdys | 0:4311d41c5fbc | 326 | |
Lambdys | 0:4311d41c5fbc | 327 | |
Lambdys | 0:4311d41c5fbc | 328 | if(debug) pc.printf("[TEMP]: temperature exterieure = %f oC\n",temp_ext); |
Lambdys | 0:4311d41c5fbc | 329 | |
Lambdys | 0:4311d41c5fbc | 330 | if(debug)pc.printf("1.d.Occupation des cadres\n"); |
Lambdys | 0:4311d41c5fbc | 331 | |
Lambdys | 0:4311d41c5fbc | 332 | if(temp_int_1 >= TEMPPRESENCE) cadre_3 = 1; |
Lambdys | 0:4311d41c5fbc | 333 | if(temp_int_2 >= TEMPPRESENCE) cadre_4 = 1; |
Lambdys | 0:4311d41c5fbc | 334 | if(temp_int_3 >= TEMPPRESENCE) cadre_5 = 1; |
Lambdys | 0:4311d41c5fbc | 335 | if(temp_int_4 >= TEMPPRESENCE) cadre_6 = 1; |
Lambdys | 0:4311d41c5fbc | 336 | if(temp_int_5 >= TEMPPRESENCE) cadre_7 = 1; |
Lambdys | 0:4311d41c5fbc | 337 | |
Lambdys | 0:4311d41c5fbc | 338 | |
Lambdys | 0:4311d41c5fbc | 339 | |
Lambdys | 0:4311d41c5fbc | 340 | |
Lambdys | 0:4311d41c5fbc | 341 | if(debug)pc.printf("[Temp] cadre_3 actif = %d \n",cadre_3); |
Lambdys | 0:4311d41c5fbc | 342 | if(debug)pc.printf("[Temp] cadre_4 actif = %d \n",cadre_4); |
Lambdys | 0:4311d41c5fbc | 343 | if(debug)pc.printf("[Temp] cadre_5 actif = %d \n",cadre_5); |
Lambdys | 0:4311d41c5fbc | 344 | if(debug)pc.printf("[Temp] cadre_6 actif = %d \n",cadre_6); |
Lambdys | 0:4311d41c5fbc | 345 | if(debug)pc.printf("[Temp] cadre_7 actif = %d \n",cadre_7); |
Lambdys | 0:4311d41c5fbc | 346 | |
Lambdys | 0:4311d41c5fbc | 347 | if((cadre_3)||(cadre_4)||(cadre_5)||(cadre_6)||(cadre_7)) abeilles = 1; |
Lambdys | 0:4311d41c5fbc | 348 | if(debug)pc.printf("[Temp] abeilles = %d \n", abeilles); |
Lambdys | 0:4311d41c5fbc | 349 | |
Lambdys | 0:4311d41c5fbc | 350 | if(!abeilles) reine=0; |
Lambdys | 0:4311d41c5fbc | 351 | |
Lambdys | 0:4311d41c5fbc | 352 | if(DEBUG)pc.printf("2a.Mesure masse en cours...\n", masse); |
Lambdys | 0:4311d41c5fbc | 353 | |
Lambdys | 0:4311d41c5fbc | 354 | masse_valeur_moyenne = Balance.averageValue(100); |
Lambdys | 0:4311d41c5fbc | 355 | //tare = 8441392 |
Lambdys | 0:4311d41c5fbc | 356 | // printf("value: %ld\r\n",a - 8441392); |
Lambdys | 0:4311d41c5fbc | 357 | //avec tare: 0 = 0kg, 42381 = 2kg |
Lambdys | 0:4311d41c5fbc | 358 | masse_valeur = ( masse_valeur_moyenne - 8441392.0);//Tare |
Lambdys | 0:4311d41c5fbc | 359 | // printf("value: %ld\r\n",valeur); |
Lambdys | 0:4311d41c5fbc | 360 | |
Lambdys | 0:4311d41c5fbc | 361 | masse =(float) masse_valeur*2.113/42381.0; |
Lambdys | 0:4311d41c5fbc | 362 | |
Lambdys | 0:4311d41c5fbc | 363 | if(masse>=10.0) cadre_9_10=1;//presence_ruche |
Lambdys | 0:4311d41c5fbc | 364 | //masse = ((int) masse * 100) / 100; |
Lambdys | 0:4311d41c5fbc | 365 | //2.113 = from balance précise |
Lambdys | 0:4311d41c5fbc | 366 | |
Lambdys | 0:4311d41c5fbc | 367 | if(debug)pc.printf("[Masse] %f kg\n", masse); |
Lambdys | 0:4311d41c5fbc | 368 | |
Lambdys | 0:4311d41c5fbc | 369 | if(DEBUG)pc.printf("3b.Analyse FFT cours...\n"); |
Lambdys | 0:4311d41c5fbc | 370 | |
Lambdys | 0:4311d41c5fbc | 371 | /*---- Début FFT*/ |
Lambdys | 0:4311d41c5fbc | 372 | |
Lambdys | 0:4311d41c5fbc | 373 | for(FFT_compt=0;FFT_compt<FFT_SIZE+1;FFT_compt++) |
Lambdys | 0:4311d41c5fbc | 374 | { |
Lambdys | 0:4311d41c5fbc | 375 | signal_reel[FFT_compt]=analog_FFT.read(); |
Lambdys | 0:4311d41c5fbc | 376 | } |
Lambdys | 0:4311d41c5fbc | 377 | |
Lambdys | 0:4311d41c5fbc | 378 | |
Lambdys | 0:4311d41c5fbc | 379 | //printf("Fréquence échantillonage : %f\n", Fe); |
Lambdys | 0:4311d41c5fbc | 380 | |
Lambdys | 0:4311d41c5fbc | 381 | /*Dérivée du signal d'entrée (dérivée avant) */ |
Lambdys | 0:4311d41c5fbc | 382 | for(FFT_compt=0;FFT_compt<FFT_SIZE;FFT_compt++) |
Lambdys | 0:4311d41c5fbc | 383 | { |
Lambdys | 0:4311d41c5fbc | 384 | signal_reelDiff[FFT_compt]=(signal_reel[FFT_compt+1]-signal_reel[FFT_compt])/Te; |
Lambdys | 0:4311d41c5fbc | 385 | //printf("derivee = %f\n",signal_reelDiff[FFT_compt]); |
Lambdys | 0:4311d41c5fbc | 386 | } |
Lambdys | 0:4311d41c5fbc | 387 | |
Lambdys | 0:4311d41c5fbc | 388 | /*remplissage paire (reel), partie imaginaire nulle*/ |
Lambdys | 0:4311d41c5fbc | 389 | for(FFT_compt=0;FFT_compt<FFT_SIZE;FFT_compt++) |
Lambdys | 0:4311d41c5fbc | 390 | { |
Lambdys | 0:4311d41c5fbc | 391 | FFT_in[FFT_compt*2]=signal_reelDiff[FFT_compt]; |
Lambdys | 0:4311d41c5fbc | 392 | FFT_in[FFT_compt*2+1]=0; |
Lambdys | 0:4311d41c5fbc | 393 | } |
Lambdys | 0:4311d41c5fbc | 394 | |
Lambdys | 0:4311d41c5fbc | 395 | /* Process the data through the CFFT/CIFFT module */ |
Lambdys | 0:4311d41c5fbc | 396 | arm_cfft_f32(&arm_cfft_sR_f32_len1024, FFT_in, ifftFlag, doBitReverse); |
Lambdys | 0:4311d41c5fbc | 397 | |
Lambdys | 0:4311d41c5fbc | 398 | /* Process the data through the Complex Magnitude Module for |
Lambdys | 0:4311d41c5fbc | 399 | calculating the magnitude at each bin */ |
Lambdys | 0:4311d41c5fbc | 400 | arm_cmplx_mag_f32(FFT_in, FFT_out, FFT_SIZE); |
Lambdys | 0:4311d41c5fbc | 401 | |
Lambdys | 0:4311d41c5fbc | 402 | /* Suppression des fréqquences situées entre Fe/2 et Fe */ |
Lambdys | 0:4311d41c5fbc | 403 | for(FFT_compt=FFT_SIZE/2;FFT_compt<FFT_SIZE;FFT_compt++) |
Lambdys | 0:4311d41c5fbc | 404 | { |
Lambdys | 0:4311d41c5fbc | 405 | FFT_out[FFT_compt]=0; |
Lambdys | 0:4311d41c5fbc | 406 | } |
Lambdys | 0:4311d41c5fbc | 407 | |
Lambdys | 0:4311d41c5fbc | 408 | /* Calcul la valeur max dans la liste FFT_out, index = frequence et le contenu c'est l'amplitude */ |
Lambdys | 0:4311d41c5fbc | 409 | arm_max_f32(FFT_out, FFT_SIZE, &maxValue, &testIndex); |
Lambdys | 0:4311d41c5fbc | 410 | |
Lambdys | 0:4311d41c5fbc | 411 | fmax=testIndex*Fe/FFT_SIZE; |
Lambdys | 0:4311d41c5fbc | 412 | //Calcul de la moyenne des amplitude |
Lambdys | 0:4311d41c5fbc | 413 | |
Lambdys | 0:4311d41c5fbc | 414 | for (int z=0; z<1024;z++) |
Lambdys | 0:4311d41c5fbc | 415 | { |
Lambdys | 0:4311d41c5fbc | 416 | moyenneAmp=moyenneAmp+FFT_out[z]; |
Lambdys | 0:4311d41c5fbc | 417 | } |
Lambdys | 0:4311d41c5fbc | 418 | |
Lambdys | 0:4311d41c5fbc | 419 | moyenneNorm=moyenneAmp/1024; |
Lambdys | 0:4311d41c5fbc | 420 | |
Lambdys | 0:4311d41c5fbc | 421 | if(DEBUG) |
Lambdys | 0:4311d41c5fbc | 422 | { |
Lambdys | 0:4311d41c5fbc | 423 | pc.printf("[FFT]moyenne amplitude = %d\n",moyenneNorm); |
Lambdys | 0:4311d41c5fbc | 424 | pc.printf("[FFT]premier quartile = %.2e\n",FFT_out[256]); |
Lambdys | 0:4311d41c5fbc | 425 | } |
Lambdys | 0:4311d41c5fbc | 426 | |
Lambdys | 0:4311d41c5fbc | 427 | if (FFT_out[256] > 400) |
Lambdys | 0:4311d41c5fbc | 428 | { |
Lambdys | 0:4311d41c5fbc | 429 | if (moyenneNorm > 600) reine = 0; |
Lambdys | 0:4311d41c5fbc | 430 | stress = 1; |
Lambdys | 0:4311d41c5fbc | 431 | } |
Lambdys | 0:4311d41c5fbc | 432 | |
Lambdys | 0:4311d41c5fbc | 433 | for (int q= 0; q<77;q++)//Entre 200Hz et 550Hz |
Lambdys | 0:4311d41c5fbc | 434 | { |
Lambdys | 0:4311d41c5fbc | 435 | moyEss=moyEss+FFT_out[51+q]; |
Lambdys | 0:4311d41c5fbc | 436 | } |
Lambdys | 0:4311d41c5fbc | 437 | |
Lambdys | 0:4311d41c5fbc | 438 | moyEss=moyEss/77; |
Lambdys | 0:4311d41c5fbc | 439 | |
Lambdys | 0:4311d41c5fbc | 440 | if ((moyEss > 300)&&(moyenneNorm <600)) essaimage=1; |
Lambdys | 0:4311d41c5fbc | 441 | |
Lambdys | 0:4311d41c5fbc | 442 | moyEss=0; |
Lambdys | 0:4311d41c5fbc | 443 | |
Lambdys | 0:4311d41c5fbc | 444 | moyenneAmp=0; |
Lambdys | 0:4311d41c5fbc | 445 | moyenneNorm=0; |
Lambdys | 0:4311d41c5fbc | 446 | |
Lambdys | 0:4311d41c5fbc | 447 | cadre_8 = reine; |
Lambdys | 0:4311d41c5fbc | 448 | reine = 1;//sinon crash tx |
Lambdys | 0:4311d41c5fbc | 449 | |
Lambdys | 0:4311d41c5fbc | 450 | /*---- Fin FFT*/ |
Lambdys | 0:4311d41c5fbc | 451 | |
Lambdys | 0:4311d41c5fbc | 452 | if(DEBUG)pc.printf("[Son] reine = %\n",reine); |
Lambdys | 0:4311d41c5fbc | 453 | if(DEBUG)pc.printf("[Son] essaimage = %d\n",essaimage); |
Lambdys | 0:4311d41c5fbc | 454 | if(DEBUG)pc.printf("[Son] stress = %d\n",stress); |
Lambdys | 0:4311d41c5fbc | 455 | |
Lambdys | 0:4311d41c5fbc | 456 | if(DEBUG)pc.printf("4a.mesures diverses%\n"); |
Lambdys | 0:4311d41c5fbc | 457 | humidity = sht.readHumidity(); |
Lambdys | 0:4311d41c5fbc | 458 | if(DEBUG)pc.printf("[Humidite] %f HR\n",humidity); |
Lambdys | 0:4311d41c5fbc | 459 | |
Lambdys | 0:4311d41c5fbc | 460 | battery_read = analog_battery.read(); |
Lambdys | 0:4311d41c5fbc | 461 | |
Lambdys | 0:4311d41c5fbc | 462 | battery = 67.;// défaillance |
Lambdys | 0:4311d41c5fbc | 463 | |
Lambdys | 0:4311d41c5fbc | 464 | if(battery_read >= 0.798) battery = 100.; //4,1 V, 100% |
Lambdys | 0:4311d41c5fbc | 465 | else if(battery_read >= 0.773) battery = 97.;//3.97 V, 90% |
Lambdys | 0:4311d41c5fbc | 466 | else if(battery_read >= 0.764) battery = 94.;//3.92 V, 80% |
Lambdys | 0:4311d41c5fbc | 467 | else if(battery_read >= 0.754) battery = 91.;//3.87 V, 70% |
Lambdys | 0:4311d41c5fbc | 468 | else if(battery_read >= 0.747) battery = 88.;//3.83 V, 60% |
Lambdys | 0:4311d41c5fbc | 469 | else if(battery_read >= 0.739) battery = 85.;//3.79 V, 50% |
Lambdys | 0:4311d41c5fbc | 470 | else if(battery_read >= 0.731) battery = 82.;//3.75 V, 40% |
Lambdys | 0:4311d41c5fbc | 471 | else if(battery_read >= 0.722) battery = 79.;//3.70 V, 30% |
Lambdys | 0:4311d41c5fbc | 472 | else if(battery_read >= 0.700) battery = 76.;//3.60 V, 20% |
Lambdys | 0:4311d41c5fbc | 473 | else if(battery_read >= 0.660) battery = 73.;//3.30 V, 10% |
Lambdys | 0:4311d41c5fbc | 474 | else if(battery_read >= 0.550) battery = 70.;//2.80 V, 0% |
Lambdys | 0:4311d41c5fbc | 475 | |
Lambdys | 0:4311d41c5fbc | 476 | if(debug) |
Lambdys | 0:4311d41c5fbc | 477 | { |
Lambdys | 0:4311d41c5fbc | 478 | if(battery_read >= 0.798) pc.printf("[Batterie] 100 / 100\n"); //4,1 V, 100% |
Lambdys | 0:4311d41c5fbc | 479 | else if(battery_read >= 0.773) pc.printf("[Batterie] 90 / 100\n");//3.97 V, 90% |
Lambdys | 0:4311d41c5fbc | 480 | else if(battery_read >= 0.764) pc.printf("[Batterie] 80 / 100\n");//3.92 V, 80% |
Lambdys | 0:4311d41c5fbc | 481 | else if(battery_read >= 0.754) pc.printf("[Batterie] 70 / 100\n");//3.87 V, 70% |
Lambdys | 0:4311d41c5fbc | 482 | else if(battery_read >= 0.747) pc.printf("[Batterie] 60 / 100\n");//3.83 V, 60% |
Lambdys | 0:4311d41c5fbc | 483 | else if(battery_read >= 0.739) pc.printf("[Batterie] 50 / 100\n");//3.79 V, 50% |
Lambdys | 0:4311d41c5fbc | 484 | else if(battery_read >= 0.731) pc.printf("[Batterie] 40 / 100\n");//3.75 V, 40% |
Lambdys | 0:4311d41c5fbc | 485 | else if(battery_read >= 0.722) pc.printf("[Batterie] 30 / 100\n");//3.70 V, 30% |
Lambdys | 0:4311d41c5fbc | 486 | else if(battery_read >= 0.700) pc.printf("[Batterie] 20 / 100\n");//3.60 V, 20% |
Lambdys | 0:4311d41c5fbc | 487 | else if(battery_read >= 0.660) pc.printf("[Batterie] 10 / 100\n");//3.30 V, 10% |
Lambdys | 0:4311d41c5fbc | 488 | else if(battery_read >= 0.550) pc.printf("[Batterie] 0 / 100\n");//2.80 V, 0% |
Lambdys | 0:4311d41c5fbc | 489 | else pc.printf("[Batterie] DEFAILLANCE / DEBRANCHEE\n"); |
Lambdys | 0:4311d41c5fbc | 490 | } |
Lambdys | 0:4311d41c5fbc | 491 | |
Lambdys | 0:4311d41c5fbc | 492 | luminosity_read = analog_luminosity.read(); |
Lambdys | 0:4311d41c5fbc | 493 | luminosity_read *=10.; //max 10 V |
Lambdys | 0:4311d41c5fbc | 494 | |
Lambdys | 0:4311d41c5fbc | 495 | //attention luminosity peut faire crash TX */ |
Lambdys | 0:4311d41c5fbc | 496 | luminosity = 2; //nuit |
Lambdys | 0:4311d41c5fbc | 497 | |
Lambdys | 0:4311d41c5fbc | 498 | if(luminosity_read >= 5) luminosity = 7; |
Lambdys | 0:4311d41c5fbc | 499 | else if(luminosity_read >= 4) luminosity = 6; |
Lambdys | 0:4311d41c5fbc | 500 | else if(luminosity_read >= 3) luminosity = 5; |
Lambdys | 0:4311d41c5fbc | 501 | else if(luminosity_read >= 2) luminosity = 4;//tres lumineux |
Lambdys | 0:4311d41c5fbc | 502 | else if(luminosity_read >= 1) luminosity = 3;//dangereux pour lipo rider pro si cellule solaire > 5 V |
Lambdys | 0:4311d41c5fbc | 503 | |
Lambdys | 0:4311d41c5fbc | 504 | if(DEBUG)pc.printf("[Luminosite] raw = %f / 10 \n",luminosity_read); |
Lambdys | 0:4311d41c5fbc | 505 | if(DEBUG)pc.printf("[Luminosite] %d / 5 \n",luminosity-2); |
Lambdys | 0:4311d41c5fbc | 506 | |
Lambdys | 0:4311d41c5fbc | 507 | if(DEBUG)pc.printf("4b.mesure de la vitesse du vent...\n"); |
Lambdys | 0:4311d41c5fbc | 508 | |
Lambdys | 0:4311d41c5fbc | 509 | /* test luminosity */ |
Lambdys | 0:4311d41c5fbc | 510 | /* |
Lambdys | 0:4311d41c5fbc | 511 | while(1) |
Lambdys | 0:4311d41c5fbc | 512 | { |
Lambdys | 0:4311d41c5fbc | 513 | luminosity_read = analog_luminosity.read(); |
Lambdys | 0:4311d41c5fbc | 514 | luminosity_read *=10.; |
Lambdys | 0:4311d41c5fbc | 515 | if(DEBUG)pc.printf("[Luminosite] raw = %f / 1 \n",luminosity_read); |
Lambdys | 0:4311d41c5fbc | 516 | |
Lambdys | 0:4311d41c5fbc | 517 | luminosity = 2; //nuit |
Lambdys | 0:4311d41c5fbc | 518 | if(luminosity_read >= 5) luminosity = 7; |
Lambdys | 0:4311d41c5fbc | 519 | else if(luminosity_read >= 4) luminosity = 6; |
Lambdys | 0:4311d41c5fbc | 520 | else if(luminosity_read >= 3) luminosity = 5; |
Lambdys | 0:4311d41c5fbc | 521 | else if(luminosity_read >= 2) luminosity = 4;//tres lumineux |
Lambdys | 0:4311d41c5fbc | 522 | else if(luminosity_read >= 1) luminosity = 3;//dangereux pour lipo rider pro si cellule solaire > 5 V |
Lambdys | 0:4311d41c5fbc | 523 | |
Lambdys | 0:4311d41c5fbc | 524 | if(DEBUG)pc.printf("[Luminosite] %d / 5 \n",luminosity-2); |
Lambdys | 0:4311d41c5fbc | 525 | wait(1); |
Lambdys | 0:4311d41c5fbc | 526 | } |
Lambdys | 0:4311d41c5fbc | 527 | */ |
Lambdys | 0:4311d41c5fbc | 528 | |
Lambdys | 0:4311d41c5fbc | 529 | cpt_anemo=0; |
Lambdys | 0:4311d41c5fbc | 530 | anemo.enable_irq(); |
Lambdys | 0:4311d41c5fbc | 531 | wait(2); |
Lambdys | 0:4311d41c5fbc | 532 | anemo.disable_irq(); |
Lambdys | 0:4311d41c5fbc | 533 | //un contact par seconde est égal à une vitesse du vent de 2,4 km/h |
Lambdys | 0:4311d41c5fbc | 534 | //un contact par 2 secondes est égal à une vitesse du vent de 1,2 km/h |
Lambdys | 0:4311d41c5fbc | 535 | |
Lambdys | 0:4311d41c5fbc | 536 | force_vent = cpt_anemo*1.2; |
Lambdys | 0:4311d41c5fbc | 537 | |
Lambdys | 0:4311d41c5fbc | 538 | if(DEBUG)pc.printf("[Anemometre] vitesse du vent = %f km/h \n",force_vent); |
Lambdys | 0:4311d41c5fbc | 539 | |
Lambdys | 0:4311d41c5fbc | 540 | |
Lambdys | 0:4311d41c5fbc | 541 | |
Lambdys | 0:4311d41c5fbc | 542 | |
Lambdys | 0:4311d41c5fbc | 543 | unsigned char field[SIZE]; |
Lambdys | 0:4311d41c5fbc | 544 | Frame frame ; |
Lambdys | 0:4311d41c5fbc | 545 | //for(;;){ |
Lambdys | 0:4311d41c5fbc | 546 | |
Lambdys | 0:4311d41c5fbc | 547 | //temp_int=-255.; |
Lambdys | 0:4311d41c5fbc | 548 | |
Lambdys | 0:4311d41c5fbc | 549 | //masse=997; |
Lambdys | 0:4311d41c5fbc | 550 | |
Lambdys | 0:4311d41c5fbc | 551 | MEAS_ENABLE = 0;//mode SigFox |
Lambdys | 0:4311d41c5fbc | 552 | new_frame(&frame,field); |
Lambdys | 0:4311d41c5fbc | 553 | stock_temp(&frame,temp_ext); |
Lambdys | 0:4311d41c5fbc | 554 | stock_temp(&frame,temp_int); |
Lambdys | 0:4311d41c5fbc | 555 | stock_int(luminosity,4,&frame); |
Lambdys | 0:4311d41c5fbc | 556 | stock_masse(&frame, masse); |
Lambdys | 0:4311d41c5fbc | 557 | stock_vent(&frame,force_vent); |
Lambdys | 0:4311d41c5fbc | 558 | stock_battery(&frame,battery); |
Lambdys | 0:4311d41c5fbc | 559 | stock_humidity(&frame,humidity); |
Lambdys | 0:4311d41c5fbc | 560 | stock_bit(cadre_1_2,&frame);//non utilisé mais crash si 0! |
Lambdys | 0:4311d41c5fbc | 561 | stock_bit(cadre_3, &frame); |
Lambdys | 0:4311d41c5fbc | 562 | stock_bit(cadre_4,&frame); |
Lambdys | 0:4311d41c5fbc | 563 | stock_bit(cadre_5,&frame); |
Lambdys | 0:4311d41c5fbc | 564 | stock_bit(cadre_6,&frame); |
Lambdys | 0:4311d41c5fbc | 565 | stock_bit(cadre_7,&frame); |
Lambdys | 0:4311d41c5fbc | 566 | stock_bit(cadre_8,&frame);//remplacer par reine |
Lambdys | 0:4311d41c5fbc | 567 | stock_bit(cadre_9_10,&frame);//remplacer par presence_ruche; |
Lambdys | 0:4311d41c5fbc | 568 | stock_bit(stress,&frame); |
Lambdys | 0:4311d41c5fbc | 569 | stock_bit(reine,&frame); |
Lambdys | 0:4311d41c5fbc | 570 | stock_bit(essaimage,&frame); |
Lambdys | 0:4311d41c5fbc | 571 | stock_bit(abeilles,&frame); |
Lambdys | 0:4311d41c5fbc | 572 | validate_frame(&frame); |
Lambdys | 0:4311d41c5fbc | 573 | print_frame(&frame); |
Lambdys | 0:4311d41c5fbc | 574 | send_frame(&frame); |
Lambdys | 0:4311d41c5fbc | 575 | wait(8); //15 * 60 secondes = 15 minutes d'intervalle |
Lambdys | 0:4311d41c5fbc | 576 | TPL5110_DONE=1; |
Lambdys | 0:4311d41c5fbc | 577 | |
Lambdys | 0:4311d41c5fbc | 578 | wait(600); |
Lambdys | 0:4311d41c5fbc | 579 | //} |
Lambdys | 0:4311d41c5fbc | 580 | //return EXIT_SUCCESS; |
Lambdys | 0:4311d41c5fbc | 581 | } |