Hi,
I making a plant caretaker. It should turn on/off light and water pump. Turning on/off light depends on setted hour. Also show how many water is in reserve by sr-04 (actual shows only distance) and save data on SD. All is connectig with terminal on android via bluetooth. Problem is that when I delete line 166 "Serial.println("LED On D13 Off ! "); ". When I do that DHT stop showing data and print "nan" (screenshot). I dont know too, how to wait for input from Serial Monitor - "!while(Serial.available() {}" not work, flush() too. One more problem - when i try to input for example soil moisture 82 then program set it on 10% and run "if (odebraneDane == '2')".
https://photos.app.goo.gl/8akAh3rZ9c2yqJFj1
Thanks in advance
#include <SoftwareSerial.h>// import the serial library
#include <SPI.h> //
#include <SD.h> // Biblioteki karty sd
File plik; //nazwa pliku (na sd)
#include <DHT.h>
#include <Wire.h> //
#include <DS3231.h> //Biblioteki zegara rtc
DS3231 clock;
RTCDateTime dt;
#define trigPin 13
#define echoPin 12
#define DHTPIN 5
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
SoftwareSerial Genotronex(10, 11); // RX, TX
int swiatlo = 0; //czujnik światła light
int wilgleby = 0; //wilgotnosc gleby soil moisture
float h = 0; //wilgoc powietrza humidity
float t = 0; //temperatura temp
int zadanawilgoc = 100; // setted soil moisture
int zadanagodzina = 22; // setted hour evening (lights off)
int zadanagodzinarano = 9; // setted hour morning (lights on)
int odebraneDane; // the data given from Computer
void setup() {
Genotronex.begin(9600);
Genotronex.println("1 - Podaj log, 2-aktualny stan, 3-ustal wilgoc, 4-godzina wylaczania swiatel, 5-godzina wlaczania swiatel");
dht.begin();
clock.begin();
clock.setDateTime(__DATE__, __TIME__);
pinMode(trigPin, OUTPUT); //Pin, do którego podłączymy trig jako wyjście
pinMode(echoPin, INPUT); //a echo, jako wejście
pinMode(3, OUTPUT); //przekaznik pin 3 relay
pinMode(4, OUTPUT); //przekaznik pin 4 relay
digitalWrite(3, HIGH); //relay
digitalWrite(4, HIGH); //relay
// Usyawiamy Alarm2 - Kazda pierwsza minuta kazdej godziny z dopasowaniem do minut
// setAlarm2(Date or Day, Hour, Minute, Mode, Armed = true)
clock.setAlarm2(0, 0, 1, DS3231_MATCH_M);
}
void loop() {
swiatlo = analogRead(A4); //czujnik światła light
wilgleby = analogRead(A5); //wilgotnosc gleby soil mois
wilgleby = map (wilgleby, 0, 580, 0, 100);
h = dht.readHumidity(); //wilgoc powietrza humidity
t = dht.readTemperature(); //temperatura temp
if (clock.isAlarm2())
{
zapiszlog ();
}
if (dt.hour < zadanagodzinarano) //Włączanie lamp (przekaźnik) lights on
{
digitalWrite(3, LOW);
}
if (dt.hour > zadanagodzina) //Wyłączanie lamp (przekaźnik) lights off
{
digitalWrite(3, HIGH);
}
if (wilgleby < zadanawilgoc) // włącza pompke (przekaźnik) watering
{
digitalWrite(4, LOW);
delay(1000);
digitalWrite(4, HIGH);
}
if (Genotronex.available()) {
odebraneDane = Genotronex.read();
}
if (odebraneDane == '1') //podaj log
{
plik = SD.open("Data_log.txt"); //otwórz plik Data_log.txt
while (plik.available()) //wykonuj pętlę dopókiwszystkie dane
{ //nie zostaną zczytane
Genotronex.write(plik.read()); //wypisz zawartość pliku
}
plik.close(); //zamknij plik
}
if (odebraneDane == '2') // aktualny stan actual conditions
{
dt = clock.getDateTime();
Genotronex.print(dt.year); Genotronex.print("-");
Genotronex.print(dt.month); Genotronex.print("-");
Genotronex.print(dt.day); Genotronex.print(" ");
Genotronex.print(dt.hour); Genotronex.print(":");
Genotronex.print(dt.minute); Genotronex.print(":");
Genotronex.print(dt.second); Genotronex.println("");
Genotronex.print("stan wody: "); Genotronex.print(zmierzOdleglosc()); Genotronex.println(" cm");
Genotronex.print("światło: "); Genotronex.print(swiatlo); Genotronex.println(" Lux");
Genotronex.print("wilgotność gleby: "); Genotronex.print(wilgleby); Genotronex.println(" %");
Genotronex.print("temperatura powietrza: "); Genotronex.print(t); Genotronex.println(" *C");
Genotronex.print("wilgotność powietrza: "); Genotronex.print(h); Genotronex.println(" %");
Genotronex.print("Ustalona wilgotność: "); Genotronex.print(zadanawilgoc); Genotronex.println(" %");
Genotronex.print("Godzina gaszenia świateł "); Genotronex.println(zadanagodzina);
Genotronex.print("Godzina zapalania świateł "); Genotronex.println(zadanagodzinarano);
}
if (odebraneDane == '3') // set soil moisture
{
Genotronex.print("Podaj wilgotność ziemi do utrzymania w %:") ;
Genotronex.read();
zadanawilgoc = Genotronex.read();
Genotronex.println("Ustalono %: ") ;
Genotronex.println(zadanawilgoc) ;
}
if (odebraneDane == '4') //set hour after which lights off
{
Genotronex.println("Podaj godzinę gaszenia świateł:") ;
while (!Genotronex.available()) {}
Genotronex.read();
zadanagodzina = Genotronex.read();
Genotronex.println("Ustalono: ") ;
Genotronex.println(zadanagodzina) ;
}
if (odebraneDane == '5') //set hour after which lights on
{
Genotronex.println("Podaj godzinę włączenia świateł:") ;
while (!Genotronex.available()) {
}
Genotronex.read();
zadanagodzina = Genotronex.read();
Genotronex.println("Ustalono: ") ;
Genotronex.println(zadanagodzinarano) ;
}
odebraneDane = '0';
}
//////////////////////////////////////////////////////////////////////////////////////////
void zapiszlog () { //Feriar Lab save log
plik = SD.open("Data_log.txt", FILE_WRITE); //otwórz plik 123.txt
dt = clock.getDateTime();
plik.print(dt.year); plik.print("-");
plik.print(dt.month); plik.print("-");
plik.print(dt.day); plik.print(" ");
plik.print(dt.hour); plik.print(":");
plik.print(dt.minute); plik.print(":");
plik.print(dt.second); plik.println("");
plik.print("stan wody: "); plik.print(zmierzOdleglosc()); plik.println(" cm");
plik.print("światło: "); plik.print(swiatlo); plik.println(" Lux");
plik.print("wilgotność gleby: "); plik.print(wilgleby); plik.println(" %");
plik.print("temperatura powietrza: "); plik.print(t); plik.println(" *C");
plik.print("wilgotność powietrza: "); plik.print(h); plik.println(" %");
plik.print("Ustalona wilgotność: "); plik.print(zadanawilgoc); plik.println(" %");
plik.print("Godzina zapalania świateł "); plik.println(zadanagodzinarano);
plik.print("Godzina gaszenia świateł: "); plik.println(zadanagodzina);
plik.close(); //zamknij/zapisz plik
delay(400); //odczekaj 0,3s
}
int zmierzOdleglosc() { //zmierz odleglosc measure distance
long czas, dystans;
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(30);
digitalWrite(trigPin, LOW);
czas = pulseIn(echoPin, HIGH);
dystans = czas / 58;
return dystans;
}