Introducción de texto mediante un codificador Arduino

Este mini proyecto de Arduino permite crear texto (variable String) con el módulo codificador y almacenarlo en la RAM del microcontrolador. Puedes utilizar el código en tus propios programas, por ejemplo al escribir información en la EEPROM (Electrically Erasable Programmable Read-Only Memory) o al crear un archivo en una tarjeta SD. Para este miniproyecto bastará con conectar el encoder a la placa sin utilizar el display 16×2 i2c.

Para esta actividad necesitaremos:

  • Arduino Uno / Arduino Nano / Arduino Mega
  • codificador rotativo (ky-040);
  • la pantalla LCD 16×2 I2C;
  • cables de conexion;
  • libreria RotaryEncoder.h

Introducción de texto con un codificador rotativo

Conectar un codificador a un Arduino Uno
Diagrama de cableado para conectar un codificador a un Arduino
Encoder Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
+ 5V 5V 5V
SW 6 6 6
DT 4 4 4
CLC 2 2 2

Para el primer programa de ejemplo, conecte el codificador rotativo (ky-040) al Arduino según el diagrama anterior e instale la biblioteca RotaryEncoder.h. La biblioteca puede descargarse de nuestro sitio web sp.arduino-france.site. Toda la información se mostrará en el monitor del puerto de Arduino IDE. Y la cadena final se almacenará en la variable String stroka. La mayoría de los ajustes del programa pueden modificarse a voluntad.

Programa Arduino para introducción de texto

#include "RotaryEncoder.h"
RotaryEncoder encoder(4, 2);  // (DT, CLK)
#define SW 6                              // SW

byte scale = 5;

char massiv[39] = {
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L', 'M',
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
  ' ', '-', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
};

String simvol;
String stroka;
byte w;
int pos;
int newPos;
boolean buttonWasUp = true;

void setup() {
   Serial.begin(9600);
   pinMode(SW, INPUT_PULLUP);

   simvol = massiv[pos];
   Serial.println(simvol);
}

void loop() {

   while (w < scale) {
     encoder.tick(); newPos = encoder.getPosition();

     if (newPos > 38) { encoder.setPosition(0); }
     if (newPos < 0) { encoder.setPosition(38); }

     if (pos != newPos && newPos <= 38 && newPos >= 0) {
        pos = newPos;
        simvol = massiv[pos];
        Serial.println(simvol);
     }

     boolean buttonIsUp = digitalRead(SW);
     if (buttonWasUp && !buttonIsUp) {
        delay(10);
        buttonIsUp = digitalRead(SW);
        if (!buttonIsUp) {
           w = w + 1;
           stroka = stroka + simvol;
           Serial.println(stroka);
           encoder.setPosition(0);
      }
    }
    buttonWasUp = buttonIsUp;
   }

   Serial.println(stroka);
   delay(1000);
}

Explicación del código para introducción de texto:

  1. la matriz char massiv contiene 39 caracteres, con una numeración que comienza en cero. Por ejemplo, la posición «0» del codificador corresponde al carácter «A»
  2. el bucle while se ejecuta 5 veces en el programa – esto se especifica en la variable byte scale, que es responsable de la longitud final de toda la cadena.

Creación variable String con un codificador rotativo

Conectar un codificador y una pantalla a un Arduino
Diagrama para conectar un codificador y una pantalla a un Arduino
LCD 1602 i2c Arduino Uno Arduino Nano Arduino Mega
GND GND GND GND
VCC 5V 5V 5V
SDA A4 A4 20
SCL A5 A5 21

Al siguiente programa de ejemplo se le ha añadido la función de utilizar la pantalla para la salida de caracteres y líneas. Si es necesario, el codificador puede ser conectado a otros puertos (incluyendo los pines analógicos del microcontrolador) haciendo las ediciones necesarias en el boceto. Conecta la pantalla 1602 y el codificador al Arduino Uno según el diagrama anterior y carga la segunda versión del programa en la placa Arduino.

Programa creación variable String con un codificador

#include "Wire.h"
#include "LiquidCrystal_I2C.h"
LiquidCrystal_I2C LCD(0x27,20,2);

#include "RotaryEncoder.h"
RotaryEncoder encoder(4, 2);  // DT, CLK
#define SW 6                              // SW

byte scale = 5;

char massiv[39] = {
  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G', 'K', 'L', 'M',
  'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
  ' ', '-', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9'
};

String simvol;
String stroka;
byte w;
int pos;
int newPos;
boolean buttonWasUp = true;

void setup() {
   LCD.init();
   LCD.backlight();
   pinMode(SW, INPUT_PULLUP);

   simvol = massiv[pos];
   LCD.setCursor(w, 0);
   LCD.print(simvol);
}

void loop() {

   while (w < scale) {
     encoder.tick(); newPos = encoder.getPosition();

     if (newPos > 38) { encoder.setPosition(0); }
     if (newPos < 0) { encoder.setPosition(38); }

     if (pos != newPos && newPos <= 38 && newPos >= 0) {
        pos = newPos;
        simvol = massiv[pos];
        LCD.setCursor(w, 0);
        LCD.print(simvol);
     }

     boolean buttonIsUp = digitalRead(SW);
     if (buttonWasUp && !buttonIsUp) {
        delay(10);
        buttonIsUp = digitalRead(SW);
        if (!buttonIsUp) {
           w = w + 1;
           stroka = stroka + simvol;
           encoder.setPosition(0);
           LCD.setCursor(w, 0);
           LCD.print(simvol);
      }
    }
    buttonWasUp = buttonIsUp;
    }

   LCD.clear();
   LCD.setCursor(0, 0);
   LCD.print("ITOG:");
   LCD.setCursor(0, 1);
   LCD.print(stroka);
   delay(1000);
}

Explicación del código creación String con un codificador:

  1. la variable w en este programa es responsable no sólo de la salida del bucle while, sino también de la posición del cursor en la línea de la pantalla 1602;
  2. cuando se pulsa el botón del codificador, la variable w se incrementa, el carácter se guarda en una cadena y la posición del codificador se pone a cero.

Conclusión. Este código puede ser implementado en tus proyectos en la placa Arduino cuando necesites crear una variable de textoo o hacer un control de termómetro en un módulo tm1637 con un sensor impermeable ds18b20. Si tienes alguna duda sobre este miniproyecto o añadidos, puedes dejarla en los comentarios de este post.


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *