Código:
#include <LiquidCrystal.h> // Incluye la Libreria LiquidCrystal
LiquidCrystal lcd(1, 2, 4, 5, 6, 7); // Crea un Objeto LC. Parametros: (rs, enable, d4, d5, d6, d7)
float sensibilidad=0.100;//valor dado por el fabricante 5A=0.185, 20A=100, 30A=66
//variables universales
float v;
float ruido=0.040;
int selector=8,i;
//variables para directa
float salida, intensidad;
int rango=500;
//variables para alterna
float reposo=2.5;
float pico=0;
float redelectrica = 120;
void setup(){
pinMode(selector,INPUT);//swithc de seleccion
lcd.begin(16,2); // Inicializa la interface para el LCD screen, and determina sus dimensiones (ancho y alto) del display
lcd.print(" INICIO");
delay(1000);
}
void loop(){
if(digitalRead(selector)==true){
directa();
}
else if(digitalRead(selector)==false){
voltaje();
alterna();
}
//****SECCION PARA IMPRIMIR VALORES****
}
void voltaje(){
v = analogRead(A0)*(5.0/1023.0);//calculo de Voltaje con señal analoga 1023 con referencia a 5v
}
void directa(){
for(i=0;i<=rango;i++){
voltaje();
intensidad=intensidad+(v-2.5)/sensibilidad;//v-2.5/sensibilidad =i(amps)
}
intensidad=intensidad/rango;//se calcula un promedio a las mediciones en rangos de 25
salida=intensidad;
if(salida<=ruido)salida=0;
lcd.clear(); // Limpia la pantalla
lcd.print(" Directa");
lcd.setCursor(0,1);
lcd.print(salida,3);
delay(250);
}
void alterna(){
long tiempo=millis();
float maxima;
float minima;
while(millis()-tiempo<500){
voltaje();
intensidad=0.9*intensidad+0.1*((v-reposo)/sensibilidad);
if(intensidad>maxima)maxima=intensidad;
if(intensidad<minima)minima=intensidad;
salida=((maxima-minima)/2);
if(salida<=ruido)salida=0;
}
lcd.clear(); // Limpia la pantalla
lcd.print(" Alterna");
lcd.setCursor(0,1);
lcd.print(salida,3);
delay(300);
}
Diagrama de sensor y switch pulldown
El diagrama del lcd véanlo en el blog del display anexado en el vídeo
https://www.youtube.com/watch?v=R-CRIthB7ZY