prova codice locale
Dependencies: mbed ESP8266 Servo
Diff: main.cpp
- Revision:
- 6:3bb8c63c1561
- Parent:
- 5:f2e73e0562d0
- Child:
- 7:c79c53363102
--- a/main.cpp Sat Oct 01 17:13:30 2016 +0000 +++ b/main.cpp Sun Oct 09 09:06:46 2016 +0000 @@ -1,14 +1,21 @@ #include "mbed.h" #include "com.h" +#include "Servo.h" + + #define TOT_UMIDITA 3300 #define TOT_RUGIADA 3300 #define SEND_TIME 50 + + +Servo myservo(D5); // test programma piantina AnalogIn umidit(A0); AnalogIn lux(A1); AnalogIn rugi(A2); +AnalogIn temp(A3); Timer timer; DigitalOut irriga(PA_7);// irriga DigitalOut rosso(PA_9);// terreno secco @@ -19,76 +26,96 @@ int main() { + pc.baud(9600); float tempo;//tempo trascorso float umid;//umidità float luce;// luce float rugiada;// rugiada + float temperatura;// temperarura amb #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 +#define tmax 5 // 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 - +// test funzionamento led + rosso=1; + wait(1); + rosso=0; + blu=1; + wait(1); + blu=0; + verde=1; + wait(1); + verde=0; + myservo.calibrate(0.0014, 45.0); // calibrazione servo +myservo =0.5; + pc.printf("servo calibrato "); 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; - } - } + myservo = 1.0;// irriga + timer.stop(); + timer.reset(); + // lampeggio led rosso 4 volte per segnalare che ha dovuto irrigare forzatamente + for( int i=0;i<4;i++){ + rosso=1; + blu=0; + verde=0; + wait(1); + rosso=0; + blu=0; + verde=0; + } + } + } 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 + + temperatura = temp.read(); // Converts and read the analog input value (value from 0.0 to 1.0) il livello di restituzione è normalizzato al massimo valore + temperatura*=(3.685503686*100); + temperatura-=10; + // ragionamenti - +pc.printf("luce è %f\n",luce); // pc.printf("umid = %.0f mV \n", umid); // pc.printf("luce = %.0f mV \n", luce); - if (luce >2480) { // se la luce è bassa ( notte) + if (luce<2000) { // se la luce è bassa ( notte) pc.printf("Il sole e' tramontato\n"); - if (umid>3100) { // se il terreno è secco + if (umid>1500) { // se il terreno è secco pc.printf("terreno secco"); - rosso=1; - blu=0; + rosso=0; + blu=1; verde=0; timer.start(); ti=1; } - else if((umid>2000)&&(umid<2750)) { // mediamente umido - - pc.printf("terreno mediamente umido"); - rosso=0; + else if(umid<1500) { // se èmolto umido + pc.printf("terreno 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% + if (umid>1500) { // se il terreno è secco <10% pc.printf("terreno secco"); timer.start(); @@ -96,27 +123,18 @@ } - else if((umid>2000)&&(umid<2750)) { // mediamente umido - - pc.printf("terreno mediamente umido"); + else if(umid<1500) { // se umido + pc.printf("terreno 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) + // pc.printf("la temperatura ambiente è %f\n",temperatura); + /* if(++time_to_send_data == SEND_TIME)//Invio i dagtiì {//è arrivato finalmente il tempo di inviare! time_to_send_data^=time_to_send_data;//=0; connect(esp); @@ -125,6 +143,6 @@ perc = (int)(TOT_RUGIADA*umid/100.0); send_data(esp,3,perc); disconnect(esp); - } + }*/ } }