salve,
sto realizzando un programma per controllare l, irrigazione sia da telefono attraverso un modulo bluettoth sia in automatico con sensore di umidita.
quando il pulsante è su stato 1 controllo da telefono
se 0 controllo automatico.
ecco il programma che pero nn funziona
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
int pompa = 13;
int UmiditaSensore = 1;
int valoreumidita;
int b = 0;
int oldval = 0;
int stato = 0;
int pulsante = 2;
void setup()
{
pinMode(pompa, OUTPUT);
pinMode(pulsante, INPUT);
mySerial.begin(9600);
Serial.begin(9600);
delay(1000);
}
void loop()
{
b = digitalRead(pulsante);
delay(10);
while (mySerial.available())
{
char dato = mySerial.read();
if ((b == HIGH) && (oldval == LOW))
{
stato = 1 - stato;
}
oldval = b;
if (stato == 1) {
switch (dato) {
case 'E':
{
digitalWrite(pompa, HIGH);
break;
}
case 'e':
{
digitalWrite(pompa, LOW);
break;
}
}
}
else {
if (stato == 0)
{ valoreumidita = analogRead(UmiditaSensore);
Serial.println(valoreumidita);
if (valoreumidita < 300)
{ digitalWrite(pompa, HIGH);
} else
{ digitalWrite(pompa, LOW);
}
}
}
}
}
SoftwareSerial mySerial(10, 11);
int pompa = 13;
int UmiditaSensore = 1;
int valoreumidita;
int b = 0;
int oldval = 0;
int stato = 0;
int pulsante = 2;
void setup()
{
pinMode(pompa, OUTPUT);
pinMode(pulsante, INPUT);
mySerial.begin(9600);
Serial.begin(9600);
delay(1000);
}
void loop()
{
b = digitalRead(pulsante);
delay(10);
while (mySerial.available())
{
char dato = mySerial.read();
if ((b == HIGH) && (oldval == LOW))
{
stato = 1 - stato;
}
oldval = b;
if (stato == 1) {
switch (dato) {
case ‘E’:
{
digitalWrite(pompa, HIGH);
Ho modificato il programma e funziona quasi come vorrei.
L’ unico problema da risolvere è:
quando il pulsante è su stato 0 e la pompa è attiva (perchè la condizione del sensore di umidita è verificata) mettendo il pulsante su stato 1 non si spegne.
Devo aggiungere una variabile booleana ?
#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);
int pompa = 13;
int UmiditaSensore = 1;
int valoreumidita;
int b = 0;
int oldval = 0;
int stato = 0;
int pulsante = 19;
void setup()
{
pinMode(pompa, OUTPUT);
pinMode(pulsante, INPUT);
mySerial.begin(9600);
Serial.begin(9600);
delay(1000);
}
void loop()
{
b = digitalRead(pulsante);
delay(10);
if ((b == HIGH) && (oldval == LOW))
{
stato = 1 - stato;
}
oldval = b;
if (stato == 1) {
while (mySerial.available())
{
char dato = mySerial.read();
switch (dato) {
case 'E':
{
digitalWrite(pompa, HIGH);
break;
}
case 'e':
{
digitalWrite(pompa, LOW);
break;
}
}
}
}
else {
if (stato == 0)
{ valoreumidita = analogRead(UmiditaSensore);
Serial.println(valoreumidita);
if (valoreumidita < 700)
{ digitalWrite(pompa, HIGH);
} else
{ digitalWrite(pompa, LOW);
}
}
}
}