prova codice locale
Dependencies: mbed ESP8266 Servo
main.cpp
- Committer:
- vidica94
- Date:
- 2016-10-01
- Revision:
- 5:f2e73e0562d0
- Parent:
- 4:5bb51ac9cf4a
- Child:
- 6:3bb8c63c1561
File content as of revision 5:f2e73e0562d0:
#include "mbed.h" #include "com.h" #define TOT_UMIDITA 3300 #define TOT_RUGIADA 3300 #define SEND_TIME 50 // test programma piantina AnalogIn umidit(A0); AnalogIn lux(A1); AnalogIn rugi(A2); Timer timer; DigitalOut irriga(PA_7);// irriga DigitalOut rosso(PA_9);// terreno secco DigitalOut verde(PB_6);// terreno mediamente umido DigitalOut blu(PC_7);// terreno innaffiato da poco o molto umido Serial pc(SERIAL_TX, SERIAL_RX); ESP8266 esp(PB_10, PB_11,115200); int main() { float tempo;//tempo trascorso float umid;//umidità float luce;// luce float rugiada;// rugiada #define priority 1 // ciascuna pianta ha una propria priorità // priorità massima =1 #define tmax 5000 // tempo massimo di attesa prima di far partire l'irrigazione int tmaxr=tmax*priority ;// reale tempo da attendere tenendo conto della priorità int ti=0; uint8_t time_to_send_data = 0;//ogni 5 di questo timer significa che è passato un secondo, all'incirca, tramite la costante SEND_TIME decidiamo ogni quando inviare il dato while(1) { // Letture dei sensori if(ti){ tempo = timer.read(); // Converts and read the analog input value (value from 0.0 to 1.0) il livello di restituzione è normalizzato al massimo valore if( tempo>=tmaxr) { irriga=1; } } umid = umidit.read(); // Converts and read the analog input value (value from 0.0 to 1.0) il livello di restituzione è normalizzato al massimo valore umid = umid * 3300; // Change the value to be in the 0 to 3300 range luce = lux.read(); // Converts and read the analog input value (value from 0.0 to 1.0) il livello di restituzione è normalizzato al massimo valore luce = luce * 3300; // Change the value to be in the 0 to 3300 range rugiada = rugi.read(); // Converts and read the analog input value (value from 0.0 to 1.0) il livello di restituzione è normalizzato al massimo valore rugiada = rugiada * 3300; // Change the value to be in the 0 to 3300 range // ragionamenti // pc.printf("umid = %.0f mV \n", umid); // pc.printf("luce = %.0f mV \n", luce); if (luce >2480) { // se la luce è bassa ( notte) pc.printf("Il sole e' tramontato\n"); if (umid>3100) { // se il terreno è secco pc.printf("terreno secco"); rosso=1; blu=0; verde=0; timer.start(); ti=1; } else if((umid>2000)&&(umid<2750)) { // mediamente umido pc.printf("terreno mediamente umido"); rosso=0; blu=0; verde=1; timer.stop(); timer.reset(); irriga=0;// smetti di irrigare ti=0; } else if(umid<2000) { // se èmolto umido pc.printf("terreno molto umido"); rosso = 0; blu=1; verde=0; timer.stop(); timer.reset(); irriga=0;// smetti di irrigare ti=0; } } else { pc.printf("e' ancora giorno"); // se è giorno non ha senso illuminare i vasi if (umid>3100) { // se il terreno è secco <10% pc.printf("terreno secco"); timer.start(); ti=1; } else if((umid>2000)&&(umid<2750)) { // mediamente umido pc.printf("terreno mediamente umido"); timer.stop(); timer.reset(); irriga=0;// smetti di irrigare ti=0; } else if(umid<2000) { // se èmolto umido pc.printf("terreno molto umido"); timer.stop(); timer.reset(); irriga=0;// smetti di irrigare ti=0; } } wait(0.2); // 200 ms if(++time_to_send_data == SEND_TIME) {//è arrivato finalmente il tempo di inviare! time_to_send_data^=time_to_send_data;//=0; connect(esp); uint8_t perc = (int)(TOT_UMIDITA*umid/100.0); send_data(esp,1,perc);//idx 1 è umidità terreno, 3 è bagnatura fogliare perc = (int)(TOT_RUGIADA*umid/100.0); send_data(esp,3,perc); disconnect(esp); } } }