#include <LiquidCrystal.h> // Подключаем стандартную библиотеку LiquidCrystal
// Инициализируем объект-экран, передаём использованные
// для подключения контакты на Arduino в порядке:
// RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
const int joyPinX = A2; //Подключение оси Х на джойстике
const int joyPinY = A1; //Подключение оси У на джойстике
const int button = 2; //Подключение кнопки джойстика
int joyButtonState = 0; //Сохраняем значение кнопки
int x, y; //Переменные для преобразованных значений
// Объявление переменных для управления курсором и символами
int cursorX = 0;
int cursorY = 0;
char currentChar = '!';
String text;
void setup()
{
Serial.begin(9600);
pinMode(button, INPUT_PULLUP);
// устанавливаем размер (количество столбцов и строк) экрана
lcd.begin(16, 2);
}
void loop()
{
x = analogRead(joyPinX);
y = analogRead(joyPinY);
joyButtonState = digitalRead(button);
x = map(x, 0, 1023, 0, 15); // преобразуем значение X
y = map(y, 0, 1023, 0, 26); // преобразуем значение Y
// Обновление курсора и символов в зависимости от положения джойстика
if (x < 7) {
cursorX = min(cursorX + 1, 15);
// Serial.print("X = ");
// Serial.println(x);
} else if (x > 7) {
// Serial.print("X = ");
// Serial.println(x);
cursorX = max(cursorX - 1, 0);
}
if (y < 13) {
currentChar = min(currentChar + 1, 'z');
// currentChar = max(currentChar - 1, 'A');
if (static_cast<int>(currentChar) == 122)
{
currentChar = '!';
}
Serial.print("Min ");
Serial.println(static_cast<int>(currentChar));
// Serial.print("currentChar = ");
// Serial.println(currentChar);
} else if (y > 13) {
char h = currentChar - 1;
if (static_cast<int>(h) < 33)
{
currentChar = 'z';
} else {currentChar = max(h, '!');}
// currentChar = min(currentChar + 1, 'Z');
Serial.print("Max ");
Serial.println(static_cast<int>(currentChar));
// Serial.println(y);
// Serial.print("currentChar = ");
// Serial.println(currentChar);
}
if (joyButtonState == LOW) {
text = text + currentChar;
// Serial.print("cursorY = ");
// Serial.println(cursorY);
}
// Обновление жидкокристаллического индикатора
lcd.clear();
lcd.setCursor(cursorX, 0);
lcd.print (currentChar);
lcd.setCursor(cursorX, 1);
lcd.print(text);
delay(100);
}