Olá Amigos.
Sou iniciante no Arduíno, estou encontrando dificuldade em saber qual melhor caminho para a se fazer logica, no qual seria:
1º Ler a corrente, de carga – Concluído
2º Se este valor estiver de acordo com a logica do( if) mandar um comando que neste caso é acender um led caso não . – Concluído
3º São feita três leituras de corrente diferente, e cada processo deve passar pela 1º ,2º e 3, leitura. A leitura só seguira a seguinte se estiver de acordo, caso não se deve interromper o processo, esse processo só voltará ao loop normal somente qando se ddar o reset. – Não Concluído
Segue abaixo o código ja feito.
#include <Wire.h>
#include <LiquidCrystal.h>
LiquidCrystal lcd(02,03,04,05,06,07);
// Criando um LCD de 16×2 no endereço 0x20
#include “EmonLib.h” //INCLUSÃO DE BIBLIOTECA
#define CURRENT_CAL 18.40 //VALOR DE CALIBRAÇÃO (DEVE SER AJUSTADO EM PARALELO COM UM MULTÍMETRO MEDINDO A CORRENTE DA CARGA)
volatile int numInterrupt = 0;
const int pinoSensor = A1; //PINO ANALÓGICO EM QUE O SENSOR ESTÁ CONECTADO
float ruido = 0.14; //RUÍDO PRODUZIDO NA SAÍDA DO SENSOR (DEVE SER AJUSTADO COM A CARGA DESLIGADA APÓS CARREGAMENTO DO CÓDIGO NO ARDUINO)
float vermelho = 10;
float amarelo = 11;
float verde = 12;
EnergyMonitor emon1; //CRIA UMA INSTÂNCIA
void setup(){
//DECLARANDO O COMANDO
pinMode(vermelho,OUTPUT);
pinMode(amarelo,OUTPUT);
pinMode(verde,OUTPUT);
pinMode(A1,INPUT);
//LED
Serial.begin(9600); //INICIALIZA A SERIAL
lcd.clear();
lcd.begin(16,2);
lcd.clear();
delay(3000);
emon1.current(pinoSensor, CURRENT_CAL); //PASSA PARA A FUNÇÃO OS PARÂMETROS (PINO ANALÓGIO / VALOR DE CALIBRAÇÃO)
}
void loop(){
//Primeiro laço
corrente:
emon1.calcVI(20,100); //FUNÇÃO DE CÁLCULO (20 SEMICICLOS / TEMPO LIMITE PARA FAZER A MEDIÇÃO)
double currentDraw = emon1.Irms; //VARIÁVEL RECEBE O VALOR DE CORRENTE RMS OBTIDO
//1º Passo.
delay(1000);
if (currentDraw <= 2.4) {
digitalWrite(vermelho, HIGH);
} else {
digitalWrite(vermelho, LOW);
}
//2º Passo.
passo2:
delay(200);
if (currentDraw == constrain(currentDraw, 2.42, 2.55)) {
digitalWrite(amarelo, HIGH);
} else {
digitalWrite(amarelo, LOW);
}
//3º Passo.
passo3:
delay(200);
if (currentDraw >= 2.61) {
digitalWrite(verde, HIGH);
} else {
digitalWrite(verde, LOW);
}
lcd.setCursor(4,0);
lcd.print(“ACTION!”);;
lcd.setCursor(0,1);
lcd.print(“Corrente: “);
lcd.print(currentDraw);
lcd.print(” A “);
Serial.print(“Corrente: “);
Serial.print(currentDraw );
Serial.println(” A “); //IMPRIME O TEXTO NA SERIAL
}