Данный мини проект на Ардуино позволит вам создавать текст (переменную String) с помощью модуля энкодера и сохранять ее в оперативной памяти микроконтроллера. Код можно использовать в своих программах, например, при записи информации в EEPROM Arduino или создании файла на SD карте. Для этого мини проекта достаточно будет подключить к плате энкодер (KY-040), не используя дисплей 1602.
Ввод текста на Ардуино с помощью энкодера
Для этого занятия потребуется:
- плата Arduino Uno / Arduino Nano / Arduino Mega;
- цифровой энкодер (модуль KY-040);
- дисплей LCD 1602 (по желанию);
- провода «папа-мама».

| 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 |
Для первого примера программы следует подключить энкодер к Ардуино, согласно схеме размещенной выше, и установить библиотеку RotaryEncoder.h. Библиотеки можно скачать на нашем сайте здесь. Вся информация будет выводится на монитор порта Arduino IDE. А окончательный вариант строки String сохранится в переменную stroka. Большую часть настроек в программе можно менять по своему усмотрению.
Скетч. Ввод текста энкодером на Ардуино
#include "RotaryEncoder.h" // библиотека для энкодера RotaryEncoder encoder(4, 2); // пины подключение энкодера (DT, CLK) #define SW 6 // пин подключения порты SW энкодера byte scale = 5; // указываем сколько символов должно быть в строке // создаем массив из 39 символов - его можно увеличивать и уменьшать 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); // подключаем пин SW // выводим первый символ в массиве на монитор порта 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; } // если было введено 5 символов - выходим из цикла while Serial.println(stroka); delay(1000); }
Пояснения к коду:
- массив
char massivсодержит 39 символов, при этом нумерация начинается с нуля. Т.е. позиции ручки энкодера «0» соответствует символ «А»; - в программе цикл while выполняется 5 раз — это указывается в переменной
byte scale, которая отвечает за конечную длину всей строки.
Создание String с помощью энкодера

К следующему примеру программы добавлена функция использования дисплея для вывода символов и строки. При необходимости энкодер можно подключить к другим портам (в том числе и к аналоговым пинам микроконтроллера), сделав при этом необходимые правки в скетче. Подключите к Arduino Uno дисплей 1602 и энкодер по схеме, размещенной выше, и загрузите второй вариант скетча в плату.
Скетч. Создание переменной String энкодером
#include <Wire.h> // библиотека для протокола I2C #include <LiquidCrystal_I2C.h> // библиотека для LCD 1602 LiquidCrystal_I2C LCD(0x27,20,2); // присваиваем имя дисплею #include "RotaryEncoder.h" // библиотека для энкодера RotaryEncoder encoder(4, 2); // пины подключение энкодера (DT, CLK) #define SW 6 // пин подключения порты SW энкодера byte scale = 5; // указываем сколько символов должно быть в строке // создаем массив из 39 символов - его можно увеличивать и уменьшать 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); // подключаем пин SW // выводим первый символ в массиве на дисплей 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; } // если было введено 5 символов - выходим из цикла while LCD.clear(); LCD.setCursor(0, 0); LCD.print("ITOG:"); LCD.setCursor(0, 1); LCD.print(stroka); delay(1000); }
Пояснения к коду:
- переменная
wв данной программе отвечает не только за выход из цикла while, но и положение курсора в строке на дисплее 1602; - при нажатии на кнопку энкодера происходит увеличение переменной
w, сохранение символа в строку и обнуление позиции энкодера.
Заключение. Данный код можно внедрять в свои проекты при необходимости создания текстовой переменной. Если у вас возникли вопросы по данному мини-проекту или дополнения, то вы можете оставлять их в комментариях к этой записи.









здраствуйте а можно сделать так чтобы при написании пяти символов ничего не удалялось
Конечно можно