Am modularizat implementarea, lucrul cu senzorii se face in fisiere separate, exportand apoi functii in headere.
BMP280: Se foloseste si de functiile de I2C implementate separat, functii implementate si in laboratorul 6. Se cauta adresa, apoi ca in datasheet, se trimite un struct cu 12 campuri
si se configureaza sampling-ul si filtrarea. (Am ales x1 pentru temperatura, x16 pentru presiune si x16 la filtru). Se prelucreaza presiunea si temperatura ca in datasheet. Mai departe, cu ajutorul presiunii determin si altitudinea.
FC-28 Soil Moisture: Un simplu ADC, fac setup-ul ca in laborator si citesc rezultatul. Acesta este ulterior transformat in procent.
DHT11: Pentru umiditatea aerului, folosesc direct biblioteca DHT11. Functia read calculeaza si temperatura, dar o ignor, optand pentru cea calculata cu BMP280.
In fisierul main, plant_watcher.ino, apelez functiile de setup de la senzori, apoi cu SoftwareSerial, fac setup-ul modulului GSM (acesta afiseaza la seriala daca a reusit sa se conecteze si cat de puternic este semnalul, pe o scala de la 0-30, 30 insemnand cea mai buna conexiune). De asemenea, fac setup-ul si pentru intreruperi, configurand intreruperea externa pe pinul 2, unde este butonul si Timer1.
In Loop, citesc valorile de la senzori si cu functia add_info, construiesc in buffer mesajul. Pe langa asta, gestionez si partea de avertizare, verificand valorile pentru temperatura, umiditate si tin cont de cooldown-ul pentru notificari.
O variabila foarte importanta este sendTrigger, de ea depinzand trimiterea mesajului. Aceasta se poate face true, fie din intreruperea de la buton, fie dupa un anumit timp pentru trimiterea mesajului de informare periodic, fie prin declansarea unei avertizari.