Ir al contenido principal

CONTROL CON ARDUINO. LECCION II. ENCODER


Práctica previa a la creación de menú utilizando LCD.

Material:

Arduino UNO
LCD con interfaz I2C
Encoder rotativo

Objetivo. Aprenderás a utilizar el movimiento rotativo de un encoder y utilizarlo en el desplazamiento de un menú, diseñado para un LCD.



Algoritmo:

#include <Timer.h>  
#include <LiquidCrystal_I2C.h>

Timer t;

//Definición de pines de entrada
#define encoder0PinA  2
#define encoder0PinB  3
#define encoder0Pulse 4

//Variables utilizadas tanto en la interrupción como en el void loop
volatile unsigned int encoder0Pos = 0;
volatile char indicadorDegiro;
volatile boolean flagLCD=0;  //Bandera para refrescar LCD dentro del void loop

//Bandera indicadora de pulsador presionado
boolean flagPulse=0;

LiquidCrystal_I2C lcd(0x27, 16, 2);  // Set the LCD I2C address

void setup() { 

   lcd.begin(); 
   Serial.begin (9600);
   
  pinMode(encoder0PinA, INPUT_PULLUP); 
  pinMode(encoder0PinB, INPUT_PULLUP); 
  pinMode(encoder0Pulse,INPUT_PULLUP); 

  attachInterrupt(0, doEncoder, CHANGE);  // Habilita interrupción en pin 2, por cambio de nivel
   



void loop(){

  t.update();

  if (flagLCD==1){
    flagLCD=0;
    lcd.clear();
    lcd.print(encoder0Pos);
    lcd.setCursor(0,1);
    lcd.print(indicadorDegiro);
  }


  if (digitalRead(encoder0Pulse)==0 && flagPulse==0){ //Si pulso botón y flag=0 entonces
      t.after(150,verificaPulso); //Llama a rutina verificaPulso despues de 150 ms, para evitar rebote
      flagPulse=1;
       }
}
void doEncoder() {
    static boolean PosCursor=0;
     if (digitalRead(encoder0PinA) == digitalRead(encoder0PinB)) {
    encoder0Pos++;
   indicadorDegiro='<';

  } else {
    encoder0Pos--;
    indicadorDegiro='>';
     }


    flagLCD=1;
}

void verificaPulso(){
 static boolean conmutador=0; //Variable para conmutar brillo del LCD
   if (digitalRead(encoder0Pulse)==0){
      if (conmutador==0){
         lcd.noBacklight();
         conmutador=1;
                           }
     else{
            lcd.backlight();
            conmutador=0;
                 
             }
       
           }

     flagPulse=0;
}



En el próximo video que está pendiente, analizaremos a fondo el anterior algoritmo .

Saludos.



Comentarios

Entradas más populares de este blog

CONTROL CON ARDUINO LECCION III. CREAR MENÚ

ALGORITMO PARA CREACIÓN DE MENÚ Hola a todos, en esta ocasión les traigo un algoritmo para crear un menú interactivo en el LCD, básicamente es la continuación de la lección II, ya que utilizamos el mismo material,  con la diferencia de que esta vez, ya se tiene un menú en forma. Material: 1 encoder 1 LCD con interfaz I2C 1 Placa arduino 1 10 cables dupont Conexiones: Encoder  -  Arduino GND ------- GND    + ---------- Vcc (5V) SW ---------  4 DT ---------- 3 CLK -------- 2 LCD  -  Arduino GND -------- GND   Vcc -------- Vcc (5V)  SDA -------  A4  SCL -------  A5 Circuito Algoritmo #include <Timer.h>   #include <LiquidCrystal_I2C.h> Timer t;  //Declaramos un timer, para dar base de tiempo //Definición de pines de entrada #define encoder0PinA  2 #define encoder0PinB  3 #define encoder0Pulse 4 //Variables utilizadas tanto ...

CONTROL CON ARDUINO. LECCIÓN I

¿Por dónde comienzo? La respuesta aburrida de siempre: Por el principio. Aquí NO encontrarás respuestas vagas. Encontrarás respuestas concretas y sencillas de entender, así de simple; comenzando desde el encendido de un led, hasta el diseño de un scheduler de tiempo real. ¿Es importante la teoría? Desde luego que sí, como en cualquier área, sin embargo aquí nos enfocaremos en una metodología 100% práctica, por lo que la parte teórica será materia de otro blog, que podrás consultar si es de tu interés. Nota. - Las siguientes lecciones están dirigidas a aquellos interesados que por lo menos ya saben armar un circuito serie en un protoboard, ya que el objetivo aquí es la enseñanza de los algoritmos, más que la electrónica. Video introductorio                                                        ALGORITMO 1 int led=3; void setu...