prova codice locale

Dependencies:   mbed ESP8266 Servo

main.cpp

Committer:
deangelis1993
Date:
2016-10-01
Revision:
4:5bb51ac9cf4a
Parent:
3:5812a96db95f
Child:
5:f2e73e0562d0

File content as of revision 4:5bb51ac9cf4a:

#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 >2.48) { // se la luce è bassa ( notte)


            pc.printf("Il sole e' tramontato\n");
            
            if (umid>3.1) { // se il terreno è secco
                pc.printf("terreno secco");
                rosso=1;
                blu=0;
                verde=0;
                timer.start();
                ti=1;

            }

            else if((umid>2)&&(umid<2.75)) { // 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<2) { // 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>3.1) { // se il terreno è secco <10%
                pc.printf("terreno secco");

                timer.start();
                 ti=1;

            }

            else if((umid>2)&&(umid<2.75)) { // mediamente umido

                pc.printf("terreno mediamente umido");

                timer.stop();
                timer.reset();
                irriga=0;// smetti di irrigare
                 ti=0;

            } else if(umid<2.0) { // 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);
        }
    }
}