edison science corner
Published © CC BY

Tic Tac Toe game visiting card

let us make a Tic Tac Toe visiting card

AdvancedFull instructions provided10 hours873
Tic Tac Toe game visiting card

Things used in this project

Hardware components

ATmega328
Microchip ATmega328
×1
LED Strip, NeoPixel Digital RGB
LED Strip, NeoPixel Digital RGB
×1
Tactile Switch, Top Actuated
Tactile Switch, Top Actuated
×1
JLCPCB Customized PCB
JLCPCB Customized PCB
×1
Arduino UNO
Arduino UNO
×1

Software apps and online services

Arduino IDE
Arduino IDE

Hand tools and fabrication machines

Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free
Solder Flux, Soldering
Solder Flux, Soldering
10 Pc. Jumper Wire Kit, 5 cm Long
10 Pc. Jumper Wire Kit, 5 cm Long

Story

Read more

Schematics

circuit diagram

Code

code

C/C++
//edison science corner


#include <Keypad.h>
#include <FastLED.h>

#define LED_PIN     5
#define NUM_LEDS    16
#define LED_TYPE    WS2812B
#define COLOR_ORDER GBR
#define BRIGHTNESS  30

CRGB leds[NUM_LEDS];

int player=1;
int n,i,e=0,j=0;
char a[16]={'1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16'};
char key;
int w=0;

const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
//define the cymbols on the buttons of the keypads
char hexaKeys[ROWS][COLS] = {
  {'1','2','3','A'},
  {'4','5','6','B'},
  {'7','8','9','C'},
  {'*','0','#','D'}
};
byte rowPins[ROWS] = {A0,A1,A2,A3}; //connect to the row pinouts of the keypad
byte colPins[COLS] = {A4,A5,2,3}; //connect to the column pinouts of the keypad
Keypad customKeypad = Keypad( makeKeymap(hexaKeys), rowPins, colPins, ROWS, COLS); 

void setup(){
  Serial.begin(9600);
  LEDS.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  FastLED.setBrightness(BRIGHTNESS);
  for(int m=0;m<3;m++)
  {
        leds[0].setRGB(0, 255, 0);
        leds[1].setRGB(0, 255, 0);
        leds[2].setRGB(0, 255, 0);
        leds[3].setRGB(0, 255, 0);
        leds[4].setRGB(0, 255, 0);
        leds[5].setRGB(0, 255, 0);
        leds[6].setRGB(0, 255,0 );
        leds[7].setRGB(0, 255, 0);
        leds[8].setRGB(0, 255, 0);
        leds[9].setRGB(0, 255, 0);
        leds[10].setRGB(0, 255, 0);
        leds[11].setRGB(0, 255, 0);
        leds[12].setRGB(0, 255, 0);
        leds[13].setRGB(0, 255, 0);
        leds[14].setRGB(0, 255, 0);
        leds[15].setRGB(0, 255, 0);
        FastLED.show();
        delay(500);
        leds[0].setRGB(0, 0, 225);
        leds[1].setRGB(0, 0, 225);
        leds[2].setRGB(0, 0, 225);
        leds[3].setRGB(0, 0, 225);
        leds[4].setRGB(0, 0, 225);
        leds[5].setRGB(0, 0, 225);
        leds[6].setRGB(0, 0, 225);
        leds[7].setRGB(0, 0, 225);
        leds[8].setRGB(0, 0, 225);
        leds[9].setRGB(0, 0, 225);
        leds[10].setRGB(0, 0, 225);
        leds[11].setRGB(0, 0, 225);
        leds[12].setRGB(0, 0, 225);
        leds[13].setRGB(0, 0, 225);
        leds[14].setRGB(0, 0, 225);
        leds[15].setRGB(0, 0, 225);
        FastLED.show();
        delay(500);
  }
        FastLED.clear();
        FastLED.show();
}
  
void loop()
{
  key = customKeypad.getKey();
  if (key && player==1)
  {
    Serial.println("\nP1");
    Serial.println(key);
    n=number(key);
    Serial.println(n);
    leds[n].setRGB(0, 255, 0);
    FastLED.show();
    a[n]='X';
    Serial.println(a[n]);
    w=check(a,n);
    if(w==1)
    {
      Serial.println("Player 1 Wins!");
      while(1)
      {
    leds[0].setRGB(0, 255, 0);
        leds[1].setRGB(0, 255, 0);
        leds[2].setRGB(0, 255, 0);
        leds[3].setRGB(0, 255, 0);
        leds[4].setRGB(0, 255, 0);
        leds[5].setRGB(0, 255, 0);
        leds[6].setRGB(0, 255,0 );
        leds[7].setRGB(0, 255, 0);
        leds[8].setRGB(0, 255, 0);
        leds[9].setRGB(0, 255, 0);
        leds[10].setRGB(0, 255, 0);
        leds[11].setRGB(0, 255, 0);
        leds[12].setRGB(0, 255, 0);
        leds[13].setRGB(0, 255, 0);
        leds[14].setRGB(0, 255, 0);
        leds[15].setRGB(0, 255, 0);
        FastLED.show();
        delay(500);
        FastLED.clear();
        FastLED.show();
        delay(500);
    }
   }
    player++;
    delay(1000);
  }
  delay(20);
  key = customKeypad.getKey();
  if (key && player==2)
  {
    Serial.println("\nP2");
    Serial.println(key);
    n=number(key);
    Serial.println(n);
    leds[n].setRGB(0, 0, 225);
    FastLED.show();
    a[n]='0';
    Serial.println(a[n]);
    w=check(a,n);
    if(w==2)
    {
      Serial.println("Player 2 Wins!");
      while(1)
      {
   leds[0].setRGB(0, 0, 225);
        leds[1].setRGB(0, 0, 225);
        leds[2].setRGB(0, 0, 225);
        leds[3].setRGB(0, 0, 225);
        leds[4].setRGB(0, 0, 225);
        leds[5].setRGB(0, 0, 225);
        leds[6].setRGB(0, 0, 225);
        leds[7].setRGB(0, 0, 225);
        leds[8].setRGB(0, 0, 225);
        leds[9].setRGB(0, 0, 225);
        leds[10].setRGB(0, 0, 225);
        leds[11].setRGB(0, 0, 225);
        leds[12].setRGB(0, 0, 225);
        leds[13].setRGB(0, 0, 225);
        leds[14].setRGB(0, 0, 225);
        leds[15].setRGB(0, 0, 225);
        FastLED.show();
        delay(500);
        FastLED.clear();
        FastLED.show();
        delay(500);
        
        
    }
    }
    e++;
  player--;
   delay(1000);
  }
  if(e==8)
  {
    Serial.println("Game Draw");
    while(1)
    {
        leds[0].setRGB(255, 0, 0);
        leds[1].setRGB(255, 0, 0);
        leds[2].setRGB(255, 0, 0);
        leds[3].setRGB(255, 0, 0);
        leds[4].setRGB(255, 0, 0);
        leds[5].setRGB(255, 0, 0);
        leds[6].setRGB(255, 0, 0);
        leds[7].setRGB(255, 0, 0);
        leds[8].setRGB(255, 0, 0);
        leds[9].setRGB(255, 0, 0);
        leds[10].setRGB(255, 0, 0);
        leds[11].setRGB(255, 0, 0);
        leds[12].setRGB(255, 0, 0);
        leds[13].setRGB(255, 0, 0);
        leds[14].setRGB(255, 0, 0);
        leds[15].setRGB(255, 0, 0);
        FastLED.show();
        delay(1000);
        FastLED.clear();
        FastLED.show();
        delay(500);
  }
  }
  delay(20);
}

int number(char keyn)
{
  if(keyn == '1')
    return 0;
  if(keyn == '2')
    return 1;
  if(keyn == '3')
    return 2;
  if(key == 'A')
    return 3;
  if(keyn == '4')
    return 4;
  if(keyn == '5')
    return 5;
  if(keyn == '6')
    return 6;
  if(keyn == 'B')
    return 7;
  if(keyn == '7')
    return 8;
  if(keyn == '8')
    return 9;
  if(keyn == '9')
    return 10;
  if(keyn == 'C')
    return 11;
  if(key == '*')
    return 12;
  if(keyn == '0')
    return 13;
  if(keyn == '#')
    return 14;
  if(keyn == 'D')
    return 15;
}

int check(char a[16],int n)
{
  
  if(a[0]=='X' && a[1]=='X' && a[2]=='X' && a[3]=='X')
    return 1;
  if(a[0]=='0' && a[1]=='0' && a[2]=='0' && a[3]=='0')
    return 2;
  if(a[0]=='X' && a[4]=='X' && a[8]=='X' && a[12]=='X')
    return 1;
  if(a[0]=='0' && a[4]=='0' && a[8]=='0' && a[12]=='0')
    return 2;
  if(a[0]=='X' && a[5]=='X' && a[10]=='X' && a[15]=='X')
    return 1;
  if(a[0]=='0' && a[5]=='0' && a[10]=='0' && a[15]=='0')
    return 2;
  if(a[1]=='X' && a[5]=='X' && a[9]=='X' && a[13]=='X')
    return 1;
  if(a[1]=='0' && a[5]=='0' && a[9]=='0' && a[13]=='0')
    return 2;
  if(a[2]=='X' && a[6]=='X' && a[10]=='X' && a[14]=='X')
    return 1;
  if(a[2]=='0' && a[6]=='0' && a[10]=='0' && a[14]=='0')
    return 2;
  if(a[3]=='X' && a[7]=='X' && a[11]=='X' && a[15]=='X')
    return 1;
  if(a[3]=='0' && a[7]=='0' && a[11]=='0' && a[15]=='0')
    return 2;
  if(a[3]=='X' && a[6]=='X' && a[9]=='X' && a[12]=='X')
    return 1;
  if(a[3]=='0' && a[6]=='0' && a[9]=='0' && a[12]=='0')
    return 2;
  if(a[4]=='X' && a[5]=='X' && a[6]=='X' && a[7]=='X')
    return 1;
  if(a[4]=='0' && a[5]=='0' && a[6]=='0' && a[7]=='0')
    return 2;
  if(a[8]=='X' && a[9]=='X' && a[10]=='X' && a[11]=='X')
    return 1;
  if(a[8]=='0' && a[9]=='0' && a[10]=='0' && a[11]=='0')
    return 2;
  if(a[12]=='X' && a[13]=='X' && a[14]=='X' && a[15]=='X')
    return 1;
  if(a[12]=='0' && a[13]=='0' && a[14]=='0' && a[15]=='0')
    return 2;
}

Credits

edison science corner
59 projects • 78 followers
Electronic enthusiast watch videos from here https://www.youtube.com/channel/UCVcOsUBmH4hzVSnmJA_i5SA
Contact

Comments

Please log in or sign up to comment.