// Programa para medir nível pluviométrico
// Universidade de Vassouras
#include <LiquidCrystal_I2C.h>
int REED = 2;
int val;
int old_val = HIGH; // Inicializa com HIGH para detectar a transição para LOW
int REEDCOUNT = 0;
LiquidCrystal_I2C lcd(0x27, 20, 4);
void setup() {
Serial.begin(115200);
pinMode (REED, INPUT_PULLUP);
lcd.init();
lcd.backlight();
lcd.setCursor(1, 0);
lcd.print("Bem vindo Eng. Soft");
lcd.setCursor(3, 1);
lcd.print("Uni Vassouras");
}
void loop() {
ler_pluviometro();
}
void ler_pluviometro()
{
// ler o estado do switch pelo pino de entrada e jogar na variavel val
val = digitalRead(REED);
// Aguarda 10 milisegundos para a próxima leitura
// (é melhor colocar o delay após a leitura para evitar ruídos ou leituras falsas)
delay(10);
// Verifica se mudou de estado de HIGH para LOW
bool estado_mudou = (val == LOW) && (old_val == HIGH);
// Se houve mudança de estado, incrementa o contador
if (estado_mudou)
{
REEDCOUNT++; // Incrementador de pulsos
// Atualiza o valor antigo
old_val = val;
float chuva_mm = REEDCOUNT * 0.25;
Serial.print("Medida de chuva (calculado): ");
Serial.print(chuva_mm);
Serial.println(" mm");
// Atualiza o display LCD com a mensagem "Choveu [valor] mm"
lcd.setCursor(3, 3);
lcd.print("Choveu ");
lcd.print(chuva_mm);
lcd.print(" mm");
}
else
{
// Se o estado não mudou, apenas atualiza o valor antigo
old_val = val;
}
}