#include <Wire.h>
#include <LiquidCrystal_I2C.h>
//https://www.automatismos-mdq.com.ar/blog/tools/LCD_ccg/lcd-ccg.html
LiquidCrystal_I2C lcd(0x27, 16, 2);//crear un objeto lcd (DIRECCIÓN pantalla, Tamaño x, Tamño y)
const int analog_pin=13;
int valor_pot=0;
const int ledRojo = 17;
const int ledAmarillo = 18;
const int ledVerde = 19;
byte ampere[] = { // Signo de ampere a base de codigo binario
B00000,
B10000,
B11000,
B10100,
B10110,
B11001,
B10000,
B10000
};
byte mili[] = { // Signo de Mili a base de codigo binario
B00000,
B00000,
B00000,
B10000,
B11111,
B10101,
B10101,
B10101
};
byte temp[] = { // Signo de temperatura a base de codigo binario
B01100,
B10010,
B10010,
B01100,
B11110,
B00000,
B00000,
B00000
};
byte grados[] = { // Signo de grados a base de codigo binario
B00110,
B01001,
B01001,
B00110,
B00000,
B00000,
B00000,
B00000
};
byte gato[] = { // Signo de "Gato" a base de codigo binario
B00000,
B01010,
B01010,
B11111,
B01010,
B11111,
B01010,
B01010
};
void setup() {
lcd.clear(); //Borra el contenido grabado anteriormente en pantalla, para mostrar la nueva info
lcd.init();//inicializar la pantalla lcd
lcd.begin(16,2);
lcd.backlight();//Encender la luz de fondo
lcd.createChar(0, grados); //almacena los caracteres personalizados en la primera ranura de memoria
lcd.createChar(1, gato); //con esto se puede llamar por su indice
lcd.createChar(2, temp);
lcd.createChar(3, mili);
lcd.createChar(4, ampere);
pinMode(ledRojo, OUTPUT); //definicion de variables
pinMode(ledAmarillo, OUTPUT);
pinMode(ledVerde, OUTPUT);
lcd.setCursor (0, 0);//poner el cursor en las coordenadas (x,y)
lcd.print("EVALUACION ");//muestra en la pantalla max 16 caracteres
lcd.write((uint8_t)1); //se llama el signo "gato" por el indice en vez del nombre
lcd.print("3");
lcd.setCursor (0, 1);//poner el cursor en las coordenadas (x,y)
lcd.print("CONTROL T");//muestra en la pantalla max 16 caracteres
lcd.write((uint8_t)2);//llama al signo de grados
delay(3000);
lcd.clear();
}
void loop() {
lcd.clear();
valor_pot=analogRead(analog_pin); //lee el valor analogico de la señal proveniente del potenciometro y se almacena en "valor_pot"
lcd.setCursor (0, 0);//poner el cursor en las coordenadas (x,y)
lcd.print("TEMP:");
float lectura_temp=temperatura(); //lectura de la variable temperatura ya escalada
lcd.print(lectura_temp);
lcd.write((uint8_t)0); //llama al caracter personalizado "grados"
lcd.print("C");
lcd.setCursor (0, 1);
lcd.print("Curr: ");
float lectura_curr=corriente(); //lectura de ka cirruebte ya escalada
lcd.print(lectura_curr);
lcd.write((uint8_t)3);
lcd.write((uint8_t)4);
if(lectura_temp<10){ //activacion de luces led en rangos determinados
digitalWrite(ledVerde, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledRojo, HIGH);
}else if (lectura_temp>10&&lectura_temp<50){
digitalWrite(ledVerde, LOW);
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, HIGH);
}else{
digitalWrite(ledRojo, LOW);
digitalWrite(ledAmarillo, LOW);
digitalWrite(ledVerde, HIGH);
}
delay(500);//Esperamos 500 mili segundo antes de repetir el loop
}
float temperatura(){ //escalamiento de Temperatura
//Temperatura de 10 a 150 ºC
//0.039072 · X - 10
float valor=0.039072 * valor_pot - 10;
return valor;
}
float corriente(){ //escalamiento de señal
//corriente de 4 a 20
//0.0039072 · X +4
float valor_curr=0.0039072 * valor_pot +4;
return valor_curr;
}