Plant Monitoring Project
Dependencies: mbed SHT21_ncleee WakeUp SSD1306 DHT Adafruit_TCS34725 DS1820
main.cpp
- Committer:
- jufray
- Date:
- 2019-10-07
- Revision:
- 0:e030be8f0310
- Child:
- 1:3fc11a745984
File content as of revision 0:e030be8f0310:
#include "mbed.h" Serial pc(SERIAL_TX, SERIAL_RX); Serial nucleo(D1,D0); //Ticker cadence; #include "DS1820.h" DS1820 DS(D3); // capteur temperature sol AnalogIn capteur_humidite_sol(A0); // capteur humidité sol #include "SHT21_ncleee.h" I2C i2c(D4, D5); // capteur humidité & temp de l'air SHT21 sht(&i2c); #include "Adafruit_TCS34725.h" // capteur RGB Adafruit_TCS34725 RGBsens = Adafruit_TCS34725(&i2c, TCS34725_INTEGRATIONTIME_2_4MS, TCS34725_GAIN_16X); AnalogIn ain(A1); // capteur lumière float temp_sol(void); int fct_humidite_sol(void); void fct_RGB(unsigned char *pr, unsigned char *pg, unsigned char *pb); float fct_lumiere(void); void sendDataSigfox(float tempSol, unsigned char *humSol, float tempAir, unsigned char *humAir, unsigned short *lux, unsigned char *R, unsigned char *G, unsigned char *B); int main() { float t; unsigned char humidite_sol; float temp_air; unsigned char hum_air; unsigned char pr, pg, pb; unsigned short lum; //cadence.attach(&sendDataSigfox, ); while(1) { t = temp_sol(); pc.printf("T sol = %.2f\n\r", t); humidite_sol = fct_humidite_sol(); pc.printf("H sol = %d\n\r", humidite_sol); temp_air = sht.readTemp(); pc.printf("temp_air = %.2f\n\r", temp_air); hum_air = sht.readHumidity(); pc.printf("hum_air = %d\n\r", hum_air); fct_RGB(&pr, &pg, &pb); pc.printf("red=%d green=%d blue=%d\n\r", pr, pg, pb); lum = fct_lumiere(); pc.printf("lumiere = %d\n\r", lum); sendDataSigfox(t, &humidite_sol, temp_air, &hum_air, &lum, &pr, &pg, &pb); pc.printf("\n\r"); wait(30); } } float temp_sol() { DS.convertTemperature(true, DS1820::all_devices); if (DS.unassignedProbe(D3)){ pc.printf( "D3 not assigned\n\r"); } return DS.temperature(); } int fct_humidite_sol(void) { float val_min = 0.377; float val_max = 0.772; float mesure, mesure_etalonnee; mesure = capteur_humidite_sol.read(); mesure_etalonnee = (1-((mesure - val_min)/(val_max - val_min)))*100; return (int) mesure_etalonnee; } void fct_RGB(unsigned char *pr, unsigned char *pg, unsigned char *pb) { int somme; uint16_t clear, red, green, blue; if (!RGBsens.begin()) { pc.printf("No TCS34725 found ... check your connections"); while (1); // halt! } RGBsens.getRawData(&red, &green, &blue, &clear); somme = red + green + blue; *pr = red*100/somme; *pg = green*100/somme; *pb = blue*100/somme; } float fct_lumiere() { float convertedValue; float valueIn; float rawRange = 0xFFFF; // 3.3v float logRange = 5.0; // 3.3v = 10^5 lux valueIn = ain.read_u16(); float logLux = valueIn * logRange / rawRange; convertedValue = pow(10, logLux); return convertedValue; } void sendDataSigfox(float tempSol, unsigned char *humSol, float tempAir, unsigned char *humAir, unsigned short *lux, unsigned char *R, unsigned char *G, unsigned char *B){ short tempSol_short, tempAir_short; tempSol *= 10; tempAir *= 10; tempSol_short = (short) tempSol; tempAir_short = (short) tempAir; nucleo.printf("AT$SF=%04x%02x%04x%02x%04x%02x%02x%02x\r\n",tempSol_short, *humSol, tempAir_short, *humAir, *lux, *R, *G, *B); }