#include <Wire.h>
#include <LiquidCrystal_I2C.h>
const int PINO_X = 35;
const int PINO_Y = 34;
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Guarda a ultima direção lida
String ultimaDirecao = "";
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Direcao: ");
}
void loop() {
// Ler os valores analogicos no eixo X e Y(Faixa de 0 a 4095)
int valorX = analogRead(PINO_X);
int valorY = analogRead(PINO_Y);
String direcaoAtual;
const int zonaMorta = 500;
const int centro = 2048;
if(valorY < centro - zonaMorta){
direcaoAtual = "Baixo";
}else if(valorY > centro + zonaMorta){
direcaoAtual = "Cima";
}else if(valorX < centro - zonaMorta){
direcaoAtual = "Esquerda";
}else if(valorX > centro + zonaMorta){
direcaoAtual = "Direita";
}else{
direcaoAtual = "Centro";
}
if(direcaoAtual != ultimaDirecao){
// limpar a segunda linha
lcd.setCursor(0, 1);
lcd.print(" ");
lcd.setCursor(0, 1);
lcd.print(direcaoAtual);
// Atualiza a variável de controle
ultimaDirecao = direcaoAtual;
// Mostra os valores no monitor Serial
Serial.print("X: ");
Serial.print(valorX);
Serial.print("| Y: ");
Serial.print(valorY);
Serial.print("Direção: ");
Serial.println(direcaoAtual);
}
}