Jestem inżynierem amatorem, uczę się programowania i elektroniki oraz robię fajne DIY. Potrafię posługiwać się wieloma mikrokontrolerami takimi jak arduino, esp32, stm32 i raspberry pi.
Myślę, że fajnie i nie nudno jest zapoznać się z nowym produktem poprzez robienie gier i właśnie dlatego zrobiłem ten projekt.
Projekt ma na celu wykorzystanie Arduino UNO i wyświetlacza LCD Stone TFT do stworzenia prostej gry Tic-Tac-Toe.
Materiały potrzebne do przeprowadzenia eksperymentu
- Arduino UNO
- Wyświetlacz TFT LCD Stone STWI070WT-01
Zasada działania układu
Określ, że pierwsze stuknięcie w ekran musi być O, drugie stuknięcie w ekran to X, wykonuje ten cykl. Ustaw 8 tablic do przechowywania liczby O i X w każdym wierszu, kolumnie i przekątnej każdej siatki, tak długo, jak istnieją trzy z tego samego znaku jest zwycięstwo, a następnie nie będzie migające czerwone pole, aby udowodnić zwycięstwo rzędu, kolumny lub przekątnej, a następnie naciśnij przycisk reset, aby rozpocząć grę ponownie.
Poniżej zamieszczam prosty schemat połączeń:
I projekt GUI:
Przedstawiam również kod, którym możesz się posłużyć. 🙂
unsigned int r_flag1 = 0;
uint8_t RecievedTemp1[30] = {0};
uint8_t cout_i = 0;
unsigned int quan_hang1 = 0;
unsigned int quan_hang2 = 0;
unsigned int quan_hang3 = 0;
unsigned int quan_lie1 = 0;
unsigned int quan_lie2 = 0;
unsigned int quan_lie3 = 0;
unsigned int quan_zuoxia = 0;
unsigned int quan_youxia = 0;
unsigned int cha_hang1 = 0;
unsigned int cha_hang2 = 0;
unsigned int cha_hang3 = 0;
unsigned int cha_lie1 = 0;
unsigned int cha_lie2 = 0;
unsigned int cha_lie3 = 0;
unsigned int cha_zuoxia = 0;
unsigned int cha_youxia = 0;
unsigned int cha[8] = {0};
void setup()
{
Serial.begin(115200);
for (int i = 3; i <= 8; i++)
pinMode(i, OUTPUT);
}
void loop() {
if (Serial.available() != 0) {
Serial.readBytes(RecievedTemp1, 20);
for (cout_i = 0; cout_i < 19; cout_i++) {
Serial.println(RecievedTemp1[cout_i]);
}
switch (RecievedTemp1[13]) {
case 49:
if ((r_flag1 == 0) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image2\",\"image\":\"circle\"}>ET"));
r_flag1 = 1;
quan_hang1++;
quan_lie1++;
quan_youxia++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button1\",\"enable\":false}>ET"));
} else if ((r_flag1 == 1) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image2\",\"image\":\"x\"}>ET"));
r_flag1 = 0;
cha_hang1++;
cha_lie1++;
cha_youxia++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button1\",\"enable\":false}>ET"));
}
break;
case 50:
if ((r_flag1 == 0) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image3\",\"image\":\"circle\"}>ET"));
r_flag1 = 1;
quan_hang1++;
quan_lie2++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button2\",\"enable\":false}>ET"));
} else if ((r_flag1 == 1) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image3\",\"image\":\"x\"}>ET"));
r_flag1 = 0;
cha_hang1++;
cha_lie2++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button2\",\"enable\":false}>ET"));
}
break;
case 51:
if ((r_flag1 == 0) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image4\",\"image\":\"circle\"}>ET"));
r_flag1 = 1;
quan_hang1++;
quan_lie3++;
quan_zuoxia++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button3\",\"enable\":false}>ET"));
} else if ((r_flag1 == 1) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image4\",\"image\":\"x\"}>ET"));
r_flag1 = 0;
cha_hang1++;
cha_lie3++;
cha_zuoxia++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button3\",\"enable\":false}>ET"));
}
break;
case 52:
if ((r_flag1 == 0) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image5\",\"image\":\"circle\"}>ET"));
r_flag1 = 1;
quan_hang2++;
quan_lie1++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button4\",\"enable\":false}>ET"));
} else if ((r_flag1 == 1) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image5\",\"image\":\"x\"}>ET"));
r_flag1 = 0;
cha_hang2++;
cha_lie1++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button4\",\"enable\":false}>ET"));
}
break;
case 53:
if ((r_flag1 == 0) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image6\",\"image\":\"circle\"}>ET"));
r_flag1 = 1;
quan_hang2++;
quan_lie2++;
quan_zuoxia++;
quan_youxia++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button5\",\"enable\":false}>ET"));
} else if ((r_flag1 == 1) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image6\",\"image\":\"x\"}>ET"));
r_flag1 = 0;
cha_hang2++;
cha_lie2++;
cha_zuoxia++;
cha_youxia++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button5\",\"enable\":false}>ET"));
}
break;
case 54:
if ((r_flag1 == 0) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image7\",\"image\":\"circle\"}>ET"));
r_flag1 = 1;
quan_hang2++;
quan_lie3++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button6\",\"enable\":false}>ET"));
} else if ((r_flag1 == 1) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image7\",\"image\":\"x\"}>ET"));
r_flag1 = 0;
cha_hang2++;
cha_lie3++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button6\",\"enable\":false}>ET"));
}
break;
case 55:
if ((r_flag1 == 0) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image8\",\"image\":\"circle\"}>ET"));
r_flag1 = 1;
quan_hang3++;
quan_lie1++;
quan_zuoxia++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button7\",\"enable\":false}>ET"));
} else if ((r_flag1 == 1) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image8\",\"image\":\"x\"}>ET"));
r_flag1 = 0;
cha_hang3++;
cha_lie1++;
cha_zuoxia++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button7\",\"enable\":false}>ET"));
}
break;
case 56:
if ((r_flag1 == 0) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image9\",\"image\":\"circle\"}>ET"));
r_flag1 = 1;
quan_hang3++;
quan_lie2++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button8\",\"enable\":false}>ET"));
} else if ((r_flag1 == 1) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image9\",\"image\":\"x\"}>ET"));
r_flag1 = 0;
cha_hang3++;
cha_lie2++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button8\",\"enable\":false}>ET"));
}
break;
case 57:
if ((r_flag1 == 0) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image10\",\"image\":\"circle\"}>ET"));
r_flag1 = 1;
quan_hang3++;
quan_lie3++;
quan_youxia++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button9\",\"enable\":false}>ET"));
} else if ((r_flag1 == 1) && (RecievedTemp1[14] == 2)) {
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image10\",\"image\":\"x\"}>ET"));
r_flag1 = 0;
cha_hang3++;
cha_lie3++;
cha_youxia++;
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button9\",\"enable\":false}>ET"));
}
break;
case 48:
r_flag1 = 0;
quan_hang1 = quan_hang2 = quan_hang3 = cha_hang1 = cha_hang2 = cha_hang3 = 0;
quan_lie1 = quan_lie2 = quan_lie3 = cha_lie1 = cha_lie2 = cha_lie3 = 0;
quan_zuoxia = quan_youxia = cha_zuoxia = cha_youxia = 0;
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image2\",\"image\":\"bai\"}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image3\",\"image\":\"bai\"}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image4\",\"image\":\"bai\"}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image5\",\"image\":\"bai\"}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image6\",\"image\":\"bai\"}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image7\",\"image\":\"bai\"}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image8\",\"image\":\"bai\"}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image9\",\"image\":\"bai\"}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_image\",\"type\":\"image\",\"widget\":\"image10\",\"image\":\"bai\"}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif4\",\"visible\":false}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif5\",\"visible\":false}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif6\",\"visible\":false}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif7\",\"visible\":false}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif8\",\"visible\":false}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif9\",\"visible\":false}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif10\",\"visible\":false}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif11\",\"visible\":false}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button9\",\"enable\":true}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button8\",\"enable\":true}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button7\",\"enable\":true}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button6\",\"enable\":true}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button5\",\"enable\":true}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button4\",\"enable\":true}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button3\",\"enable\":true}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button2\",\"enable\":true}>ET"));
Serial.println(F("ST<{\"cmd_code\":\"set_enable\",\"type\":\"widget\",\"widget\":\"button1\",\"enable\":true}>ET"));
break;
}
if ((quan_hang1 == 3) || (cha_hang1 == 3)) {
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif4\",\"visible\":true}>ET"));
} else if ((quan_hang2 == 3) || (cha_hang2 == 3)) {
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif5\",\"visible\":true}>ET"));
} else if ((quan_hang3 == 3) || (cha_hang3 == 3)) {
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif6\",\"visible\":true}>ET"));
} else if ((quan_lie1 == 3) || (cha_lie1 == 3)) {
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif7\",\"visible\":true}>ET"));
} else if ((quan_lie2 == 3) || (cha_lie2 == 3)) {
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif8\",\"visible\":true}>ET"));
} else if ((quan_lie3 == 3) || (cha_lie3 == 3)) {
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif9\",\"visible\":true}>ET"));
} else if ((quan_zuoxia == 3) || (cha_zuoxia == 3)) {
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif11\",\"visible\":true}>ET"));
} else if ((quan_youxia == 3) || (cha_youxia == 3)) {
Serial.println(F("ST<{\"cmd_code\":\"set_visible\",\"type\":\"widget\",\"widget\":\"gif10\",\"visible\":true}>ET"));
}
}
}
Poniżej film demonstracyjny projektu:
Przypominamy, że każdy z Was może zamieścić swój projekt u nas na blogu! 🙂
Aby to zrobić, przejdź tutaj: Zamieść swój projekt