Plant Monitoring Project
Dependencies: mbed SHT21_ncleee ssd1306_library Adafruit_TCS34725 DS1820
main.cpp@0:e030be8f0310, 2019-10-07 (annotated)
- Committer:
- jufray
- Date:
- Mon Oct 07 10:03:30 2019 +0000
- Revision:
- 0:e030be8f0310
- Child:
- 1:3fc11a745984
hi;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
jufray | 0:e030be8f0310 | 1 | #include "mbed.h" |
jufray | 0:e030be8f0310 | 2 | |
jufray | 0:e030be8f0310 | 3 | |
jufray | 0:e030be8f0310 | 4 | Serial pc(SERIAL_TX, SERIAL_RX); |
jufray | 0:e030be8f0310 | 5 | Serial nucleo(D1,D0); |
jufray | 0:e030be8f0310 | 6 | //Ticker cadence; |
jufray | 0:e030be8f0310 | 7 | |
jufray | 0:e030be8f0310 | 8 | #include "DS1820.h" |
jufray | 0:e030be8f0310 | 9 | DS1820 DS(D3); // capteur temperature sol |
jufray | 0:e030be8f0310 | 10 | |
jufray | 0:e030be8f0310 | 11 | |
jufray | 0:e030be8f0310 | 12 | AnalogIn capteur_humidite_sol(A0); // capteur humidité sol |
jufray | 0:e030be8f0310 | 13 | |
jufray | 0:e030be8f0310 | 14 | |
jufray | 0:e030be8f0310 | 15 | #include "SHT21_ncleee.h" |
jufray | 0:e030be8f0310 | 16 | I2C i2c(D4, D5); // capteur humidité & temp de l'air |
jufray | 0:e030be8f0310 | 17 | SHT21 sht(&i2c); |
jufray | 0:e030be8f0310 | 18 | |
jufray | 0:e030be8f0310 | 19 | #include "Adafruit_TCS34725.h" // capteur RGB |
jufray | 0:e030be8f0310 | 20 | Adafruit_TCS34725 RGBsens = Adafruit_TCS34725(&i2c, TCS34725_INTEGRATIONTIME_2_4MS, TCS34725_GAIN_16X); |
jufray | 0:e030be8f0310 | 21 | |
jufray | 0:e030be8f0310 | 22 | AnalogIn ain(A1); // capteur lumière |
jufray | 0:e030be8f0310 | 23 | |
jufray | 0:e030be8f0310 | 24 | float temp_sol(void); |
jufray | 0:e030be8f0310 | 25 | int fct_humidite_sol(void); |
jufray | 0:e030be8f0310 | 26 | void fct_RGB(unsigned char *pr, unsigned char *pg, unsigned char *pb); |
jufray | 0:e030be8f0310 | 27 | float fct_lumiere(void); |
jufray | 0:e030be8f0310 | 28 | void sendDataSigfox(float tempSol, unsigned char *humSol, float tempAir, unsigned char *humAir, unsigned short *lux, unsigned char *R, unsigned char *G, unsigned char *B); |
jufray | 0:e030be8f0310 | 29 | |
jufray | 0:e030be8f0310 | 30 | int main() { |
jufray | 0:e030be8f0310 | 31 | |
jufray | 0:e030be8f0310 | 32 | float t; |
jufray | 0:e030be8f0310 | 33 | unsigned char humidite_sol; |
jufray | 0:e030be8f0310 | 34 | float temp_air; |
jufray | 0:e030be8f0310 | 35 | unsigned char hum_air; |
jufray | 0:e030be8f0310 | 36 | unsigned char pr, pg, pb; |
jufray | 0:e030be8f0310 | 37 | unsigned short lum; |
jufray | 0:e030be8f0310 | 38 | |
jufray | 0:e030be8f0310 | 39 | //cadence.attach(&sendDataSigfox, ); |
jufray | 0:e030be8f0310 | 40 | |
jufray | 0:e030be8f0310 | 41 | while(1) { |
jufray | 0:e030be8f0310 | 42 | |
jufray | 0:e030be8f0310 | 43 | t = temp_sol(); |
jufray | 0:e030be8f0310 | 44 | pc.printf("T sol = %.2f\n\r", t); |
jufray | 0:e030be8f0310 | 45 | |
jufray | 0:e030be8f0310 | 46 | humidite_sol = fct_humidite_sol(); |
jufray | 0:e030be8f0310 | 47 | pc.printf("H sol = %d\n\r", humidite_sol); |
jufray | 0:e030be8f0310 | 48 | |
jufray | 0:e030be8f0310 | 49 | temp_air = sht.readTemp(); |
jufray | 0:e030be8f0310 | 50 | pc.printf("temp_air = %.2f\n\r", temp_air); |
jufray | 0:e030be8f0310 | 51 | hum_air = sht.readHumidity(); |
jufray | 0:e030be8f0310 | 52 | pc.printf("hum_air = %d\n\r", hum_air); |
jufray | 0:e030be8f0310 | 53 | |
jufray | 0:e030be8f0310 | 54 | fct_RGB(&pr, &pg, &pb); |
jufray | 0:e030be8f0310 | 55 | pc.printf("red=%d green=%d blue=%d\n\r", pr, pg, pb); |
jufray | 0:e030be8f0310 | 56 | |
jufray | 0:e030be8f0310 | 57 | lum = fct_lumiere(); |
jufray | 0:e030be8f0310 | 58 | pc.printf("lumiere = %d\n\r", lum); |
jufray | 0:e030be8f0310 | 59 | |
jufray | 0:e030be8f0310 | 60 | |
jufray | 0:e030be8f0310 | 61 | sendDataSigfox(t, &humidite_sol, temp_air, &hum_air, &lum, &pr, &pg, &pb); |
jufray | 0:e030be8f0310 | 62 | |
jufray | 0:e030be8f0310 | 63 | pc.printf("\n\r"); |
jufray | 0:e030be8f0310 | 64 | wait(30); |
jufray | 0:e030be8f0310 | 65 | } |
jufray | 0:e030be8f0310 | 66 | } |
jufray | 0:e030be8f0310 | 67 | |
jufray | 0:e030be8f0310 | 68 | |
jufray | 0:e030be8f0310 | 69 | float temp_sol() |
jufray | 0:e030be8f0310 | 70 | { |
jufray | 0:e030be8f0310 | 71 | DS.convertTemperature(true, DS1820::all_devices); |
jufray | 0:e030be8f0310 | 72 | if (DS.unassignedProbe(D3)){ |
jufray | 0:e030be8f0310 | 73 | pc.printf( "D3 not assigned\n\r"); |
jufray | 0:e030be8f0310 | 74 | } |
jufray | 0:e030be8f0310 | 75 | return DS.temperature(); |
jufray | 0:e030be8f0310 | 76 | } |
jufray | 0:e030be8f0310 | 77 | |
jufray | 0:e030be8f0310 | 78 | int fct_humidite_sol(void) |
jufray | 0:e030be8f0310 | 79 | { |
jufray | 0:e030be8f0310 | 80 | float val_min = 0.377; |
jufray | 0:e030be8f0310 | 81 | float val_max = 0.772; |
jufray | 0:e030be8f0310 | 82 | float mesure, mesure_etalonnee; |
jufray | 0:e030be8f0310 | 83 | mesure = capteur_humidite_sol.read(); |
jufray | 0:e030be8f0310 | 84 | mesure_etalonnee = (1-((mesure - val_min)/(val_max - val_min)))*100; |
jufray | 0:e030be8f0310 | 85 | return (int) mesure_etalonnee; |
jufray | 0:e030be8f0310 | 86 | } |
jufray | 0:e030be8f0310 | 87 | |
jufray | 0:e030be8f0310 | 88 | void fct_RGB(unsigned char *pr, unsigned char *pg, unsigned char *pb) |
jufray | 0:e030be8f0310 | 89 | { |
jufray | 0:e030be8f0310 | 90 | int somme; |
jufray | 0:e030be8f0310 | 91 | uint16_t clear, red, green, blue; |
jufray | 0:e030be8f0310 | 92 | if (!RGBsens.begin()) |
jufray | 0:e030be8f0310 | 93 | { |
jufray | 0:e030be8f0310 | 94 | pc.printf("No TCS34725 found ... check your connections"); |
jufray | 0:e030be8f0310 | 95 | while (1); // halt! |
jufray | 0:e030be8f0310 | 96 | } |
jufray | 0:e030be8f0310 | 97 | RGBsens.getRawData(&red, &green, &blue, &clear); |
jufray | 0:e030be8f0310 | 98 | somme = red + green + blue; |
jufray | 0:e030be8f0310 | 99 | *pr = red*100/somme; |
jufray | 0:e030be8f0310 | 100 | *pg = green*100/somme; |
jufray | 0:e030be8f0310 | 101 | *pb = blue*100/somme; |
jufray | 0:e030be8f0310 | 102 | } |
jufray | 0:e030be8f0310 | 103 | |
jufray | 0:e030be8f0310 | 104 | float fct_lumiere() |
jufray | 0:e030be8f0310 | 105 | { |
jufray | 0:e030be8f0310 | 106 | float convertedValue; |
jufray | 0:e030be8f0310 | 107 | float valueIn; |
jufray | 0:e030be8f0310 | 108 | float rawRange = 0xFFFF; // 3.3v |
jufray | 0:e030be8f0310 | 109 | float logRange = 5.0; // 3.3v = 10^5 lux |
jufray | 0:e030be8f0310 | 110 | valueIn = ain.read_u16(); |
jufray | 0:e030be8f0310 | 111 | float logLux = valueIn * logRange / rawRange; |
jufray | 0:e030be8f0310 | 112 | convertedValue = pow(10, logLux); |
jufray | 0:e030be8f0310 | 113 | return convertedValue; |
jufray | 0:e030be8f0310 | 114 | } |
jufray | 0:e030be8f0310 | 115 | |
jufray | 0:e030be8f0310 | 116 | |
jufray | 0:e030be8f0310 | 117 | void sendDataSigfox(float tempSol, unsigned char *humSol, float tempAir, unsigned char *humAir, unsigned short *lux, unsigned char *R, unsigned char *G, unsigned char *B){ |
jufray | 0:e030be8f0310 | 118 | short tempSol_short, tempAir_short; |
jufray | 0:e030be8f0310 | 119 | tempSol *= 10; |
jufray | 0:e030be8f0310 | 120 | tempAir *= 10; |
jufray | 0:e030be8f0310 | 121 | tempSol_short = (short) tempSol; |
jufray | 0:e030be8f0310 | 122 | tempAir_short = (short) tempAir; |
jufray | 0:e030be8f0310 | 123 | |
jufray | 0:e030be8f0310 | 124 | nucleo.printf("AT$SF=%04x%02x%04x%02x%04x%02x%02x%02x\r\n",tempSol_short, *humSol, tempAir_short, *humAir, *lux, *R, *G, *B); |
jufray | 0:e030be8f0310 | 125 | } |
jufray | 0:e030be8f0310 | 126 | |
jufray | 0:e030be8f0310 | 127 |