Plant Monitoring Project
Dependencies: mbed SHT21_ncleee WakeUp SSD1306 DHT Adafruit_TCS34725 DS1820
main.cpp@24:6320b46719d6, 2019-11-28 (annotated)
- Committer:
- Germaint
- Date:
- Thu Nov 28 20:16:05 2019 +0000
- Revision:
- 24:6320b46719d6
- Parent:
- 23:424b3149003b
- Child:
- 25:77322fbe298e
Suppression des erreurs restantes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
Germaint | 23:424b3149003b | 1 | #include "main.hh" |
Germaint | 18:d30cd2967da4 | 2 | |
Germaint | 23:424b3149003b | 3 | int main(){ |
Germaint | 23:424b3149003b | 4 | #ifdef DEEPSLEEP |
Germaint | 23:424b3149003b | 5 | WakeUp::calibrate(); |
Germaint | 23:424b3149003b | 6 | #endif |
Germaint | 23:424b3149003b | 7 | #ifdef OLED |
ludollaoo | 20:79f4ef29eafd | 8 | bouton.rise(interruption_bouton); |
Germaint | 23:424b3149003b | 9 | initOLED(); |
Germaint | 23:424b3149003b | 10 | #endif |
Germaint | 1:3fc11a745984 | 11 | |
jufray | 0:e030be8f0310 | 12 | while(1) { |
Germaint | 16:13364798fce6 | 13 | readData(); |
Germaint | 23:424b3149003b | 14 | #ifdef DEEPSLEEP |
Germaint | 23:424b3149003b | 15 | WakeUp::set(DUREE_OFF); |
Germaint | 23:424b3149003b | 16 | WakeUp::attach(&mycallback); |
Germaint | 24:6320b46719d6 | 17 | deepsleep(); |
Germaint | 23:424b3149003b | 18 | #endif |
Germaint | 23:424b3149003b | 19 | #ifndef DEEPSLEEP |
Germaint | 23:424b3149003b | 20 | wait(DUREE_OFF); |
Germaint | 23:424b3149003b | 21 | #endif |
jufray | 0:e030be8f0310 | 22 | } |
jufray | 0:e030be8f0310 | 23 | } |
jufray | 0:e030be8f0310 | 24 | |
jufray | 0:e030be8f0310 | 25 | |
jufray | 0:e030be8f0310 | 26 | float temp_sol() |
jufray | 0:e030be8f0310 | 27 | { |
jufray | 0:e030be8f0310 | 28 | DS.convertTemperature(true, DS1820::all_devices); |
ludollaoo | 22:51aed3b3b452 | 29 | if (DS.unassignedProbe(D2)){ |
Germaint | 23:424b3149003b | 30 | #ifdef DEBUG |
Germaint | 23:424b3149003b | 31 | pc.printf( "D3 not assigned\n\r"); |
Germaint | 23:424b3149003b | 32 | #endif |
jufray | 0:e030be8f0310 | 33 | } |
ludollaoo | 20:79f4ef29eafd | 34 | printf("temp sol: %.1f\n\r", DS.temperature()); |
jufray | 0:e030be8f0310 | 35 | return DS.temperature(); |
jufray | 0:e030be8f0310 | 36 | } |
jufray | 0:e030be8f0310 | 37 | |
Germaint | 23:424b3149003b | 38 | |
Germaint | 23:424b3149003b | 39 | |
Germaint | 1:3fc11a745984 | 40 | int fct_humidity_sol(void) |
jufray | 0:e030be8f0310 | 41 | { |
jufray | 0:e030be8f0310 | 42 | float val_min = 0.377; |
jufray | 0:e030be8f0310 | 43 | float val_max = 0.772; |
jufray | 0:e030be8f0310 | 44 | float mesure, mesure_etalonnee; |
Germaint | 1:3fc11a745984 | 45 | mesure = capteur_humidity_sol.read(); |
jufray | 0:e030be8f0310 | 46 | mesure_etalonnee = (1-((mesure - val_min)/(val_max - val_min)))*100; |
Germaint | 23:424b3149003b | 47 | #ifdef DEBUG |
Germaint | 23:424b3149003b | 48 | pc.printf("hum sol: %d\n\r", (int) mesure_etalonnee); |
Germaint | 23:424b3149003b | 49 | #endif |
jufray | 0:e030be8f0310 | 50 | return (int) mesure_etalonnee; |
jufray | 0:e030be8f0310 | 51 | } |
jufray | 0:e030be8f0310 | 52 | |
Germaint | 23:424b3149003b | 53 | |
Germaint | 18:d30cd2967da4 | 54 | void fct_RGB(void) |
jufray | 0:e030be8f0310 | 55 | { |
jufray | 0:e030be8f0310 | 56 | int somme; |
jufray | 0:e030be8f0310 | 57 | uint16_t clear, red, green, blue; |
jufray | 0:e030be8f0310 | 58 | if (!RGBsens.begin()) |
jufray | 0:e030be8f0310 | 59 | { |
Germaint | 23:424b3149003b | 60 | #ifdef DEBUG |
Germaint | 23:424b3149003b | 61 | pc.printf("No TCS34725 found ... check your connections"); |
Germaint | 23:424b3149003b | 62 | #endif |
Germaint | 15:c73d0d180cc4 | 63 | //while (1); // halt! |
jufray | 0:e030be8f0310 | 64 | } |
jufray | 0:e030be8f0310 | 65 | RGBsens.getRawData(&red, &green, &blue, &clear); |
jufray | 0:e030be8f0310 | 66 | somme = red + green + blue; |
Germaint | 18:d30cd2967da4 | 67 | pr = red*100/somme; |
Germaint | 18:d30cd2967da4 | 68 | pg = green*100/somme; |
Germaint | 18:d30cd2967da4 | 69 | pb = blue*100/somme; |
Germaint | 18:d30cd2967da4 | 70 | lum = clear; |
Germaint | 23:424b3149003b | 71 | #ifdef DEBUG |
Germaint | 23:424b3149003b | 72 | pc.printf("luminosite : %d \n\r", lum); |
Germaint | 23:424b3149003b | 73 | pc.printf("rouge:%d vert:%d bleu:%d \n\r", pr, pg, pb); |
Germaint | 23:424b3149003b | 74 | #endif |
jufray | 0:e030be8f0310 | 75 | } |
jufray | 0:e030be8f0310 | 76 | |
Germaint | 16:13364798fce6 | 77 | void sendDataSigfox(void){ |
Germaint | 23:424b3149003b | 78 | #ifdef DEBUG |
Germaint | 23:424b3149003b | 79 | pc.printf("Sending Data to Sigfox \n\r"); |
Germaint | 23:424b3149003b | 80 | #endif |
Germaint | 16:13364798fce6 | 81 | short tempSol_short, tempAir_short; |
Germaint | 16:13364798fce6 | 82 | tempSol_short = (short)(temperature_sol*10); |
Germaint | 16:13364798fce6 | 83 | tempAir_short = (short)(temperature_air*10); |
jufray | 0:e030be8f0310 | 84 | |
Germaint | 23:424b3149003b | 85 | wisol.printf("AT$SF=%04x%02x%04x%02x%04x%02x%02x%02x\r\n",tempSol_short, humidity_sol, tempAir_short, humidity_air, lum, pr, pg, pb); |
Germaint | 16:13364798fce6 | 86 | } |
Germaint | 2:0bfe25431e8e | 87 | |
Germaint | 2:0bfe25431e8e | 88 | void oledData(void){ |
Germaint | 23:424b3149003b | 89 | #ifdef DEBUG |
Germaint | 23:424b3149003b | 90 | pc.printf("Displaying Data\r\n"); |
Germaint | 23:424b3149003b | 91 | #endif |
Germaint | 18:d30cd2967da4 | 92 | if(!oled_on){ |
Germaint | 18:d30cd2967da4 | 93 | oled.wake(); |
Germaint | 18:d30cd2967da4 | 94 | oled_on = 1; |
Germaint | 18:d30cd2967da4 | 95 | } |
Germaint | 16:13364798fce6 | 96 | oled.cls(0,1); |
Germaint | 2:0bfe25431e8e | 97 | oled.locate(0,0); |
Germaint | 2:0bfe25431e8e | 98 | oled.printf("AIR T : %.1f", temperature_air); |
Germaint | 2:0bfe25431e8e | 99 | oled.locate(1,0); |
Germaint | 2:0bfe25431e8e | 100 | oled.printf("AIR H : %d", humidity_air); |
Germaint | 2:0bfe25431e8e | 101 | oled.locate(3,0); |
Germaint | 2:0bfe25431e8e | 102 | oled.printf("FLOOR T : %.1f", temperature_sol); |
Germaint | 2:0bfe25431e8e | 103 | oled.locate(4,0); |
Germaint | 2:0bfe25431e8e | 104 | oled.printf("FLOOR H : %d", humidity_sol); |
Germaint | 2:0bfe25431e8e | 105 | oled.locate(6,0); |
Germaint | 2:0bfe25431e8e | 106 | oled.printf("Light : %d", lum); |
Germaint | 2:0bfe25431e8e | 107 | oled.locate(7,0); |
Germaint | 2:0bfe25431e8e | 108 | oled.printf("R %d G %d B %d", pr, pg, pb); |
Germaint | 2:0bfe25431e8e | 109 | oled.redraw(); |
Germaint | 2:0bfe25431e8e | 110 | } |
jufray | 0:e030be8f0310 | 111 | |
Germaint | 16:13364798fce6 | 112 | void readData(void){ |
Germaint | 23:424b3149003b | 113 | #ifdef DEBUG |
Germaint | 23:424b3149003b | 114 | pc.printf("Reading Data\n\r"); |
Germaint | 23:424b3149003b | 115 | #endif |
Germaint | 23:424b3149003b | 116 | #ifdef FLOOR_TEMPERATURE |
Germaint | 16:13364798fce6 | 117 | temperature_sol = temp_sol(); |
Germaint | 23:424b3149003b | 118 | #endif |
Germaint | 23:424b3149003b | 119 | #ifdef FLOOR_HUMIDITY |
Germaint | 16:13364798fce6 | 120 | humidity_sol = fct_humidity_sol(); |
Germaint | 23:424b3149003b | 121 | #endif |
Germaint | 23:424b3149003b | 122 | #ifdef AIR_PARAMETERS |
Germaint | 23:424b3149003b | 123 | temperature_air = sht.readTemp(); |
ludollaoo | 20:79f4ef29eafd | 124 | humidity_air = sht.readHumidity(); |
Germaint | 23:424b3149003b | 125 | #endif |
Germaint | 23:424b3149003b | 126 | #ifdef DEBUG |
Germaint | 23:424b3149003b | 127 | printf("hum air: %d\n\r", humidity_air); |
Germaint | 23:424b3149003b | 128 | printf("temp air: %.1f\n\r", temperature_air); |
Germaint | 23:424b3149003b | 129 | #endif |
Germaint | 23:424b3149003b | 130 | #ifdef RGB |
Germaint | 18:d30cd2967da4 | 131 | fct_RGB(); |
Germaint | 23:424b3149003b | 132 | #endif |
Germaint | 23:424b3149003b | 133 | #ifdef SIGFOX |
Germaint | 16:13364798fce6 | 134 | sendDataSigfox(); |
Germaint | 23:424b3149003b | 135 | #endif |
Germaint | 23:424b3149003b | 136 | #ifdef OLED |
Germaint | 18:d30cd2967da4 | 137 | if(oled_on) |
Germaint | 18:d30cd2967da4 | 138 | oledData(); |
Germaint | 23:424b3149003b | 139 | #endif |
Germaint | 16:13364798fce6 | 140 | } |
jufray | 0:e030be8f0310 | 141 | |
Germaint | 18:d30cd2967da4 | 142 | void interruption_bouton(){ |
Germaint | 18:d30cd2967da4 | 143 | bouton.disable_irq(); |
Germaint | 23:424b3149003b | 144 | #ifdef DEBUG |
Germaint | 23:424b3149003b | 145 | pc.printf("Button interrupt\r\n"); |
Germaint | 23:424b3149003b | 146 | #endif |
Germaint | 18:d30cd2967da4 | 147 | if(!oled_on){ |
Germaint | 18:d30cd2967da4 | 148 | oledData(); |
Germaint | 18:d30cd2967da4 | 149 | timeScreen.attach(&turnOffScreen,DUREE_ECRAN_ON); |
Germaint | 18:d30cd2967da4 | 150 | } |
Germaint | 18:d30cd2967da4 | 151 | bouton.enable_irq(); |
Germaint | 18:d30cd2967da4 | 152 | } |
Germaint | 16:13364798fce6 | 153 | |
Germaint | 18:d30cd2967da4 | 154 | void turnOffScreen(void){ |
Germaint | 23:424b3149003b | 155 | #ifdef DEBUG |
Germaint | 23:424b3149003b | 156 | pc.printf("Turning off screen \n\r"); |
Germaint | 23:424b3149003b | 157 | #endif |
Germaint | 18:d30cd2967da4 | 158 | timeScreen.detach(); |
Germaint | 18:d30cd2967da4 | 159 | oled_on = 0; |
Germaint | 18:d30cd2967da4 | 160 | oled.sleep(); |
Germaint | 23:424b3149003b | 161 | } |
Germaint | 23:424b3149003b | 162 | |
Germaint | 23:424b3149003b | 163 | void initOLED(void){ |
Germaint | 23:424b3149003b | 164 | oled.wake(); |
Germaint | 23:424b3149003b | 165 | oled.init(); |
Germaint | 23:424b3149003b | 166 | oled.cls(0,1); |
Germaint | 23:424b3149003b | 167 | oled.locate(4,4); |
Germaint | 23:424b3149003b | 168 | oled.printf("2PA2S"); |
Germaint | 23:424b3149003b | 169 | oled.redraw(); |
Germaint | 23:424b3149003b | 170 | wait(1); |
Germaint | 23:424b3149003b | 171 | oled.cls(0,1); |
Germaint | 23:424b3149003b | 172 | oled.sleep(); |
Germaint | 23:424b3149003b | 173 | } |
Germaint | 23:424b3149003b | 174 | |
Germaint | 23:424b3149003b | 175 | void mycallback(void){} |