CONTENIDO ►
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

| 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:
- 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»
- 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

| 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:
- 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;
- 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