#include <LiquidCrystal_I2C.h>
#define I2C_ADDRESS 0x27
#define LCD_COLUMNS 16
#define LCD_ROWS 2
#define VERTICAL_PIN 26
#define HORIZONTAL_PIN 27
#define SELECT_PIN 14
#define MIN_ANALOG_READ 0
#define MAX_ANALOG_READ 4095
#define MIN_DIRECTION -100
#define MAX_DIRECTION 100
LiquidCrystal_I2C lcd(I2C_ADDRESS, LCD_COLUMNS, LCD_ROWS);
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
pinMode(VERTICAL_PIN, INPUT);
pinMode(HORIZONTAL_PIN, INPUT);
}
void loop() {
int verticalDirection = map(analogRead(VERTICAL_PIN), MIN_ANALOG_READ, MAX_ANALOG_READ, MIN_DIRECTION, MAX_DIRECTION);
int horizontalDirection = map(analogRead(HORIZONTAL_PIN), MIN_ANALOG_READ, MAX_ANALOG_READ, MIN_DIRECTION, MAX_DIRECTION);
lcd.setCursor(0, 0);
lcd.print("MOVEMENT :");
String direction;
if (verticalDirection == MAX_DIRECTION) {
if (horizontalDirection == MAX_DIRECTION) {
direction = "TOP-LEFT";
} else if (horizontalDirection == MIN_DIRECTION) {
direction = "TOP-RIGHT";
} else {
direction = "TOP";
}
} else if (verticalDirection == MIN_DIRECTION) {
if (horizontalDirection == MAX_DIRECTION) {
direction = "BOTTOM-LEFT";
} else if (horizontalDirection == MIN_DIRECTION) {
direction = "BOTTOM-RIGHT";
} else {
direction = "BOTTOM";
}
} else {
if (horizontalDirection == MAX_DIRECTION) {
direction = "LEFT";
} else if (horizontalDirection == MIN_DIRECTION) {
direction = "RIGHT";
} else {
direction = "CENTER";
}
}
lcd.setCursor(0, 1);
lcd.print(direction + " ");
Serial.println(direction);
Serial.println(String(horizontalDirection) + " " + String(verticalDirection));
delay(10); // this speeds up the simulation
}