#include <Adafruit_GFX.h>
#include <Adafruit_ILI9341.h>
#include <SPI.h>
#define TFT_CS 10
#define TFT_RST 9
#define TFT_DC 8
#define UP_B 3
#define DOWN_B 4
#define LEFT_B 5
#define RIGHT_B 2
Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
int x = 100;
int y = 200;
bool isMoving = 0;
void MoveMan() {
if(y + 26 < 239 && digitalRead(UP_B)) {
y += 1;
isMoving = 1;
}
else if(!digitalRead(RIGHT_B)) {
x += 2;
isMoving = 1;
}
else if(!digitalRead(LEFT_B)) {
x -= 2;
isMoving = 1;
}
else if(!digitalRead(UP_B)) {
y -= 2;
isMoving = 1;
}
else if(!digitalRead(DOWN_B)) {
y += 2;
isMoving = 1;
}
else {
isMoving = 0;
}
}
void DrawMan(int x, int y, bool isMoving) {
tft.drawRect(x, y, 9, 9, ILI9341_WHITE); //head
tft.drawLine(x+4, y+8, x+4, y+20, ILI9341_WHITE); //body
tft.drawLine(x+4, y+10, x-2, y+16, ILI9341_WHITE); //left hand
tft.drawLine(x+4, y+10, x+10, y+16, ILI9341_WHITE); //right hand
tft.drawLine(x+4, y+19, x-2, y+25, ILI9341_WHITE); //left leg
tft.drawLine(x+4, y+19, x+10, y+25, ILI9341_WHITE); //right leg
if(isMoving)
tft.fillRect(x-4, y-2, 17, 30, ILI9341_BLACK);
}
void setup() {
Serial.begin(9600);
pinMode(UP_B, INPUT_PULLUP);
pinMode(DOWN_B, INPUT_PULLUP);
pinMode(LEFT_B, INPUT_PULLUP);
pinMode(RIGHT_B, INPUT_PULLUP);
pinMode(TFT_RST, OUTPUT);
digitalWrite(TFT_RST, HIGH);
tft.begin();
tft.fillScreen(ILI9341_BLACK);
tft.setTextSize(3);
tft.setRotation(1);
}
void loop() {
DrawMan(x, y, isMoving);
MoveMan();
//Serial.print(digitalRead(LEFT_B));
//Serial.print(digitalRead(DOWN_B));
//Serial.print(digitalRead(UP_B));
//Serial.println(digitalRead(RIGHT_B));
}