So … I’m a beginner as you guys can see and I still can’t make it work.
the problem continues, when I click the manual option on the Segmented Switch Button, the other button (Manual Button) does not work, it doesn’t activate or deactivate the relay. i’ve tried with an IF and with an Swith Case, but can’t seen to make it work.
Please see if you guys could help me, i’m brazilian and some discussions i don’t understand everything.
Here is all of the code
// Monitoramento umidade printando em monitor serial, LCD e em aplicativo
#include <LiquidCrystal.h> //inicia lib do LCD
LiquidCrystal lcd(12, 11, 10, 9, 8, 6); // seta portas do LCD
#define sensorUmidade A0 // Sensor de umidade de solo do módulo
#define pinRele 4
unsigned long tempoAnterior = 0; // Variável utilizada para guardar o tempo anterior
unsigned long intervalo = 5000; // Intervalo de tempo em MS para cada leitura
float percentual;
int estado;
int rele;
#define BLYNK_PRINT Serial
#include <ESP8266_Lib.h>
#include <BlynkSimpleShieldEsp8266.h>
// You should get Auth Token in the Blynk App.
// Go to the Project Settings (nut icon).
char auth[] = "2a1309c37024460ead7e338265a850a6";
// Your WiFi credentials.
// Set password to "" for open networks.
char ssid[] = "********";
char pass[] = "***********";
// Hardware Serial on Mega, Leonardo, Micro...
//#define EspSerial Serial1
// or Software Serial on Uno, Nano...
#include <SoftwareSerial.h>
SoftwareSerial EspSerial(2, 3); // RX, TX
// Your ESP8266 baud rate:
#define ESP8266_BAUD 9600
ESP8266 wifi(&EspSerial);
BlynkTimer timer;
void myTimerEvent()
{
// You can send any value at any time.
// Please don't send more that 10 values per second.
Blynk.virtualWrite(V5, millis() / 1000);
}
BLYNK_WRITE(V0)
{
switch (param.asInt())
{
Blynk.virtualWrite(V2, rele);
case 1: { // Manual
Serial.println("Manual selected");
switch (rele)
{ case 1: { // RELÉ DESLIGADO
Serial.println("Válvula desligada");
digitalWrite(pinRele, HIGH);
break;
}
case 2: { // RELÉ LIGADO
Serial.println("Válvula ligada");
digitalWrite(pinRele, LOW);
break;
}
}
break;
}
case 2: { // Automático
Serial.println("Automático selected");
estado = 2;
if (percentual <= 10 ) { // se tiver menor ou igual que 30%, liga o relé; O relé fica ligado até chegar em 70%;
digitalWrite(pinRele, LOW);
}
if (percentual >= 50 ) { // se tiver maior ou igual a 70%, desliga o relé. Caso o percentual comece a descer abaixo de 70% e a ultima ação foi desligar o relé,
digitalWrite(pinRele, HIGH); // o relé continuará desligado até alcançar 30%;
}
break;
}
case 3: { // Programado
Serial.println("Programado selected");
estado = 3;
break;
}
}
}
void sendSensor()
{
Blynk.virtualWrite(V1, percentual);
}
void setup()
{
pinMode( pinRele, OUTPUT);
digitalWrite(pinRele, HIGH);
lcd.begin(16, 2);
// Debug console
Serial.begin(9600);
// Set ESP8266 baud rate
EspSerial.begin(ESP8266_BAUD);
delay(10);
Blynk.begin(auth, wifi, ssid, pass);
timer.setInterval(1000L, myTimerEvent);
timer.setInterval(1000L, sendSensor);
}
void loop()
{
unsigned long tempoAtual = millis(); // Realizamos a leitura atual do tempo em que o nosso Arduino Nano está ligado
if (tempoAtual - tempoAnterior > intervalo) { // Pequena lógica para realizar leituras temporizadas sem parar o microcontrolador
tempoAnterior = tempoAtual; // Guardamos o tempo anterior como o ultimo intervalo de tempo lido
int leitura = analogRead(sensorUmidade); // Leitura dos dados analógicos vindos do sensor de umidade de solo
percentual = map(leitura, 1023, 0, 0, 100);
if (leitura <= 1023 && leitura >= 682) { // Se a leitura feita for um valor entre 1023 e 682 podemos definir que o solo está com uma baixa condutividade, logo a planta deve ser regada
Serial.println("Nível de Umidade Baixo");
Serial.print(percentual);
Serial.println(" % ");
Serial.println(leitura);
lcd.setCursor(0, 0);
lcd.print( percentual);
lcd.print( "%" );
lcd.setCursor(0, 1);
lcd.print("Umidade Baixa");
} else {
if (leitura <= 681 && leitura >= 341) { // Se a leitura feita for um valor entre 681 e 341 podemos definir que o solo está com um nível médio de umidade, logo dependendo da planta pode ou não ser vantajoso regar
Serial.println("Nível de Umidade Médio");
Serial.print(percentual);
Serial.println(" % ");
Serial.println(leitura);
lcd.setCursor(0, 0);
lcd.print( percentual);
lcd.print( "%" );
lcd.setCursor(0, 1);
lcd.print("Umidade Media");
}
else {
if (leitura <= 340 && leitura >= 0) { // Se a leitura feita for um valor entre 0 e 340 podemos definir que o solo está com um nível aceitável de umidade, logo talvez não seja interessante regar neste momento
Serial.println("Nível de Umidade Alto");
Serial.print(percentual);
Serial.println(" % ");
Serial.println(leitura);
lcd.setCursor(0, 0);
lcd.print( percentual);
lcd.print( "%" );
lcd.setCursor(0, 1);
lcd.print("Umidade Alta ");
}
}
}
}
Blynk.syncAll();
Blynk.run();
timer.run(); // Initiates BlynkTimer
}