#include <LiquidCrystal.h> // Подключаем стандартную библиотеку LiquidCrystal
// Инициализируем объект-экран, передаём использованные
// для подключения контакты на Arduino в порядке:
// RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 10, 9, 8, 7);
const int sel = 3;
const int vert = A1;
const int horz = A2;
int center = 512;
char symbols[2][16] =
{
{'_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_'},
{'_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_', '_'}
};
bool LowerLine = false;
bool SymbolChanged = false;
int pos = 0;
void Move(){
static unsigned long timer;
if ((timer + 100) > millis()) return 0;
if(analogRead(horz) < center && pos < 16){
pos++;
}
else if(analogRead(horz) > center && pos > 0){
pos--;
}
timer = millis();
}
char SelectSymbol(char c){
static unsigned long timer;
char NewChar = c;
if ((timer + 100) > millis()) return 0;
if((analogRead(vert) > center || analogRead(vert) < center) && NewChar == '_'){
NewChar = 'A';
SymbolChanged = true;
return NewChar;
}
if(analogRead(vert) > center && NewChar > 'A'){
NewChar--;
}
else if(analogRead(vert) < center && NewChar < 'Z'){
NewChar++;
}
timer = millis();
if(NewChar != c){
SymbolChanged = true;
}
return NewChar;
}
void SetLine(){
static unsigned long timer;
if ((timer + 100) > millis()) return 0;
if(digitalRead(sel) == LOW){
LowerLine = !LowerLine;
}
timer = millis();
}
void setup()
{
Serial.begin(9600);
pinMode(sel, INPUT_PULLUP); // Click
pinMode(vert, INPUT); // Vertical
pinMode(horz, INPUT); // Horizontal
lcd.begin(16, 2);
lcd.blink();
for(int i = 0; i < 16; i++){
char symbol = symbols[0][i];
lcd.setCursor(i, 0);
lcd.write(symbol);
symbol = symbols[1][i];
lcd.setCursor(i, 1);
lcd.write(symbol);
}
}
void loop()
{
Move();
SetLine();
lcd.setCursor(pos, LowerLine);
char CurrenSymbol = symbols[LowerLine][pos];
char NewSymbol = SelectSymbol(CurrenSymbol);
if(SymbolChanged){
symbols[LowerLine][pos] = NewSymbol;
for(int i = 0; i < 16; i++){
char symbol = symbols[0][i];
lcd.setCursor(i, 0);
lcd.write(symbol);
symbol = symbols[1][i];
lcd.setCursor(i, 1);
lcd.write(symbol);
}
SymbolChanged = false;
}
}