Documentos de Académico
Documentos de Profesional
Documentos de Cultura
#include <LiquidCrystal.h>
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
// Algunas definiciones por comodidad, para otorgar a cada tecla un número: 0(nada), 1(derecha),
// 2(arriba), 3(abajo), 4(izquierda) y 5(menú)
int lcd_key = 0;
int adc_key_in = 0;
#define btnRIGHT 1
#define btnUP 2
#define btnDOWN 3
#define btnLEFT 4
#define btnSELECT 5
#define btnNONE 0
// Para leer los botones, definimos una función con los rangos de valores que adquiere
// la entrada A0 de la red resistiva a la que están conectados los botones
int read_LCD_buttons()
{ adc_key_in = analogRead(0); // Leemos A0
// Mis botones dan: 0(derecha), 99(arriba), 254(abajo),408(izquierda),638(menú), 1023(nada)
// Y ahora los comparamos con un margen cómodo
if (adc_key_in > 900) return btnNONE; // Ningun boton pulsado
if (adc_key_in < 50) return btnRIGHT; // Botón derecho
if (adc_key_in < 200) return btnUP; // Botón arriba
if (adc_key_in < 350) return btnDOWN; // Botón abajo
if (adc_key_in < 500) return btnLEFT; // Botón izquierdo
if (adc_key_in < 850) return btnSELECT; // Botón Menú
// Mensaje en pantalla
void setup() { lcd.begin(16, 2); // Inicializar el LCD
lcd.setCursor(0,0);
lcd.print("Cotidiana Place"); // Imprime un título en la primera línea del display
}
void loop() {
// Gestiona los valores en la pantalla
lcd.setCursor(10,1); // Cursor a linea 2, posicion 9
lcd.print(adc_key_in); // Imprime valor de la entrada Analógica 0,
// donde está conectada la red resistiva de los botones
lcd.setCursor(10,1);
delay(250); // Es necesaria esta pausa para visualizar correctamente
// el valor de la variable adc_key_in
lcd.print(" "); // Limpiar el valor en el display de la variable
// anterior para que no se solapen los números
lcd.setCursor(15, 1); // Cursor a linea 1, posicion 14
lcd_key = read_LCD_buttons();
if( lcd_key == btnRIGHT)
lcd.print("DERECHA ");
else if ( lcd_key == btnLEFT )
lcd.print("IZQUIERDA");
else if ( lcd_key == btnUP)
lcd.print("ARRIBA ");
else if ( lcd_key == btnDOWN)
lcd.print("ABAJO ");
else if ( lcd_key == btnSELECT)
lcd.print("MENU: ");
else if ( lcd_key == btnNONE)
lcd.print("NADA ");
}
// Fin de programa
//MENUS EN PANTALLA LCD
// Librerias:
#include <LiquidCrystal.h>
// Constantes:
#define pinLedB 9 // Led Azul y Amarillo, ambos en un pin PWM.
#define pinLedY 10
#define aum 50 // El aumento de brillo por cada pulsacion.
// Variables globales:
int ledY_I = 0; // Nivel de iluminación de los LEDs.
int ledB_I = 0;
boolean ledY_E = false; // Nos indicaran si los leds estan encendidos o apagados.
boolean ledB_E = false;
byte arrowDown[8] = {B00000, B01110, B01110, B01110, B11111, B01110, B00100}; // Caracteres
personalizados para el LCD
byte cursorLCD[8] = {B00000, B00000, B00110, B01111, B01111, B00110, B00000};
byte ledOn[8] = {B00000, B01110, B10001, B10001, B01010, B01110, B01110};
byte white[8] = {B11111, B11111, B11111, B11111, B11111, B11111, B11111};
void setup()
{
// Pantalla de 20 caracteres y 4 líneas:
lcd.begin(16,2);
pinMode(pinLedY, OUTPUT); // Se configuran los pines de los LEDs como salidas y se ponen a 0.
pinMode(pinLedB, OUTPUT);
analogWrite(pinLedY,ledY_I);
analogWrite(pinLedB,ledB_I);
}
void loop()
{
// Guarda el resultado leído de una pulsación por teclado:
char resultButton[7] = "null";
// MENU PRINCIPAL, DA OPCION PARA ABRIR EL MENU 1 Y MENU 2, TAMBIEN PARA SALIR A LA
PANTALLA PRINCIPAL
void LCDmenu()
{
char resultButton[7];
int posCursor=0, opcMenu=-2;
// Menu
lcd.clear();
lcd.setCursor(2, 0); lcd.print("Encender LED");
lcd.setCursor(2, 1); lcd.print("Cambiar brillo");
lcd.setCursor(2, 2); lcd.print("Salir");
else if(!strcmp(resultButton,"right"))
opcMenu = posCursor; // Al pulsar a la derecha (para acceder a esa opcion) se actualiza la opción de
menú elegida según donde esta el cursor ahora.
// Según la opción elegida del menú, se llama a otro menú o se cierra el menú actual:
switch( opcMenu )
{
case 0: // Se accede al menú de encendido y apagado de los leds.
LCDmenu0();
opcMenu = -2;
break;
case 1: // Se accede al menú de ajuste de brillo de los leds.
LCDmenu1();
opcMenu = -2;
break;
case 2: // Salir a la pantalla principal.
opcMenu = -1;
lcd.clear();
break;
};
}
while(opcMenu != -1);
}
// Menu
lcd.clear();
lcd.setCursor(2, 0); lcd.print("Led Amarillo");
lcd.setCursor(2, 1); lcd.print("Led Azul");
lcd.setCursor(2, 2); lcd.print("Salir");
// Según la opción elegida del menú, se le cambia el estado a un LED, al otro o se cierra el menú actual:
switch( opcMenu )
{
// LED Amarillo
case 0:
if(!strcmp(resultButton,"right")) // A la derecha se enciende.
{
if(ledY_I == 0) ledY_I = 20; // Si la Intensidad de iluminación es 0 se encenderá como mínimo a 20.
analogWrite(pinLedY,ledY_I);
ledY_E = true;
}
else if( !strcmp(resultButton,"left") ) // A la izquierda se apaga.
{
analogWrite(pinLedY,0);
ledY_E = false;
}
opcMenu = -2;
LCDBombillasLed( ledY_E, 0);
break;
// LED Azul
case 1:
if(!strcmp(resultButton,"right"))
{
if(ledB_I == 0) ledB_I = 20;
analogWrite(pinLedB,ledB_I);
ledB_E = true;
}
else if( !strcmp(resultButton,"left") )
{
analogWrite(pinLedB,0);
ledB_E = false;
}
opcMenu = -2;
LCDBombillasLed( ledB_E, 1);
break;
// Salir
case 2:
if(!strcmp(resultButton,"right"))
opcMenu = -1;
break;
};
}
while(opcMenu != -1);
// Menu
lcd.clear();
lcd.setCursor(2, 0); lcd.print("Led Amarillo");
lcd.setCursor(2, 1); lcd.print("Led Azul");
lcd.setCursor(2, 2); lcd.print("Salir");
LCDGraficaBrillo(ledY_I, 0);
LCDGraficaBrillo(ledB_I, 1);
// Según la opción elegida del menú, se le cambia el estado a un LED, al otro o se cierra el menú actual:
switch( opcMenu )
{
// LED Amarillo
case 0:
if(!strcmp(resultButton,"right")) // A la derecha se enciende.
if(ledY_I + aum < 250)
ledY_I += aum;
else
ledY_I = 250;
else if( !strcmp(resultButton,"left") ) // A la izquierda se apaga.
if(ledY_I - aum > 0)
ledY_I -= aum;
else
ledY_I = 0;
opcMenu = -2;
analogWrite(pinLedY,ledY_I);
LCDGraficaBrillo(ledY_I, 0);
break;
// LED Azul
case 1:
if(!strcmp(resultButton,"right"))
if(ledB_I + aum < 250)
ledB_I += aum;
else
ledB_I = 250;
else if( !strcmp(resultButton,"left") )
if(ledB_I - aum > 0)
ledB_I -= aum;
else
ledB_I = 0;
opcMenu = -2;
analogWrite(pinLedB,ledB_I);
LCDGraficaBrillo(ledB_I, 1);
break;
// Salir
case 2:
if(!strcmp(resultButton,"right"))
opcMenu = -1;
break;
};
}
while(opcMenu != -1);
if(ope == 's')
if(*pos < max) *pos += 1;
else *pos = 0;
else
if(*pos > 0) *pos -= 1;
else *pos = max;
// Se borran los cursores:
lcd.setCursor(0, 0); lcd.print(" ");
lcd.setCursor(0, 1); lcd.print(" ");
lcd.setCursor(0, 2); lcd.print(" ");
lcd.setCursor(0, 3); lcd.print(" ");
}
delay(pause);
}
}