prova codice locale
Dependencies: mbed ESP8266 Servo
main.cpp@7:c79c53363102, 2016-10-13 (annotated)
- Committer:
- vidica94
- Date:
- Thu Oct 13 16:41:18 2016 +0000
- Revision:
- 7:c79c53363102
- Parent:
- 6:3bb8c63c1561
versione per guido ;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
vidica94 | 0:f1c2b8a37976 | 1 | #include "mbed.h" |
deangelis1993 | 3:5812a96db95f | 2 | #include "com.h" |
vidica94 | 6:3bb8c63c1561 | 3 | #include "Servo.h" |
vidica94 | 6:3bb8c63c1561 | 4 | |
vidica94 | 6:3bb8c63c1561 | 5 | |
vidica94 | 0:f1c2b8a37976 | 6 | |
deangelis1993 | 4:5bb51ac9cf4a | 7 | #define TOT_UMIDITA 3300 |
deangelis1993 | 4:5bb51ac9cf4a | 8 | #define TOT_RUGIADA 3300 |
deangelis1993 | 1:ce3a084f558e | 9 | #define SEND_TIME 50 |
deangelis1993 | 1:ce3a084f558e | 10 | |
vidica94 | 6:3bb8c63c1561 | 11 | |
vidica94 | 6:3bb8c63c1561 | 12 | |
vidica94 | 6:3bb8c63c1561 | 13 | Servo myservo(D5); |
vidica94 | 0:f1c2b8a37976 | 14 | // test programma piantina |
vidica94 | 0:f1c2b8a37976 | 15 | AnalogIn umidit(A0); |
vidica94 | 0:f1c2b8a37976 | 16 | AnalogIn lux(A1); |
vidica94 | 0:f1c2b8a37976 | 17 | AnalogIn rugi(A2); |
vidica94 | 6:3bb8c63c1561 | 18 | AnalogIn temp(A3); |
vidica94 | 0:f1c2b8a37976 | 19 | Timer timer; |
vidica94 | 0:f1c2b8a37976 | 20 | DigitalOut irriga(PA_7);// irriga |
vidica94 | 0:f1c2b8a37976 | 21 | DigitalOut rosso(PA_9);// terreno secco |
vidica94 | 0:f1c2b8a37976 | 22 | DigitalOut verde(PB_6);// terreno mediamente umido |
vidica94 | 0:f1c2b8a37976 | 23 | DigitalOut blu(PC_7);// terreno innaffiato da poco o molto umido |
vidica94 | 0:f1c2b8a37976 | 24 | Serial pc(SERIAL_TX, SERIAL_RX); |
deangelis1993 | 1:ce3a084f558e | 25 | ESP8266 esp(PB_10, PB_11,115200); |
deangelis1993 | 1:ce3a084f558e | 26 | |
vidica94 | 0:f1c2b8a37976 | 27 | int main() |
vidica94 | 0:f1c2b8a37976 | 28 | { |
vidica94 | 6:3bb8c63c1561 | 29 | pc.baud(9600); |
vidica94 | 0:f1c2b8a37976 | 30 | float tempo;//tempo trascorso |
vidica94 | 0:f1c2b8a37976 | 31 | float umid;//umidità |
vidica94 | 0:f1c2b8a37976 | 32 | float luce;// luce |
vidica94 | 0:f1c2b8a37976 | 33 | float rugiada;// rugiada |
vidica94 | 6:3bb8c63c1561 | 34 | float temperatura;// temperarura amb |
vidica94 | 0:f1c2b8a37976 | 35 | #define priority 1 // ciascuna pianta ha una propria priorità // priorità massima =1 |
vidica94 | 6:3bb8c63c1561 | 36 | #define tmax 5 // tempo massimo di attesa prima di far partire l'irrigazione |
vidica94 | 0:f1c2b8a37976 | 37 | int tmaxr=tmax*priority ;// reale tempo da attendere tenendo conto della priorità |
vidica94 | 0:f1c2b8a37976 | 38 | int ti=0; |
vidica94 | 0:f1c2b8a37976 | 39 | |
deangelis1993 | 1:ce3a084f558e | 40 | 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 |
vidica94 | 6:3bb8c63c1561 | 41 | // test funzionamento led |
vidica94 | 6:3bb8c63c1561 | 42 | rosso=1; |
vidica94 | 6:3bb8c63c1561 | 43 | wait(1); |
vidica94 | 6:3bb8c63c1561 | 44 | rosso=0; |
vidica94 | 6:3bb8c63c1561 | 45 | blu=1; |
vidica94 | 6:3bb8c63c1561 | 46 | wait(1); |
vidica94 | 6:3bb8c63c1561 | 47 | blu=0; |
vidica94 | 6:3bb8c63c1561 | 48 | verde=1; |
vidica94 | 6:3bb8c63c1561 | 49 | wait(1); |
vidica94 | 6:3bb8c63c1561 | 50 | verde=0; |
vidica94 | 6:3bb8c63c1561 | 51 | myservo.calibrate(0.0014, 45.0); // calibrazione servo |
vidica94 | 6:3bb8c63c1561 | 52 | myservo =0.5; |
vidica94 | 6:3bb8c63c1561 | 53 | pc.printf("servo calibrato "); |
vidica94 | 0:f1c2b8a37976 | 54 | while(1) { |
vidica94 | 0:f1c2b8a37976 | 55 | // Letture dei sensori |
vidica94 | 0:f1c2b8a37976 | 56 | if(ti){ |
deangelis1993 | 1:ce3a084f558e | 57 | 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 |
deangelis1993 | 1:ce3a084f558e | 58 | if( tempo>=tmaxr) { |
vidica94 | 6:3bb8c63c1561 | 59 | myservo = 1.0;// irriga |
vidica94 | 6:3bb8c63c1561 | 60 | timer.stop(); |
vidica94 | 6:3bb8c63c1561 | 61 | timer.reset(); |
vidica94 | 6:3bb8c63c1561 | 62 | // lampeggio led rosso 4 volte per segnalare che ha dovuto irrigare forzatamente |
vidica94 | 6:3bb8c63c1561 | 63 | for( int i=0;i<4;i++){ |
vidica94 | 6:3bb8c63c1561 | 64 | rosso=1; |
vidica94 | 6:3bb8c63c1561 | 65 | blu=0; |
vidica94 | 6:3bb8c63c1561 | 66 | verde=0; |
vidica94 | 6:3bb8c63c1561 | 67 | wait(1); |
vidica94 | 6:3bb8c63c1561 | 68 | rosso=0; |
vidica94 | 6:3bb8c63c1561 | 69 | blu=0; |
vidica94 | 6:3bb8c63c1561 | 70 | verde=0; |
vidica94 | 6:3bb8c63c1561 | 71 | } |
vidica94 | 6:3bb8c63c1561 | 72 | } |
vidica94 | 6:3bb8c63c1561 | 73 | } |
vidica94 | 0:f1c2b8a37976 | 74 | 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 |
vidica94 | 0:f1c2b8a37976 | 75 | umid = umid * 3300; // Change the value to be in the 0 to 3300 range |
vidica94 | 0:f1c2b8a37976 | 76 | 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 |
vidica94 | 0:f1c2b8a37976 | 77 | luce = luce * 3300; // Change the value to be in the 0 to 3300 range |
vidica94 | 0:f1c2b8a37976 | 78 | 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 |
vidica94 | 0:f1c2b8a37976 | 79 | rugiada = rugiada * 3300; // Change the value to be in the 0 to 3300 range |
vidica94 | 6:3bb8c63c1561 | 80 | |
vidica94 | 6:3bb8c63c1561 | 81 | 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 |
vidica94 | 6:3bb8c63c1561 | 82 | temperatura*=(3.685503686*100); |
vidica94 | 6:3bb8c63c1561 | 83 | temperatura-=10; |
vidica94 | 6:3bb8c63c1561 | 84 | |
vidica94 | 0:f1c2b8a37976 | 85 | // ragionamenti |
vidica94 | 6:3bb8c63c1561 | 86 | pc.printf("luce è %f\n",luce); |
vidica94 | 0:f1c2b8a37976 | 87 | // pc.printf("umid = %.0f mV \n", umid); |
vidica94 | 0:f1c2b8a37976 | 88 | // pc.printf("luce = %.0f mV \n", luce); |
vidica94 | 6:3bb8c63c1561 | 89 | if (luce<2000) { // se la luce è bassa ( notte) |
vidica94 | 0:f1c2b8a37976 | 90 | |
vidica94 | 0:f1c2b8a37976 | 91 | |
vidica94 | 0:f1c2b8a37976 | 92 | pc.printf("Il sole e' tramontato\n"); |
vidica94 | 0:f1c2b8a37976 | 93 | |
vidica94 | 6:3bb8c63c1561 | 94 | if (umid>1500) { // se il terreno è secco |
vidica94 | 0:f1c2b8a37976 | 95 | pc.printf("terreno secco"); |
vidica94 | 6:3bb8c63c1561 | 96 | rosso=0; |
vidica94 | 6:3bb8c63c1561 | 97 | blu=1; |
vidica94 | 0:f1c2b8a37976 | 98 | verde=0; |
vidica94 | 0:f1c2b8a37976 | 99 | timer.start(); |
vidica94 | 0:f1c2b8a37976 | 100 | ti=1; |
vidica94 | 0:f1c2b8a37976 | 101 | |
vidica94 | 0:f1c2b8a37976 | 102 | } |
vidica94 | 0:f1c2b8a37976 | 103 | |
vidica94 | 6:3bb8c63c1561 | 104 | else if(umid<1500) { // se èmolto umido |
vidica94 | 6:3bb8c63c1561 | 105 | pc.printf("terreno umido"); |
vidica94 | 6:3bb8c63c1561 | 106 | rosso = 0; |
vidica94 | 0:f1c2b8a37976 | 107 | blu=0; |
vidica94 | 0:f1c2b8a37976 | 108 | verde=1; |
vidica94 | 0:f1c2b8a37976 | 109 | timer.stop(); |
vidica94 | 0:f1c2b8a37976 | 110 | timer.reset(); |
vidica94 | 6:3bb8c63c1561 | 111 | |
vidica94 | 0:f1c2b8a37976 | 112 | ti=0; |
vidica94 | 0:f1c2b8a37976 | 113 | } |
vidica94 | 0:f1c2b8a37976 | 114 | } else { |
vidica94 | 0:f1c2b8a37976 | 115 | pc.printf("e' ancora giorno"); |
vidica94 | 0:f1c2b8a37976 | 116 | // se è giorno non ha senso illuminare i vasi |
vidica94 | 0:f1c2b8a37976 | 117 | |
vidica94 | 6:3bb8c63c1561 | 118 | if (umid>1500) { // se il terreno è secco <10% |
vidica94 | 0:f1c2b8a37976 | 119 | pc.printf("terreno secco"); |
vidica94 | 0:f1c2b8a37976 | 120 | |
vidica94 | 0:f1c2b8a37976 | 121 | timer.start(); |
vidica94 | 0:f1c2b8a37976 | 122 | ti=1; |
vidica94 | 0:f1c2b8a37976 | 123 | |
vidica94 | 0:f1c2b8a37976 | 124 | } |
vidica94 | 0:f1c2b8a37976 | 125 | |
vidica94 | 6:3bb8c63c1561 | 126 | else if(umid<1500) { // se umido |
vidica94 | 6:3bb8c63c1561 | 127 | pc.printf("terreno umido"); |
vidica94 | 0:f1c2b8a37976 | 128 | |
vidica94 | 0:f1c2b8a37976 | 129 | timer.stop(); |
vidica94 | 0:f1c2b8a37976 | 130 | timer.reset(); |
vidica94 | 6:3bb8c63c1561 | 131 | |
vidica94 | 0:f1c2b8a37976 | 132 | ti=0; |
vidica94 | 0:f1c2b8a37976 | 133 | } |
vidica94 | 0:f1c2b8a37976 | 134 | } |
vidica94 | 0:f1c2b8a37976 | 135 | wait(0.2); // 200 ms |
vidica94 | 6:3bb8c63c1561 | 136 | // pc.printf("la temperatura ambiente è %f\n",temperatura); |
vidica94 | 7:c79c53363102 | 137 | if(++time_to_send_data == SEND_TIME)//Invio i dagtiì |
deangelis1993 | 1:ce3a084f558e | 138 | {//è arrivato finalmente il tempo di inviare! |
deangelis1993 | 1:ce3a084f558e | 139 | time_to_send_data^=time_to_send_data;//=0; |
deangelis1993 | 1:ce3a084f558e | 140 | connect(esp); |
deangelis1993 | 1:ce3a084f558e | 141 | uint8_t perc = (int)(TOT_UMIDITA*umid/100.0); |
deangelis1993 | 1:ce3a084f558e | 142 | send_data(esp,1,perc);//idx 1 è umidità terreno, 3 è bagnatura fogliare |
deangelis1993 | 3:5812a96db95f | 143 | perc = (int)(TOT_RUGIADA*umid/100.0); |
deangelis1993 | 1:ce3a084f558e | 144 | send_data(esp,3,perc); |
deangelis1993 | 1:ce3a084f558e | 145 | disconnect(esp); |
vidica94 | 7:c79c53363102 | 146 | } |
vidica94 | 0:f1c2b8a37976 | 147 | } |
vidica94 | 0:f1c2b8a37976 | 148 | } |