Hola amigos, he estado tratando de realizar la programación en Arduino para controlar una pantalla LCD de 20x4 junto con un teclado numérico de 5x4. Lo que debo de realizar es algo así como un indicador de varias variables, primero que nada despliego un mensaje de bienvenida, después al presionar cualquier tecla se despliega un menú con tres opciones: Temperatura, Peso y Humedad, y añado junto a cada una de las variables un numero para hacer referencia de la tecla que deben de pulsar para acceder al monitoreo de cada variable, pero sucede que a la hora de probarlo con Proteus no hace lo que pensaba, en cambio creo que el problema que existe es que la mayor parte del tiempo no se pulsa ninguna tecla en el teclado, lo que hace que se cumplan muchas condiciones, no sé si exista alguna manera para controlar adecuadamente el teclado numérico.
De antemano muchas gracias por tomarse el tiempo para revisar esto.
...
De antemano muchas gracias por tomarse el tiempo para revisar esto.
Código:
#include <LiquidCrystal.h>
#include <Keypad.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int screenWidth = 20;
int screenHeight = 4;
// the two lines
// line1 = scrolling
String line1 =" Bienvenido ";
// line2 = static
String line2 =" Usuario ";
String line3= " ";
String line4="info@escuela.com ";
String line21=" Monitoreo de Datos ";
String line22="Temperatura = 1 ";
String line23="Masa = 2 ";
String line24="Humedad = 3 ";
String line31=" Temperatura ";
String line32="Temperatura 1=";
String line33="Temperatura 2=";
String line34="Temperatura 3=";
String line41=" Peso ";
String line42="Peso 1=";
String line43="Peso 2=";
String line44="Peso 3=";
String line51=" Humedad ";
String line52="Humedad 1=";
String line53="Humedad 2=";
String line54="Humedad 3=";
// just some reference flags
int stringStart,stringStop =0;
int scrollCursor = 20;
// keypad type definition
const byte ROWS = 5; //four rows
const byte COLS = 4; //three columns
int lin=0;
int count=0;
int pantalla=0;
int condicion=0;
int siguiente=0;
int atras=0;
char keys[ROWS][COLS] =
{ {\'F1\',\'F2\',\'F3\',\'F4\'},
{\'7\',\'8\',\'9\',\'A\'},
{\'4\',\'5\',\'6\',\'B\'},
{\'1\',\'2\',\'3\',\'C\'},
{\'*\',\'0\',\'#\',\'D\'}};
byte rowPins[ROWS] = {
A4,A5,A6,A7,A8}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {
A0,A1,A2,A3}; // connect to the column pinouts of the keypad
Keypad keypad = Keypad( makeKeymap(keys), rowPins, colPins, ROWS, COLS );
void setup()
{
lcd.begin(20, 4);
}
void loop()
{
char key = keypad.getKey();
if (key != NO_KEY)
{pantalla=1;}
if (pantalla==0)
{
lcd.setCursor(0, 0);
lcd.print(line1);
lcd.setCursor(0, 1);
lcd.print(line2);
lcd.setCursor(0, 2);
lcd.print(line3);
lcd.setCursor(scrollCursor, 3);
lcd.print(line4.substring(stringStart,stringStop));
if(stringStart == 0 && scrollCursor > 0){
scrollCursor--;
stringStop++;
} else if (stringStart == stringStop){
stringStart = stringStop = 0;
scrollCursor = screenWidth;
} else if (stringStop == line4.length() && scrollCursor == 0) {
stringStart++;
}
else {
stringStart++;
stringStop++;
}}
if (pantalla==1 && key != NO_KEY ) {
if(condicion==0) {
condicion=1;
lcd.clear();
}
stringStart,stringStop=0;
lcd.setCursor(0,0);
lcd.print(line21);
lcd.setCursor(0,1);
lcd.print(line22);
lcd.setCursor(0,2);
lcd.print(line23);
lcd.setCursor(0,3);
lcd.print(line24);
if (key==\'1\')//reemplazar con F1 y F2
{
pantalla=2; //para temperatura
}
if (key==\'2\')//reemplazar con F1 y F2
{
pantalla=3;
}
if (key==\'3\')//reemplazar con F1 y F2
{
pantalla=4;
}
if (pantalla==2) //despliega pantalla temperatura
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(line31);
lcd.setCursor(0,1);
lcd.print(line32);
lcd.setCursor(0,2);
lcd.print(line33);
lcd.setCursor(0,3);
lcd.print(line34);
if (key==\'F2\')
{
pantalla=3;
delay(300);
}
if (key==\'F3\')
{
pantalla=4;
delay(300);
}
}
if (pantalla==3) //despliega pantalla peso
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(line41);
lcd.setCursor(0,1);
lcd.print(line42);
lcd.setCursor(0,2);
lcd.print(line43);
lcd.setCursor(0,3);
lcd.print(line44);
if (key==\'F2\')
{
pantalla=4;
delay(300);
}
if (key==\'F3\')
{
pantalla=2;
delay(300);
}
}
if (pantalla==4) //despliega pantalla humedad
{
lcd.clear();
lcd.setCursor(0,0);
lcd.print(line51);
lcd.setCursor(0,1);
lcd.print(line52);
lcd.setCursor(0,2);
lcd.print(line53);
lcd.setCursor(0,3);
lcd.print(line54);
if (key==\'F2\')
{
pantalla=2;
delay(300);
}
if (key==\'F3\')
{
pantalla=3;
delay(300);
}
}
if (key==\'F1\')
{
lcd.setCursor(0,0);
lcd.print(line21);
lcd.setCursor(0,1);
lcd.print(line22);
lcd.setCursor(0,2);
lcd.print(line23);
lcd.setCursor(0,3);
lcd.print(line24);
}
}
}