#include <LiquidCrystal_I2C.h>
byte xSizeLed = 16;
byte ySizeLed = 2;
LiquidCrystal_I2C lcd(0x27, xSizeLed, ySizeLed); // set the LCD address to 0x27 for a 16 chars and 2 line display
byte xMap = 9;
byte yMap = 5;
int arMap[5][9] = {
{0,0,0,0,0,0,0,0,0},
{0,1,1,1,1,1,1,1,0},
{0,1,0,0,0,0,0,1,0},
{0,1,1,1,1,1,1,1,0},
{0,0,0,0,0,0,0,0,0},
};
int arLook[3];
byte x = 1;
byte y = 1;
bool up = true;
bool down = false;
bool left = false;
bool right = false;
void drawMap(){
if(up){
arLook[0] = arMap[y][x-1];
arLook[1] = arMap[y-1][x];
arLook[2] = arMap[y][x+1];
}else if(down){
arLook[0] = arMap[y][x-1];
arLook[1] = arMap[y+1][x];
arLook[2] = arMap[y][x+1];
}else if(left){
arLook[0] = arMap[y-1][x];
arLook[1] = arMap[y][x-1];
arLook[2] = arMap[y+1][x];
}else if(right){
arLook[0] = arMap[y-1][x];
arLook[1] = arMap[y][x+1];
arLook[2] = arMap[y+1][x];
}
lcd.setCursor(0,0);
lcd.print(arMap[0][0]);
lcd.setCursor(1,0);
lcd.print(arMap[1][2]);
lcd.setCursor(2,0);
lcd.print(arMap[2][3]);
lcd.setCursor(5,0);
lcd.print(arLook[0]);
lcd.setCursor(7,0);
lcd.print(arLook[1]);
lcd.setCursor(9,0);
lcd.print(arLook[2]);
}
void setup()
{
pinMode(2, INPUT_PULLUP);
pinMode(3, INPUT_PULLUP);
pinMode(4, INPUT_PULLUP);
pinMode(5, INPUT_PULLUP);
lcd.begin(xSizeLed, ySizeLed);
drawMap();
}
void loop()
{
bool btnUp = digitalRead(4);
bool btnLeft = digitalRead(2);
bool btnRight = digitalRead(3);
if(!btnUp){
if(up){
if(x<xMap)
x++;
}else if(left){
if(y>0)
y--;
}else if(right){
if(y<yMap)
y++;
}else if(down){
if(x>0)
x--;
}
drawMap();
lcd.setCursor(0,0);
lcd.print(x);
lcd.setCursor(2,0);
lcd.print(y);
}
if(!btnLeft){
if(up){
up = !up;
left = !left;
}else if(left){
left = !left;
down = !down;
}else if(down){
down = !down;
right = !right;
}else if(right){
right = !right;
up = !up;
}
drawMap();
}
if(!btnRight){
if(up){
up = !up;
right = !right;
}else if(right){
right = !right;
down = !down;
}else if(down){
down = !down;
left = !left;
}else if(left){
left = !left;
up = !up;
}
drawMap();
}
delay(200);
}