Skip to content

Instantly share code, notes, and snippets.

@mcattani
Created November 30, 2020 20:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mcattani/31250d6f0daf509c0b3b7da4535b0708 to your computer and use it in GitHub Desktop.
Save mcattani/31250d6f0daf509c0b3b7da4535b0708 to your computer and use it in GitHub Desktop.
Menú Opciones 3 LEDS - Arduino
/*
* Este es un sketch de prueba que hice para mi blog: https://thenerdyapprentice.blogspot.com/
* Se trata de un pequeño menú para prender o apagar tres LEDS de colores (rojo, verde y azul)
* de una manera sencilla.
* Hay tres LEDS conectadoa a los pnes 5,6 y 7 con sus correspondientes resistencias (220Ω)
* Dos botones push conectados a los pines 2 y 3 con sus respectivas resistencias (10KΩ)
* Y un display LCD con interfaz I2C conectado en A5(SCL) y A4(SDA).
* Si te sirve este sketch por favor dejá un comentario en el blog!, será agradecido.
*/
// Incluimos las librerías necesarias para el LCD
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int PUSHB = 2;
const int PUSHA = 3;
const int LEDV = 5;
const int LEDR = 6;
const int LEDA = 7;
boolean estLED = false ;
int posCur = 0;
//Seteamos la dirección del LCD -> En mi caso 0x27
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
void setup() {
pinMode(PUSHB, INPUT_PULLUP);
pinMode(PUSHA, INPUT_PULLUP);
pinMode(LEDR, OUTPUT);
pinMode(LEDV, OUTPUT);
pinMode(LEDA, OUTPUT);
// Inicicializamos todos los leds apagados.
digitalWrite(LEDR, LOW);
digitalWrite(LEDV, LOW);
digitalWrite(LEDA, LOW);
// Inicializamos el LCD para 16 columnas y dos filas y encendemos la luz de fondo
lcd.begin(16,2);
lcd.backlight();
// Esribimos la primera linea del LCD que no varía y la primera posición del menú en la segunda
lcd.setCursor(0,0);
lcd.print("Control - Leds");
Serial.begin(9600); // Iniciamos el puerto serial
}
// Menu completo <R <V <A
void loop() {
// Contador para ubicar la posición del cursor <
if(digitalRead(PUSHA)==HIGH){
posCur = posCur + 1;
if(posCur>2) {
posCur=0;
}
// Con esto imprimimos la posición del cursor en el monitor serial.
Serial.print("Posición del Cursor: ");
Serial.println(posCur);
}
while(digitalRead(PUSHA)==HIGH); // Asi evitamos rebotes, el LOOP se frena aca hasta que soltemos el push
// Según la posición del cursor llamamos a las diferentes funciones para imprimir la salida en el LCD del cursor >
switch(posCur) {
case 0:
selR();
break;
case 1:
selV();
break;
case 2:
selA();
break;
}
// Si se presiona el segundo botón (PUSHB) encendemos o apagamos el LED segun la posición del cursor (posCur)
if(digitalRead(PUSHB)==HIGH){
switch(posCur) {
case 0:
estLED = digitalRead(LEDR);
digitalWrite(LEDR, !estLED);
Serial.print("Estado del LED ROJO: ");
Serial.println(!estLED);
break;
case 1:
estLED = digitalRead(LEDV);
digitalWrite(LEDV, !estLED);
Serial.print("Estado del LED VERDE: ");
Serial.println(!estLED);
break;
case 2:
estLED = digitalRead(LEDA);
digitalWrite(LEDA, !estLED);
Serial.print("Estado del LED AZUL: ");
Serial.println(!estLED);
break;
}
}
while(digitalRead(PUSHB)==HIGH); // Misma función que antes para evitar rebotes
}
// Estas funciones imprimen las distintas selecciones del cursor < en el LCD
void selR(){
lcd.setCursor(0,1);
lcd.print(">");
lcd.print("R V A");
}
void selV(){
lcd.setCursor(0,1);
lcd.print(" R ");
lcd.print(">");
lcd.print("V A");
}
void selA(){
lcd.setCursor(0,1);
lcd.print(" R V ");
lcd.print(">");
lcd.print("A");
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment