// ПІДКЛЮЧЕННЯ ДИСПЛЕЮ
#include <LiquidCrystal_I2C.h>
#define I2C_ADDR 0x27 // Адреса LCD дисплея на шині I2C
#define I2C_COLS 16 // Кількість стовпців на LCD дисплеї
#define I2C_ROWS 2 // Кількість рядків на LCD дисплеї
// ПІДКЛЮЧЕННЯ ЕЛЕМЕНТІВ ПРОЕКТУ
#define PLAYERONE 11
#define GameStartButton 12
#define PLAYERTWO 13
#define LEDPLAYERONE 10
#define LEDGAME 9
#define LEDPLAYERTWO 8
#define BUTTONLLVV 7
#define BUTTONLLNN 6
#define BUTTONRRVV 5
#define BUTTONRRNN 4
#define LEDPLAYERTHREE 3
#define LEDPLAYERFOUR 2
int GAMESELECT = 0;
int GAMESELECTANIM = 0;
int GAMESTAT = 0;
int BALLPOSITION = 0;
int GAMESTATUSDISPLAYSTAT = 0;
int SCOREPLAYERONE = 0;
int SCOREPLAYERTWO = 0;
int SCOREPLAYERTHREE = 0;
int SCOREPLAYERFOUR = 0;
int textwinplayer = 0;
int SELECTREPEAT = 0;
int ballspead = 200;
int textspeed = 1;
LiquidCrystal_I2C lcd(I2C_ADDR, I2C_COLS, I2C_ROWS);
void setup() {
lcd.begin(16, 2);
pinMode(LEDPLAYERONE, OUTPUT);
pinMode(LEDGAME, OUTPUT);
pinMode(LEDPLAYERTWO, OUTPUT);
pinMode(LEDPLAYERTHREE, OUTPUT);
pinMode(LEDPLAYERFOUR, OUTPUT);
pinMode(PLAYERONE, INPUT_PULLUP);
pinMode(PLAYERTWO, INPUT_PULLUP);
pinMode(GameStartButton, INPUT_PULLUP);
pinMode(BUTTONLLVV, INPUT_PULLUP);
pinMode(BUTTONLLNN, INPUT_PULLUP);
pinMode(BUTTONRRVV, INPUT_PULLUP);
pinMode(BUTTONRRNN, INPUT_PULLUP);
}
void loop() {
switch(GAMESELECT){
case 0:
loadinganim();
break;
case 1:
selectgameanim();
case 2:
selectgame();
buttonselectgame();
gameselected();
case 3:
switch(GAMESTAT){
case 1:
gamewaitstart();
changespeedball();
checkstartgame();
break;
case 2:
game_help();
break;
case 3:
game();
break;
case 4:
gamestatprint();
case 5:
buttonselectgamestat();
selectgamereplace();
gamestatselected();
break;
case 6:
break;
case 7:
setspeedbool();
checkperehodspeed();
break;
}
}
}
void checkperehodspeed(){
if (digitalRead(GameStartButton) == 0) {
GAMESTAT = 1;
}
}
void changespeedball(){
if(digitalRead(PLAYERONE) == 0){
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("SET BALL SPEAD");
lcd.setCursor(0, 1);
lcd.print("-");
lcd.setCursor(15, 1);
lcd.print("+");
GAMESTAT = 7;
}
}
void setspeedbool(){
lcd.setCursor(7, 1);
lcd.print(textspeed);
if(digitalRead(PLAYERTWO) == 0){
ballspead += 100;
textspeed += 1;
}
if(digitalRead(PLAYERONE) == 0){
ballspead -= 100;
textspeed -= 1;
}
if (ballspead < 200){
ballspead = 200;
textspeed = 1;
}
if (ballspead >= 900){
ballspead = 900;
textspeed = 9;
}
delay(100);
}
void gamestatprint(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("CONGRATULATIONS");
delay(2000);
if (textwinplayer == 1){
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("PLAYER ONE WIN");
}
if (textwinplayer == 2){
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("PLAYER TWO WIN");
}
if (textwinplayer == 3){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PLAYER THREE WIN");
}
if (textwinplayer == 4){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PLAYER FOUR WIN");
}
gamewinanimled();
delay(1000);
lcd.clear();
GAMESTAT = 5;
}
void playersetposition(){
if(digitalRead(BUTTONLLVV) == 0){
SCOREPLAYERONE += 1;
digitalWrite(LEDPLAYERONE, HIGH);
delay(500);
digitalWrite(LEDPLAYERONE, LOW);
}
}
void playersetposition2(){
if(digitalRead(BUTTONRRVV) == 0){
SCOREPLAYERTWO += 1;
digitalWrite(LEDPLAYERTWO, HIGH);
delay(500);
digitalWrite(LEDPLAYERTWO, LOW);
}
}
void playersetposition3(){
if(digitalRead(BUTTONLLNN) == 0){
SCOREPLAYERTHREE += 1;
digitalWrite(LEDPLAYERTHREE, HIGH);
delay(500);
digitalWrite(LEDPLAYERTHREE, LOW);
}
}
void playersetposition4(){
if(digitalRead(BUTTONRRNN) == 0){
SCOREPLAYERFOUR += 1;
digitalWrite(LEDPLAYERFOUR, HIGH);
delay(500);
digitalWrite(LEDPLAYERFOUR, LOW);
}
}
void playernotbouncebool(){
if(digitalRead(BUTTONLLVV) == 1){
SCOREPLAYERTWO += 1;
SCOREPLAYERTHREE += 1;
SCOREPLAYERFOUR += 1;
digitalWrite(LEDPLAYERONE, HIGH);
digitalWrite(LEDPLAYERTWO, HIGH);
digitalWrite(LEDPLAYERTHREE, HIGH);
digitalWrite(LEDPLAYERFOUR, HIGH);
delay(500);
digitalWrite(LEDPLAYERONE, LOW);
digitalWrite(LEDPLAYERTWO, LOW);
digitalWrite(LEDPLAYERTHREE, LOW);
digitalWrite(LEDPLAYERFOUR, LOW);
}
}
void playernotbouncebool2(){
if(digitalRead(BUTTONRRVV) == 1){
SCOREPLAYERONE += 1;
SCOREPLAYERTHREE += 1;
SCOREPLAYERFOUR += 1;
digitalWrite(LEDPLAYERONE, HIGH);
digitalWrite(LEDPLAYERTWO, HIGH);
digitalWrite(LEDPLAYERTHREE, HIGH);
digitalWrite(LEDPLAYERFOUR, HIGH);
delay(500);
digitalWrite(LEDPLAYERONE, LOW);
digitalWrite(LEDPLAYERTWO, LOW);
digitalWrite(LEDPLAYERTHREE, LOW);
digitalWrite(LEDPLAYERFOUR, LOW);
}
}
void playernotbouncebool3(){
if(digitalRead(BUTTONLLNN) == 1){
SCOREPLAYERONE += 1;
SCOREPLAYERTWO += 1;
SCOREPLAYERFOUR += 1;
digitalWrite(LEDPLAYERONE, HIGH);
digitalWrite(LEDPLAYERTWO, HIGH);
digitalWrite(LEDPLAYERTHREE, HIGH);
digitalWrite(LEDPLAYERFOUR, HIGH);
delay(500);
digitalWrite(LEDPLAYERONE, LOW);
digitalWrite(LEDPLAYERTWO, LOW);
digitalWrite(LEDPLAYERTHREE, LOW);
digitalWrite(LEDPLAYERFOUR, LOW);
}
}
void playernotbouncebool4(){
if(digitalRead(BUTTONRRNN) == 1){
SCOREPLAYERONE += 1;
SCOREPLAYERTWO += 1;
SCOREPLAYERTHREE += 1;
digitalWrite(LEDPLAYERONE, HIGH);
digitalWrite(LEDPLAYERTWO, HIGH);
digitalWrite(LEDPLAYERTHREE, HIGH);
digitalWrite(LEDPLAYERFOUR, HIGH);
delay(500);
digitalWrite(LEDPLAYERONE, LOW);
digitalWrite(LEDPLAYERTWO, LOW);
digitalWrite(LEDPLAYERTHREE, LOW);
digitalWrite(LEDPLAYERFOUR, LOW);
}
}
void checkgamewin(){
if (SCOREPLAYERONE == 9){
textwinplayer = 1;
GAMESTAT = 4;
}
if (SCOREPLAYERTWO == 9){
textwinplayer = 2;
GAMESTAT = 4;
}
if (SCOREPLAYERTHREE == 9){
textwinplayer = 3;
GAMESTAT = 4;
}
if (SCOREPLAYERFOUR == 9){
textwinplayer = 4;
GAMESTAT = 4;
}
}
void gamewinanimled(){
digitalWrite(LEDPLAYERONE, HIGH);
digitalWrite(LEDPLAYERTWO, HIGH);
digitalWrite(LEDPLAYERTHREE, HIGH);
digitalWrite(LEDPLAYERFOUR, HIGH);
delay(200);
digitalWrite(LEDPLAYERONE, LOW);
digitalWrite(LEDPLAYERTWO, LOW);
digitalWrite(LEDPLAYERTHREE, LOW);
digitalWrite(LEDPLAYERFOUR, LOW);
delay(200);
digitalWrite(LEDPLAYERONE, HIGH);
digitalWrite(LEDPLAYERTWO, HIGH);
digitalWrite(LEDPLAYERTHREE, HIGH);
digitalWrite(LEDPLAYERFOUR, HIGH);
delay(200);
digitalWrite(LEDPLAYERONE, LOW);
digitalWrite(LEDPLAYERTWO, LOW);
digitalWrite(LEDPLAYERTHREE, LOW);
digitalWrite(LEDPLAYERFOUR, LOW);
delay(200);
digitalWrite(LEDPLAYERONE, HIGH);
digitalWrite(LEDPLAYERTWO, HIGH);
digitalWrite(LEDPLAYERTHREE, HIGH);
digitalWrite(LEDPLAYERFOUR, HIGH);
delay(200);
digitalWrite(LEDPLAYERONE, LOW);
digitalWrite(LEDPLAYERTWO, LOW);
digitalWrite(LEDPLAYERTHREE, LOW);
digitalWrite(LEDPLAYERFOUR, LOW);
}
void game(){
checkgamewin();
BALLPOSITION = random(1, 4 +1);
lcd.setCursor(0, 0);
lcd.print(SCOREPLAYERONE);
lcd.setCursor(15, 0);
lcd.print(SCOREPLAYERTWO);
lcd.setCursor(0, 1);
lcd.print(SCOREPLAYERTHREE);
lcd.setCursor(15, 1);
lcd.print(SCOREPLAYERFOUR);
lcd.setCursor(1, 0);
lcd.print("|");
lcd.setCursor(1, 1);
lcd.print("|");
lcd.setCursor(14, 0);
lcd.print("|");
lcd.setCursor(14, 1);
lcd.print("|");
if(BALLPOSITION == 1){
lcd.setCursor(0, 0);
lcd.setCursor(7, 0);
lcd.print(".");
delay(ballspead);
lcd.setCursor(6, 0);
lcd.print(".");
lcd.setCursor(7, 0);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(5, 0);
lcd.print(".");
lcd.setCursor(6, 0);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(4, 0);
lcd.print(".");
lcd.setCursor(5, 0);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(3, 0);
lcd.print(".");
lcd.setCursor(4, 0);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(2, 0);
lcd.print(".");
lcd.setCursor(3, 0);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(2, 0);
lcd.print(" ");
playersetposition();
delay(1000);
playernotbouncebool();
}
if(BALLPOSITION == 2){
lcd.setCursor(7, 1);
lcd.print(".");
delay(ballspead);
lcd.setCursor(6, 1);
lcd.print(".");
lcd.setCursor(7, 1);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(5, 1);
lcd.print(".");
lcd.setCursor(6, 1);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(4, 1);
lcd.print(".");
lcd.setCursor(5, 1);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(3, 1);
lcd.print(".");
lcd.setCursor(4, 1);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(2, 1);
lcd.print(".");
lcd.setCursor(3, 1);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(2, 1);
lcd.print(" ");
playersetposition3();
delay(1000);
playernotbouncebool3();
}
if(BALLPOSITION == 3){
lcd.setCursor(7, 1);
lcd.print(".");
delay(ballspead);
lcd.setCursor(8, 1);
lcd.print(".");
lcd.setCursor(7, 1);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(9, 1);
lcd.print(".");
lcd.setCursor(8, 1);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(10, 1);
lcd.print(".");
lcd.setCursor(9, 1);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(11, 1);
lcd.print(".");
lcd.setCursor(10, 1);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(12, 1);
lcd.print(".");
lcd.setCursor(11, 1);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(13, 1);
lcd.print(".");
lcd.setCursor(12, 1);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(13, 1);
lcd.print(" ");
playersetposition4();
delay(ballspead);
playernotbouncebool4();
}
if(BALLPOSITION == 4){
lcd.setCursor(7, 0);
lcd.print(".");
delay(ballspead);
lcd.setCursor(8, 0);
lcd.print(".");
lcd.setCursor(7, 0);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(9, 0);
lcd.print(".");
lcd.setCursor(8, 0);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(10, 0);
lcd.print(".");
lcd.setCursor(9, 0);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(11, 0);
lcd.print(".");
lcd.setCursor(10, 0);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(12, 0);
lcd.print(".");
lcd.setCursor(11, 0);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(13, 0);
lcd.print(".");
lcd.setCursor(12, 0);
lcd.print(" ");
delay(ballspead);
lcd.setCursor(13, 0);
lcd.print(" ");
playersetposition2();
delay(1000);
playernotbouncebool2();
}
}
void buttonselectgame(){
if(digitalRead(PLAYERONE) == 0){
GAMESELECTANIM = 1;
}
if(digitalRead(PLAYERTWO) == 0){
GAMESELECTANIM = 2;
}
}
void selectgameanim(){
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("SELECT GAME");
delay(1000);
GAMESELECT = 2;
}
void selectgame(){
lcd.setCursor(1, 0);
lcd.print("GAME 1 GAME 2");
if(GAMESELECTANIM == 1){
BALLPOSITION = 0;
SCOREPLAYERONE = 0;
SCOREPLAYERTWO = 0;
SCOREPLAYERTHREE = 0;
SCOREPLAYERFOUR = 0;
textwinplayer = 0;
SELECTREPEAT = 0;
digitalWrite(LEDPLAYERONE, HIGH);
digitalWrite(LEDPLAYERTWO, LOW);
lcd.setCursor(1, 1);
lcd.print("---");
lcd.setCursor(12, 1);
lcd.print(" ");
}
if(GAMESELECTANIM == 2){
digitalWrite(LEDPLAYERONE, LOW);
digitalWrite(LEDPLAYERTWO, HIGH);
lcd.setCursor(1, 1);
lcd.print(" ");
lcd.setCursor(12, 1);
lcd.print("---");
}
}
void selectgamereplace(){
lcd.setCursor(1, 0);
lcd.print("REPEAT HOME");
if(SELECTREPEAT == 1){
digitalWrite(LEDPLAYERONE, HIGH);
digitalWrite(LEDPLAYERTWO, LOW);
lcd.setCursor(2, 1);
lcd.print("----");
lcd.setCursor(11, 1);
lcd.print(" ");
}
if(SELECTREPEAT == 2){
digitalWrite(LEDPLAYERONE, LOW);
digitalWrite(LEDPLAYERTWO, HIGH);
lcd.setCursor(2, 1);
lcd.print(" ");
lcd.setCursor(11, 1);
lcd.print("----");
}
}
void buttonselectgamestat(){
if(digitalRead(PLAYERONE) == 0){
SELECTREPEAT = 1;
}
if(digitalRead(PLAYERTWO) == 0){
SELECTREPEAT = 2;
}
}
void gamestatselected(){
if (digitalRead(GameStartButton) == 0){
if(SELECTREPEAT == 1){
BALLPOSITION = 0;
SCOREPLAYERONE = 0;
SCOREPLAYERTWO = 0;
SCOREPLAYERTHREE = 0;
SCOREPLAYERFOUR = 0;
textwinplayer = 0;
SELECTREPEAT = 0;
GAMESTAT = 1;
}
if(SELECTREPEAT == 2){
GAMESELECTANIM = 0;
GAMESELECT = 1;
GAMESTAT = 6;
}
}
}
void gameselected(){
if (digitalRead(GameStartButton) == 0){
if(GAMESELECTANIM == 1){
digitalWrite(LEDPLAYERONE, LOW);
digitalWrite(LEDPLAYERTWO, LOW);
digitalWrite(LEDGAME, HIGH);
delay(500);
digitalWrite(LEDGAME, LOW);
GAMESELECT = 3;
GAMESTAT = 1;
}
if(GAMESELECTANIM == 2){
digitalWrite(LEDPLAYERTWO, LOW);
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("HELLO");
delay(1000);
lcd.clear();
lcd.setCursor(6, 0);
lcd.print("GAME");
delay(1000);
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("UNDER");
delay(1000);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("DEVELOPMENT");
delay(1200);
lcd.clear();
GAMESELECT = 1;
}
}
}
void gamewaitstart(){
lcd.clear();
lcd.setCursor(5, 0);
lcd.print("HELLO");
delay(1000);
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("IS PIN PONG");
delay(2000);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("PRESS THE BUTTON");
lcd.setCursor(7, 1);
lcd.print("|");
digitalWrite(LEDGAME, HIGH);
delay(3000);
digitalWrite(LEDGAME, LOW);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("FOR THE GAME TO");
lcd.setCursor(5, 1);
lcd.print("START");
delay(3000);
}
void game_help(){
lcd.clear();
lcd.setCursor(2, 0);
lcd.print("GAME STARTED");
digitalWrite(LEDPLAYERONE, HIGH);
digitalWrite(LEDGAME, HIGH);
digitalWrite(LEDPLAYERTWO, HIGH);
delay(2000);
digitalWrite(LEDPLAYERONE, LOW);
digitalWrite(LEDGAME, LOW);
digitalWrite(LEDPLAYERTWO, LOW);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("THIS PLAYER 1");
delay(1000);
lcd.setCursor(0, 1);
lcd.print("|");
digitalWrite(LEDPLAYERONE, HIGH);
delay(3000);
digitalWrite(LEDPLAYERONE, LOW);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("THIS PLAYER 2");
delay(1000);
lcd.setCursor(15, 1);
lcd.print("|");
digitalWrite(LEDPLAYERTWO, HIGH);
delay(3000);
digitalWrite(LEDPLAYERTWO, LOW);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("THIS PLAYER 3");
delay(1000);
lcd.setCursor(2, 1);
lcd.print("|");
digitalWrite(LEDPLAYERTHREE, HIGH);
delay(3000);
digitalWrite(LEDPLAYERTHREE, LOW);
lcd.clear();
lcd.setCursor(1, 0);
lcd.print("THIS PLAYER 4");
delay(1000);
lcd.setCursor(14, 1);
lcd.print("|");
digitalWrite(LEDPLAYERFOUR, HIGH);
delay(3000);
digitalWrite(LEDPLAYERFOUR, LOW);
lcd.clear();
lcd.setCursor(7, 0);
lcd.print("5");
delay(1000);
lcd.clear();
lcd.setCursor(7, 0);
lcd.print("4");
delay(1000);
lcd.clear();
lcd.setCursor(7, 0);
lcd.print("3");
delay(1000);
lcd.clear();
lcd.setCursor(7, 0);
lcd.print("2");
delay(1000);
lcd.clear();
lcd.setCursor(7, 0);
lcd.print("1");
delay(1000);
lcd.clear();
GAMESTAT = 3;
}
void loadinganim(){
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("LOADING");
delay(1000);
lcd.print(".");
delay(1000);
lcd.print(".");
delay(1000);
lcd.print(".");
delay(1000);
lcd.print(".");
delay(1000);
lcd.print(".");
delay(1000);
lcd.print(".");
digitalWrite(LEDPLAYERONE, HIGH);
digitalWrite(LEDGAME, HIGH);
digitalWrite(LEDPLAYERTWO, HIGH);
lcd.clear();
delay(1000);
digitalWrite(LEDPLAYERONE, LOW);
digitalWrite(LEDGAME, LOW);
digitalWrite(LEDPLAYERTWO, LOW);
lcd.print("B");
delay(500);
lcd.print("Y");
delay(500);
lcd.print(" G");
digitalWrite(LEDPLAYERONE, HIGH);
delay(500);
digitalWrite(LEDPLAYERONE, LOW);
lcd.print("H");
digitalWrite(LEDGAME, HIGH);
delay(500);
digitalWrite(LEDGAME, LOW);
lcd.print("O");
digitalWrite(LEDPLAYERTWO, HIGH);
delay(500);
digitalWrite(LEDPLAYERTWO, LOW);
lcd.print("S");
digitalWrite(LEDPLAYERONE, HIGH);
delay(500);
digitalWrite(LEDPLAYERONE, LOW);
lcd.print("T");
digitalWrite(LEDPLAYERTWO, HIGH);
delay(500);
digitalWrite(LEDPLAYERTWO, LOW);
lcd.clear();
GAMESELECT = 1;
}
void checkstartgame(){
if (digitalRead(GameStartButton) == 0) {
GAMESTAT = 2;
}
}