Instantly share code, notes, and snippets.
Created
November 30, 2020 20:28
-
Save mcattani/31250d6f0daf509c0b3b7da4535b0708 to your computer and use it in GitHub Desktop.
Menú Opciones 3 LEDS - Arduino
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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