Olá pessoal, tenho um problema onde o meu sensor de umidade de solo não está fazendo a leitura inicial onde tem a função de dizer se o solo está seco ou úmido, estou usando as portas A0, GND e VCC, A0 no Arduino e os demais na protoboard. Só que estou em duvida no meu código
segue o código do sensor
void loop()
{
//Le o valor do pino A0 do sensor
ValorAnalogIn = analogRead(sensor); //Leitura do Valor Analógico do Sensor
UmidPercent = map(ValorAnalogIn, 1023, 0, 0, 100); //Mapeando o valor entre 0 e 100
umidade = 100 - UmidPercent;
if ( (umidade > (ValorAnterior) + 1) || (umidade < (ValorAnterior) - 1))
{
if (umidade < 60 && BaixaUmid == 0)
{
BaixaUmid = 1;
AltaUmid = 0;
MensUmidBaixa();
}
if (umidade >= 60 && AltaUmid == 0)
{
AltaUmid = 1;
BaixaUmid = 0;
MensUmidNormal();
}
ValorAnterior = umidade;
}
Esse código parece ser o mesmo da thread anterior . Coloco em baixo para referência.
As funcões analogRead() e map() devolvem um valor do tipo int. No entanto, estás a usar variáveis do tipo byte para receber os valores. Um int tem 16 bits, um byte tem 8 bits, o valor de um int nao cabe num byte.
Durante os cálculos também é boa ideia usar variáveis com tamanho suficiente para não ocorrer o overflow.
Ao colocares uma questão, para facilitar a ajuda, coloca o output do erro que estás a obter, indicando os valores que esperavas obter .
#include <SoftwareSerial.h>
SoftwareSerial chip(10, 11);
String SeuNumero = "+55920000000"; //Digite seu celular com +55, o DDD da sua cidade e o seu numero com o 9 na frente
#define sensor A0
bool BaixaUmid = 0, AltaUmid = 0;
byte UmidPercent = 0, umidade = 0, ValorAnterior = 0;
int ValorAnalogIn = 0;
void setup() {
Serial.begin(9600);
Serial.println("Inicializando Sistema...");
delay(5000);
chip.begin(9600);
delay(1000);
pinMode(sensor, INPUT); //Configura o Pino do Sensor como Entrada
ValorAnterior = analogRead(sensor); //Captura um primeiro valor de referencia inicial para a variavel ValorAnterior
}
void loop() {
//Le o valor do pino A0 do sensor
ValorAnalogIn = analogRead(sensor); //Leitura do Valor Analógico do Sensor
UmidPercent = map(ValorAnalogIn, 1023, 0, 0, 100); //Mapeando o valor entre 0 e 100
umidade = 100 - UmidPercent;
if ((umidade > (ValorAnterior) + 1) || (umidade < (ValorAnterior) - 1)) {
if (umidade < 60 && BaixaUmid == 0) {
BaixaUmid = 1;
AltaUmid = 0;
MensUmidBaixa();
}
if (umidade >= 60 && AltaUmid == 0) {
AltaUmid = 1;
BaixaUmid = 0;
MensUmidNormal();
}
ValorAnterior = umidade;
}
}
void MensUmidBaixa() {//Funcao para enviar mensagem de alerta Umidade Baixa
chip.println("AT+CMGF=1\r\n");
delay(1000);
chip.println("AT+CMGS=\"+5592000000\"\r\n");
delay(1000);
String SMS = "Baixa Umidade";
chip.println(SMS);
delay(100);
chip.println((char) 26);
delay(1000);
}
void MensUmidNormal() { //Funcao para enviar mensagem de alerta Umidade Normal
chip.println("AT+CMGF=1\r\n");
delay(1000);
chip.println("AT+CMGS=\"+559200000\"\r\n");
delay(1000);
String SMS = "Umidade Normal";
chip.println(SMS);
delay(100);
chip.println((char) 26);
delay(1000);
}