#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
int pose = 0;
char Com;
bool keyb = true;
bool menu = false;
bool ende = false;
bool anim= true;
int buzzer = 13;
int minu;
int secu;
//ключ
byte key[] = {B01110,B01010,B01110,B00100,B00100,B01100,B00100,B01100};
//картинка 0
byte dis11[] = {B10000,B11000,B11100,B11110,B11110,B11110,B11110,B11110};
byte dis12[] = {B00000,B00000,B00000,B00000,B00000,B11111,B11111,B11111};
byte dis13[] = {B00000,B00000,B00000,B00000,B00000,B10101,B01010,B10101};
byte dis21[] = {B11110,B11110,B11110,B11110,B11110,B11100,B11000,B10000};
byte dis22[] = {B11111,B11111,B11111,B00000,B00000,B00000,B00000,B00000};
byte dis23[] = {B10101,B01010,B10101,B00000,B00000,B00000,B00000,B00000};
//картинка 1
byte dis14[] = {B11111,B11111,B11111,B11111,B11111,B11111,B11111,B11111};
byte dis15[] = {B00000,B00000,B00000,B00000,B01010,B10101,B01010,B10101};
byte dis16[] = {B01010,B10101,B01010,B10101,B00000,B00000,B00000,B00000};
byte dis17[] = {B00001,B00011,B00111,B01111,B01111,B01111,B01111,B01111};
byte dis18[] = {B01111,B01111,B01111,B01111,B01111,B00111,B00011,B00001};
//мапа
byte ar1[] = {B00000,B00100,B00110,B11111,B11111,B00110,B00100,B00000};
byte ar2[] = {B00000,B00100,B01100,B11111,B11111,B01100,B00100,B00000};
byte map1[] = {B10011,B10000,B10000,B10000,B10011,B10011,B10011,B11111};
byte map2[] = {B11111,B10000,B10000,B10000,B10000,B10011,B10011,B10011};
byte map3[] = {B10000,B00000,B00000,B00000,B10000,B10000,B10000,B11111};
byte map4[] = {B11111,B00000,B00000,B00000,B00000,B10000,B10000,B10000};
byte map5[] = {B01111,B00001,B00001,B00001,B00001,B00001,B00001,B11111};
byte map6[] = {B11111,B00001,B00001,B00001,B00001,B01111,B01111,B01111};
byte door[] = {B00000,B11111,B11001,B11101,B11101,B11101,B11111,B01100};
//монета
byte coin1[] = {B01110,B11011,B11101,B11101,B11101,B11101,B11011,B01110};
byte coin2[] = {B00100,B01010,B01010,B01010,B01010,B01010,B01010,B00100};
byte coin3[] = {B00100,B00100,B00100,B00100,B00100,B00100,B00100,B00100};
void setup() {
Serial.begin(9600);
Serial.println("Input command move:");
lcd.begin(16, 2);
lcd.init();
lcd.backlight();
pinMode(buzzer, OUTPUT);
tone(buzzer, 880, 125); delay(125);
tone(buzzer, 1046, 125); delay(125);
}
void loop() {
while (Serial.available()) {
Com = Serial.read();
if (Com == 'm' || Com == 'M') {
menu = !menu;
lcd.clear();
if(menu){
tone(buzzer, 1046, 125); delay(125);
tone(buzzer, 880, 125); delay(125);
}
else{
tone(buzzer, 880, 125); delay(125);
tone(buzzer, 1046, 125); delay(125);
}
}
if (Com == 'w' || Com == 'W') {
if(!menu){
Serial.print(pose);
if(pose < 3){
pose += 1;
}
else if(pose == 4){
pose = 5;
}
else if(pose == 6){
pose = 7;
}
else if(pose == 7){
pose = 8;
}
else if(pose == 8){
if(!keyb){
Serial.println("Out...");
ende = true;
menu = !menu;
lcd.clear();
tone(buzzer, 880, 125); delay(125);
tone(buzzer, 1320, 125); delay(125);
tone(buzzer, 1760, 125); delay(125);
tone(buzzer, 880, 125); delay(50);
}
}
else if(pose == 9){
pose = 7;
}
}
} else if (Com == 's' || Com == 'S') {
if(!menu){
Serial.print(pose);
if(pose > 0 && pose <= 3){
pose -= 1;
}
else if( pose == 8){
pose = 7;
}
else if (pose == 7){
pose = 6;
}else if (pose == 6){
pose = 5;
}
else if(pose == 4){
pose = 3;
}else if (pose == 9){
pose = 1;
}
else if (pose == 10){
pose = 1;
}
else if (pose == 11){
pose = 0;
}
}
}
else if (Com == 'a' || Com == 'A') {
if(!menu){
Serial.print(pose);
if(pose == 1){
pose = 9;
}
else if(pose == 11){
pose = 0;
}
else if(pose == 10){
pose = 1;
}
else if(pose == 12){
pose = 3;
}
else if(pose == 3){
pose = 4;
}
else if(pose == 5){
pose = 6;
}
else if(pose == 7){
pose = 9;
}
}
}
else if (Com == 'd' || Com == 'D') {
if(!menu){
Serial.print(pose);
if(pose == 1){
pose = 10;
}
else if (pose == 0){
pose = 11;
}
else if(pose == 3){
pose = 12;
}
else if(pose == 4){
pose = 3;
}
else if(pose == 6){
pose = 5;
}
else if (pose == 9){
pose = 1;
}
}
}
delay(10);
}
if(!menu){
updatePose();
if(pose == 12 && keyb){
keyb = false;
tone(buzzer, 880, 125); delay(125);
tone(buzzer, 1320, 125); delay(125);
tone(buzzer, 1760, 125); delay(125);
}
if(!keyb){
lcd.createChar(7, key);
lcd.setCursor(15, 1);
lcd.write(7);
}
lcd.setCursor(8, 0);
lcd.print("ruh:wasd");
lcd.setCursor(8, 1);
lcd.print("klyuch:");
}else{
updateMenu();
}
}
void updatePose() {
if(pose == 0){
lcd.createChar(0, dis11);
lcd.createChar(1, dis12);
lcd.createChar(2, dis13);
lcd.createChar(3, dis21);
lcd.createChar(4, dis22);
lcd.createChar(5, dis23);
lcd.setCursor(0, 0);
lcd.write(0);
lcd.setCursor(1, 0);
lcd.write(1);
lcd.setCursor(2, 0);
lcd.write(2);
lcd.setCursor(3, 0);
lcd.write(1);
lcd.setCursor(4, 0);
lcd.write(1);
lcd.setCursor(0, 1);
lcd.write(3);
lcd.setCursor(1, 1);
lcd.write(4);
lcd.setCursor(2, 1);
lcd.write(5);
lcd.setCursor(3, 1);
lcd.write(4);
lcd.setCursor(4, 1);
lcd.write(4);
}
else if(pose == 1 || pose == 6 || pose == 8){
lcd.createChar(0, dis11);
lcd.createChar(1, dis21);
lcd.createChar(2, dis14);
lcd.createChar(3, dis15);
lcd.createChar(4, dis16);
lcd.createChar(5, dis17);
lcd.createChar(6, dis18);
lcd.setCursor(0, 0);
lcd.write(2);
lcd.setCursor(1, 0);
lcd.write(0);
lcd.setCursor(2, 0);
lcd.write(3);
lcd.setCursor(3, 0);
lcd.write(5);
lcd.setCursor(4, 0);
lcd.write(2);
lcd.setCursor(0, 1);
lcd.write(2);
lcd.setCursor(1, 1);
lcd.write(1);
lcd.setCursor(2, 1);
lcd.write(4);
lcd.setCursor(3, 1);
lcd.write(6);
lcd.setCursor(4, 1);
lcd.write(2);
}
else if (pose == 2 || pose == 4 || pose ==9 ){
lcd.createChar(0, dis11);
lcd.createChar(1, dis21);
lcd.createChar(2, dis12);
lcd.createChar(3, dis22);
lcd.createChar(4, dis17);
lcd.createChar(5, dis18);
lcd.setCursor(0, 0);
lcd.write(0);
lcd.setCursor(1, 0);
lcd.write(2);
lcd.setCursor(2, 0);
lcd.write(2);
lcd.setCursor(3, 0);
lcd.write(2);
lcd.setCursor(4, 0);
lcd.write(4);
lcd.setCursor(0, 1);
lcd.write(1);
lcd.setCursor(1, 1);
lcd.write(3);
lcd.setCursor(2, 1);
lcd.write(3);
lcd.setCursor(3, 1);
lcd.write(3);
lcd.setCursor(4, 1);
lcd.write(5);
}
else if (pose == 3 || pose == 10 || pose == 11 || pose == 12 || pose ==5){
lcd.createChar(0, dis14);
lcd.setCursor(0, 0);
lcd.write(0);
lcd.setCursor(1, 0);
lcd.write(0);
lcd.setCursor(2, 0);
lcd.write(0);
lcd.setCursor(3, 0);
lcd.write(0);
lcd.setCursor(4, 0);
lcd.write(0);
lcd.setCursor(0, 1);
lcd.write(0);
lcd.setCursor(1, 1);
lcd.write(0);
lcd.setCursor(2, 1);
lcd.write(0);
lcd.setCursor(3, 1);
lcd.write(0);
lcd.setCursor(4, 1);
lcd.write(0);
}
else if (pose == 7){
lcd.createChar(0, dis12);
lcd.createChar(1, dis22);
lcd.createChar(2, dis17);
lcd.createChar(3, dis18);
lcd.createChar(4, dis13);
lcd.createChar(5, dis23);
lcd.setCursor(0, 0);
lcd.write(0);
lcd.setCursor(1, 0);
lcd.write(0);
lcd.setCursor(2, 0);
lcd.write(4);
lcd.setCursor(3, 0);
lcd.write(0);
lcd.setCursor(4, 0);
lcd.write(2);
lcd.setCursor(0, 1);
lcd.write(1);
lcd.setCursor(1, 1);
lcd.write(1);
lcd.setCursor(2, 1);
lcd.write(5);
lcd.setCursor(3, 1);
lcd.write(1);
lcd.setCursor(4, 1);
lcd.write(3);
}
}
void updateMenu(){
if(ende){
lcd.setCursor(0, 1);
lcd.print("peremoga!");
if(anim){
lcd.createChar(0, coin1);delay(100);lcd.createChar(0, coin2);
delay(100);lcd.createChar(0, coin3);delay(100);lcd.createChar(0, coin2);delay(100);
}
lcd.setCursor(9, 1);
lcd.write(0);
}
else{
lcd.setCursor(0, 0);
lcd.print("menyu");
if(anim){
lcd.createChar(0, door);delay(500);lcd.createChar(0, ar1);delay(500);
lcd.createChar(1, key);delay(500);lcd.createChar(1, ar2);delay(500);
}
lcd.createChar(3, map2);
lcd.createChar(4, map3);
lcd.createChar(5, map4);
lcd.createChar(6, map5);
lcd.createChar(7, map6);
lcd.createChar(2, map1);
lcd.setCursor(8, 1);
lcd.write(0);
lcd.setCursor(12, 0);
lcd.write(1);
lcd.setCursor(9, 1);
lcd.write(2);
lcd.setCursor(9, 0);
lcd.write(3);
lcd.setCursor(10, 1);
lcd.write(4);
lcd.setCursor(10, 0);
lcd.write(5);
lcd.setCursor(11, 1);
lcd.write(6);
lcd.setCursor(11, 0);
lcd.write(7);
}
}