// LCD1602 to Arduino Uno connection example
#include <LiquidCrystal.h>
#include <Button.h>
#include "LedControl.h"
#include "binary.h"
byte m1[8]= {B00001000,B00001000,B00001000,B11111111,B00001000,B00001000,B00001000,B00001000};
byte m2[8]= {B00000000,B00001000,B00001000,B00001000,B00001000,B11111111,B00001000,B00001000};
byte m3[8]= {B00100000,B00100000,B00100000,B11111110,B00100000,B00100000,B00100000,B00100000};
byte m4[8]= {B00000000,B00100000,B00100000,B00100000,B00100000,B11111110,B00100000,B00100000};
LiquidCrystal lcd(13, 12, 11, 10, 9, 8);
LedControl lc=LedControl(7,6,5,4);
Button up(4);
Button down(1);
Button left(3);
Button right(2);
Button place(0);
int row = 0;
int section = 0;
int rowc = 6;
int colc = 1;
int addrc = 0;
bool xo = 0;
String pos1 = "y";
String pos2 = "y";
String pos3 = "y";
String pos4 = "y";
String pos5 = "y";
String pos6 = "y";
String pos7 = "y";
String pos8 = "y";
String pos9 = "y";
void setup(){
lc.shutdown(0,false);
lc.setIntensity(0,8);
lc.clearDisplay(0);
up.begin();
down.begin();
left.begin();
right.begin();
place.begin();
lcd.begin(16, 2);
for(int i = 0; i < 8; i++){
lc.setRow(0,row ,m1[section]);
lc.setRow(2,row ,m2[section]);
lc.setRow(1,row ,m3[section]);
lc.setRow(3,row ,m4[section]);
row = row + 1;
section = section + 1;
}
placement(addrc, colc, rowc);
player(xo);
}
void loop() {
//Movement
if (down.pressed())
{
rowc = rowc - 6;
if (rowc < 0 && colc == 1)
{
addrc = 2;
rowc = 2;
}
else if (rowc < 0 && colc == 7)
{
addrc = 2;
rowc = 2;
}
if (rowc < 0 && colc == 5)
{
addrc = 3;
rowc = 2;
}
placement(addrc, colc, rowc);
}
if (right.pressed())
{
colc = colc + 6;
if (colc > 7 && rowc == 6)
{
addrc = 1;
colc = 5;
}
else if (colc > 7 && rowc == 0)
{
addrc = 1;
colc = 5;
}
else if (colc > 7 && rowc == 2)
{
addrc = 3;
colc = 5;
}
placement(addrc, colc, rowc);
}
if (left.pressed())
{
colc = colc - 6;
if (colc < 0 && rowc == 6)
{
addrc = 0;
colc = 7;
}
else if (colc < 0 && rowc == 0)
{
addrc = 0;
colc = 7;
}
else if (colc < 0 && rowc == 2)
{
addrc = 2;
colc = 7;
}
placement(addrc, colc, rowc);
}
if (up.pressed())
{
rowc = rowc + 6;
if (rowc > 7 && colc == 1)
{
addrc = 0;
rowc = 0;
}
else if (rowc > 7 && colc == 7)
{
addrc = 0;
rowc = 0;
}
if (rowc > 7 && colc == 5)
{
addrc = 1;
rowc = 0;
}
placement(addrc, colc, rowc);
}
// Placement
if (place.pressed())
{
if (addrc == 0 && colc == 1 && rowc == 6)
{
if (xo == 0)
{
if (pos1 != "O")
{
lc.setLed(0,7,0,true);
lc.setLed(0,6,1,true);
lc.setLed(0,5,2,true);
lc.setLed(0,7,2,true);
lc.setLed(0,5,0,true);
xo = 1;
pos1 = "X";
}
}
else if (xo == 1)
{
if (pos1 != "X")
{
lc.setLed(0,7,0,true);
lc.setLed(0,7,1,true);
lc.setLed(0,7,2,true);
lc.setLed(0,6,0,true);
lc.setLed(0,6,2,true);
lc.setLed(0,5,0,true);
lc.setLed(0,5,1,true);
lc.setLed(0,5,2,true);
xo = 0;
pos1 = "O";
}
}
}
if (addrc == 0 && colc == 7 && rowc == 6)
{
if (xo == 0)
{
if (pos2 != "O")
{
lc.setLed(0,7,6,true);
lc.setLed(0,6,7,true);
lc.setLed(1,5,0,true);
lc.setLed(1,7,0,true);
lc.setLed(0,5,6,true);
xo = 1;
pos2 = "X";
}
}
else if (xo == 1)
{
if (pos2 != "X")
{
lc.setLed(0,7,6,true);
lc.setLed(0,7,7,true);
lc.setLed(1,7,0,true);
lc.setLed(0,6,6,true);
lc.setLed(1,6,0,true);
lc.setLed(0,5,6,true);
lc.setLed(0,5,7,true);
lc.setLed(1,5,0,true);
xo = 0;
pos2 = "O";
}
}
}
if (addrc == 1 && colc == 5 && rowc == 6)
{
if (xo == 0)
{
if (pos3 != "O")
{
lc.setLed(1,7,4,true);
lc.setLed(1,7,6,true);
lc.setLed(1,6,5,true);
lc.setLed(1,5,4,true);
lc.setLed(1,5,6,true);
xo = 1;
pos3 = "X";
}
}
else if (xo == 1)
{
if (pos3 != "X")
{
lc.setLed(1,7,4,true);
lc.setLed(1,7,5,true);
lc.setLed(1,7,6,true);
lc.setLed(1,6,4,true);
lc.setLed(1,6,6,true);
lc.setLed(1,5,4,true);
lc.setLed(1,5,5,true);
lc.setLed(1,5,6,true);
xo = 0;
pos3 = "O";
}
}
}
if (addrc == 0 && colc == 1 && rowc == 0)
{
if (xo == 0)
{
if (pos4 != "O")
{
lc.setLed(0,1,0,true);
lc.setLed(0,0,1,true);
lc.setLed(2,7,2,true);
lc.setLed(0,1,2,true);
lc.setLed(2,7,0,true);
xo = 1;
pos4 = "X";
}
}
else if (xo == 1)
{
if (pos4 != "X")
{
lc.setLed(0,1,0,true);
lc.setLed(0,1,1,true);
lc.setLed(0,1,2,true);
lc.setLed(0,0,0,true);
lc.setLed(0,0,2,true);
lc.setLed(2,7,0,true);
lc.setLed(2,7,1,true);
lc.setLed(2,7,2,true);
xo = 0;
pos4 = "O";
}
}
}
if (addrc == 0 && colc == 7 && rowc == 0)
{
if (xo == 0)
{
if (pos5 != "O")
{
lc.setLed(0,1,6,true);
lc.setLed(0,0,7,true);
lc.setLed(3,7,0,true);
lc.setLed(1,1,0,true);
lc.setLed(2,7,6,true);
xo = 1;
pos5 = "X";
}
}
else if (xo == 1)
{
if (pos5 != "X")
{
lc.setLed(0,1,6,true);
lc.setLed(0,1,7,true);
lc.setLed(1,1,0,true);
lc.setLed(0,0,6,true);
lc.setLed(1,0,0,true);
lc.setLed(2,7,6,true);
lc.setLed(2,7,7,true);
lc.setLed(3,7,0,true);
xo = 0;
pos5 = "O";
}
}
}
if (addrc == 1 && colc == 5 && rowc == 0)
{
if (xo == 0)
{
if (pos6 != "O")
{
lc.setLed(1,1,4,true);
lc.setLed(1,1,6,true);
lc.setLed(1,0,5,true);
lc.setLed(3,7,4,true);
lc.setLed(3,7,6,true);
xo = 1;
pos6 = "X";
}
}
else if (xo == 1)
{
if (pos6 != "X")
{
lc.setLed(1,1,4,true);
lc.setLed(1,1,5,true);
lc.setLed(1,1,6,true);
lc.setLed(1,0,4,true);
lc.setLed(1,0,6,true);
lc.setLed(3,7,4,true);
lc.setLed(3,7,5,true);
lc.setLed(3,7,6,true);
xo = 0;
pos6 = "O";
}
}
}
if (addrc == 2 && colc == 1 && rowc == 2)
{
if (xo == 0)
{
if (pos7 != "O")
{
lc.setLed(2,3,0,true);
lc.setLed(2,3,2,true);
lc.setLed(2,2,1,true);
lc.setLed(2,1,0,true);
lc.setLed(2,1,2,true);
xo = 1;
pos7 = "X";
}
}
else if (xo == 1)
{
if (pos7 != "X")
{
lc.setLed(2,3,0,true);
lc.setLed(2,3,1,true);
lc.setLed(2,3,2,true);
lc.setLed(2,2,0,true);
lc.setLed(2,2,2,true);
lc.setLed(2,1,0,true);
lc.setLed(2,1,1,true);
lc.setLed(2,1,2,true);
xo = 0;
pos7 = "O";
}
}
}
if (addrc == 2 && colc == 7 && rowc == 2)
{
if (xo == 0)
{
if (pos8 != "O")
{
lc.setLed(2,3,6,true);
lc.setLed(3,3,0,true);
lc.setLed(2,2,7,true);
lc.setLed(2,1,6,true);
lc.setLed(3,1,0,true);
xo = 1;
pos8 = "X";
}
}
else if (xo == 1)
{
if (pos8 != "X")
{
lc.setLed(2,3,6,true);
lc.setLed(2,3,7,true);
lc.setLed(3,3,0,true);
lc.setLed(2,2,6,true);
lc.setLed(3,2,0,true);
lc.setLed(2,1,6,true);
lc.setLed(2,1,7,true);
lc.setLed(3,1,0,true);
xo = 0;
pos8 = "O";
}
}
}
if (addrc == 3 && colc == 5 && rowc == 2)
{
if (xo == 0)
{
if (pos9 != "O")
{
lc.setLed(3,3,4,true);
lc.setLed(3,3,6,true);
lc.setLed(3,2,5,true);
lc.setLed(3,1,4,true);
lc.setLed(3,1,6,true);
xo = 1;
pos9 = "X";
}
}
else if (xo == 1)
{
if (pos9 != "X")
{
lc.setLed(3,3,4,true);
lc.setLed(3,3,5,true);
lc.setLed(3,3,6,true);
lc.setLed(3,2,4,true);
lc.setLed(3,2,6,true);
lc.setLed(3,1,4,true);
lc.setLed(3,1,5,true);
lc.setLed(3,1,6,true);
xo = 0;
pos9 = "O";
}
}
}
player(xo);
Win(pos1, pos2, pos3, pos4, pos5, pos6, pos7, pos8, pos9);
}
}
static void placement(int addrc, int colc, int rowc)
{
lcd.clear();
if (addrc == 0 && colc == 1 && rowc == 6){
lcd.print("Cur Pos: A1");
}
if (addrc == 0 && colc == 7 && rowc == 6){
lcd.print("Cur Pos: A2");
}
if (addrc == 1 && colc == 5 && rowc == 6){
lcd.print("Cur Pos: A3");
}
if (addrc == 0 && colc == 1 && rowc == 0){
lcd.print("Cur Pos: B1");
}
if (addrc == 0 && colc == 7 && rowc == 0){
lcd.print("Cur Pos: B2");
}
if (addrc == 1 && colc == 5 && rowc == 0){
lcd.print("Cur Pos: B3");
}
if (addrc == 2 && colc == 1 && rowc == 2){
lcd.print("Cur Pos: C1");
}
if (addrc == 2 && colc == 7 && rowc == 2){
lcd.print("Cur Pos: C2");
}
if (addrc == 3 && colc == 5 && rowc == 2){
lcd.print("Cur Pos: C3");
}
player(xo);
}
static void player(bool xo)
{
if(xo == 0)
{
lcd.setCursor(0,1);
lcd.print("X's Turn");
lcd.setCursor(0,0);
}
else if(xo == 1)
{
lcd.setCursor(0,1);
lcd.print("O's Turn");
lcd.setCursor(0,0);
}
}
static void Win(String pos1, String pos2, String pos3, String pos4, String pos5, String pos6, String pos7, String pos8, String pos9)
{
if(pos1 == "X" && pos2 == "X" && pos3 == "X")
{
lcd.clear();
lcd.print("X Wins!!");
}
else if(pos4 == "X" && pos5 == "X" && pos6 == "X")
{
lcd.clear();
lcd.print("X Wins!!");
}
else if(pos7 == "X" && pos8 == "X" && pos9 == "X")
{
lcd.clear();
lcd.print("X Wins!!");
}
else if(pos1 == "X" && pos4 == "X" && pos7 == "X")
{
lcd.clear();
lcd.print("X Wins!!");
}
else if(pos2 == "X" && pos5 == "X" && pos8 == "X")
{
lcd.clear();
lcd.print("X Wins!!");
}
else if(pos3 == "X" && pos6 == "X" && pos9 == "X")
{
lcd.clear();
lcd.print("X Wins!!");
}
else if(pos1 == "X" && pos5 == "X" && pos9 == "X")
{
lcd.clear();
lcd.print("X Wins!!");
}
else if(pos3 == "X" && pos5 == "X" && pos7 == "X")
{
lcd.clear();
lcd.print("X Wins!!");
}
else if(pos1 == "O" && pos2 == "O" && pos3 == "O")
{
lcd.clear();
lcd.print("O Wins!!");
}
else if(pos4 == "O" && pos5 == "O" && pos6 == "O")
{
lcd.clear();
lcd.print("O Wins!!");
}
else if(pos7 == "O" && pos8 == "O" && pos9 == "O")
{
lcd.clear();
lcd.print("O Wins!!");
}
else if(pos1 == "O" && pos4 == "O" && pos7 == "O")
{
lcd.clear();
lcd.print("O Wins!!");
}
else if(pos2 == "O" && pos5 == "O" && pos8 == "O")
{
lcd.clear();
lcd.print("O Wins!!");
}
else if(pos3 == "O" && pos6 == "O" && pos9 == "O")
{
lcd.clear();
lcd.print("O Wins!!");
}
else if(pos1 == "O" && pos5 == "O" && pos9 == "O")
{
lcd.clear();
lcd.print("O Wins!!");
}
else if(pos3 == "O" && pos5 == "O" && pos7 == "O")
{
lcd.clear();
lcd.print("O Wins!!");
}
}