Hola, necesito porfa que me ayuden a poder separar las funciones VOID LOOP de la VOID TEMP_MIN y de la VOID TEMP_MAX.
Estoy usando un teclado matricial, pantalla LCD y sensor LM35, y la lectura del sensor la hago constantemente en el VOID LOOP cada 200ms. Con el teclado oprimiendo una tecla llamo a la funcion VOID TEMP_MAX y lo mismo pero con otra tecla a VOID TEMP_MIN para luego ingresar temperaturas en esas pantallas (cosa que no muestra el codigo a continuacion).
Hasta ahi todo bien, me aparecen las pantallas correspondientes al llamar a esas funciones, pero al continuar leyendose las temperaturas del sensor en el VOID LOOP estas se muestran en las pantallas del VOID TEMP_MAX y VOID TEMP_MIN y no quiero que haga eso. Deseo mas bien que se muestren las pantallas solas sin mostrarse la lectura del sensor de forma intrusa, jeje.
No se si hay que parar u ocultarse de alguna forma la lectura, cosa que ya intente pero sin resultados.
PD: No le den interes a las temperaturas fijas (25 Y 10) del VOID SETUP, ni a los ultimos reglones del VOID TEMP_MAX y VOID TEMP_MIN, puse eso de adorno y no cambian nada supongo.
Gracias.
#include <Keypad.h> //libreria para controlar el teclado matricial
#include <LiquidCrystal.h> //libreria para controlar el LCD
//Configuración del teclado matricial
const byte filas = 4; // numero de filas a usar
const byte columnas = 4; // numero de columnas a usar
byte pinsFilas[filas] = {22, 23, 24, 25}; // orden de conexion de filas: Fila 1, Fila 2, Fila 3 y Fila 4
byte pinsColumnas[columnas] = {26, 27, 28, 29}; // orden de conexion de columnas: Columna 1, Columna 2, Columna 3 y Columna 4
char teclas[filas][columnas] = { //matriz teclas para definir orden de caracteres tal cual en el teclado
{'7', '8', '9', 'A'},
{'4', '5', '6', 'B'},
{'1', '2', '3', ' '}, //los espacios vacios pertenecen a teclas sin funcion en el programa
{'0', ' ', ' ', ' '},
};
Keypad keypad = Keypad(makeKeymap(teclas), pinsFilas, pinsColumnas, filas, columnas); //ordenar las teclas para leerlas en ese orden
// Configuración para el LCD
//Pines del LCD-> RS E D4 D5 D6 D7
LiquidCrystal lcd(32, 33, 34, 35, 36, 37);
const int sensor = 0; // pin entrada analogica del sensor LM35
const int backlight = 38; // pin digital LED del LCD
const int ledAzul = 42; // pin digital LED azul
const int ledVerde = 43; // pin digital LED verde
const int ledRojo = 44; // pin digital LED rojo
const int buzzer = 45; // pin digital buzzer
const int transistor1 = 52; // pin digital transistor 1
const int transistor2 = 53; // pin digital transistor 2
char numero; //variable de tipo caracteres
float centigrados() //calcular como variable decimal "coma flotante"
{
int sensor; //de acuerdo a la variable del sensor
float celsius; //crear una variable resultado decimal
sensor = analogRead(A0); //leer el estado de la entrada analogica A0 donde esta el sensor
celsius = (500.0 * sensor) / 1023; //realizar el calculo
return (celsius); //devolver el resultado a la variable decimal "celsius"
}
void setup() {
pinMode(backlight, OUTPUT); //salida digital a transistor para backlight del LCD
pinMode(ledAzul, OUTPUT); //salida digital a led azul
pinMode(ledVerde, OUTPUT); //salida digital a led verde
pinMode(ledRojo, OUTPUT); //salida digital a led rojo
pinMode(buzzer, OUTPUT); //salida digital a buzzer
pinMode(transistor1, OUTPUT); //salida digital a transistor 1 del rele 1 y led azul
pinMode(transistor2, OUTPUT); //salida digital a transistor 2 del rele 2 y led rojo
digitalWrite(transistor1, LOW); //apagar transistor 1
digitalWrite(transistor2, LOW); //apagar transistor 2
delay(500); //pausa antes del encendido
digitalWrite(backlight, HIGH); //encender backlight
delay(500); //pausa antes de primera pantalla
digitalWrite(ledVerde, HIGH); //encender led verde
lcd.begin(20, 4); //inicio de uso de LCD de 20 columnas y 4 filas
lcd.setCursor(3, 1); //posicionar cursor en columna 3 y fila 1
lcd.print("BIENVENIDO/A A"); //escribir texto en LCD
lcd.setCursor(1, 2); //posicionar cursor en columna 1 y fila 2
lcd.print("TECMATEMP LCDMR 35"); //escribir texto en LCD
digitalWrite(buzzer, HIGH); //encender buzzer
delay(1000); //pausa de 1 seg encendido
digitalWrite(buzzer, LOW); //apagar buzzer
delay(4000); //esperar 9 seg en esa pantalla
lcd.clear(); //limpiar pantalla
delay(100); //pausa antes de siguiente pantalla
lcd.setCursor(0, 0); //posicionar cursor en columna 0 y fila 0
lcd.print("En funcionamiento..."); //escribir texto en LCD
lcd.setCursor(0, 1); //posicionar cursor en columna 0 y fila 1
lcd.print("Temp.Maxima 'C"); //escribir texto en LCD
lcd.setCursor(16, 1); //posicionar cursor en columna 16 y fila 1
lcd.print("25"); //mostrar valor maximo en LCD
lcd.setCursor(0, 3); //posicionar texto en columna 0 y fila 3
lcd.print("Temp.Minima 'C"); //escribir texto en LCD
lcd.setCursor(16, 3); //posicionar texto en columna 16 y fila 3
lcd.print("10"); //mostrar valor minimo en LCD
}
void temp_max()
{
digitalWrite(ledVerde, LOW); //apagar led verde
lcd.clear(); //limpiar pantalla del LCD
delay(100); //pausa para pasar a otra pantalla
lcd.setCursor(0, 0); //posicionar texto en columna 0 y fila 0
lcd.print("Ingrese Temp. Maxima"); //mostrar texto en LCD
lcd.setCursor(3, 1); //posicionar texto en columna 5 y fila 1
lcd.print("(-50' a 150'C)"); //mostrar texto en LCD
lcd.setCursor(6, 3); //posicionar texto en columna 8 y fila 3
lcd.print(" , 'C"); //mostrar texto en LCD
}
void temp_min()
{
digitalWrite(ledVerde, LOW); //apagar led verde
lcd.clear(); //limpiar la pantalla
delay(100); //pausa para pasar a otra pantalla
lcd.setCursor(0, 0); //posicionar cursor del LCD en columna 0 y fila 0
lcd.print("Ingrese Temp. Minima"); //mostrar texto en LCD
lcd.setCursor(3, 1); //posicionar cursor del LCD en columna 5 y fila 1
lcd.print("(-50' a 150'C)"); //mostrar texto en LCD
lcd.setCursor(6, 3); //posicionar cursor del LCD en columna 8 y fila 3
lcd.print(" , 'C"); //mostrar texto en LCD
}
void loop() {
float temperatura = centigrados(); //igualar variable temperatura a variable centigrados anterior
lcd.setCursor(0, 2); //posicionar texto en columna 0 y fila 2
lcd.print("Temp.Actual 'C"); //escribir texto en LCD
lcd.setCursor(13, 2); //posicionar texto en columna 13 y fila 2
lcd.print(temperatura); //mostrar resultado de temperatura mas arriba
delay(200); //pausa entre lecturas de temperaturas
char teclas = keypad.getKey(); //guarda en la variable "teclas" el valor pulsado del teclado
if (teclas != NO_KEY) { //Si se ha pulsado una tecla...
numero = teclas - 48; //conversión de caracteres ASCII a valores numericos
digitalWrite(buzzer, HIGH); //encender buzzer con cada tecla pulsada
delay(50); //pausa con buzzer encendido
digitalWrite(buzzer, LOW); //apagar buzzer
//PROCESO AL PULSAR BOTON A (INSERTAR VALOR MAX) (TECLA F6)
if (numero == 17) { //Si se pulsa la tecla A (valor ascii A es en valor numerico 17) entonces...
temp_max();
}
else {//PROCESO AL PULSAR BOTON B (INSERTAR VALOR MIN (TECLA F5)
if (numero == 18) { //Si se pulsa la tecla B entonces...
temp_min();
}
}
}
}