Arduino ile satranç saati denemesi

Katılım
28 Kasım 2020
Mesajlar
4.140
Makaleler
2
Çözümler
67
Daha fazla  
Cinsiyet
Erkek
Selamünaleyküm cümleten.

Son zamanlarda satranca sarmıştım, sağ olsun YouTube durur mu her yer satranç maçlarıyla doldu ama neyse ki bu durumdan şikayetçi değilim.

Turnuva maçlarında kullanılan saat dikkatimi çekti ve kendi kendime "acaba yapabilir miyim?" dedim ve işe koyuldum ortaya oldukça ilkel bir şey çıktı paylaşmak istedim.

Malzeme olarak:
  • Arduino Uno (klon)
  • 16x2 i2C LCD.
  • 2 adet buton.
  • 2 adet 10k direnç.
  • Jumper ve minik breadboard.
Kullandım.
Ayrıca az önce baktim satranç saatleri de öyle ucuz şeyler değilmiş.
Kodu aşağıda paylaşıyorum kod hakkında yorum yaparsanız işte "şu şu şekilde daha iyi olabilirdi.", "şunun yerine bunu kullansan daha kolay olurdu." vb. gibi yorumlar bana çok şey katar.

C++:
#include <LCD_I2C.h>
LCD_I2C lcd(0x27, 16, 2);

#define but1 2
#define but2 3

bool but1_state;

int min = 29;
int sec = 60;
int min2 = 29;
int sec2 = 60;

unsigned long new_time;
unsigned long old_time;

void timer1() {

 if (digitalRead(but1) == 1) {
 but1_state = !(but1_state);
 while (digitalRead(but1) == 1) {
 delay(100);
 if (digitalRead(but1) == 0)
 break;
 }
 }

 if (digitalRead(but2) == 1) {
 but1_state = !(but1_state);
 while (digitalRead(but2) == 1) {
 delay(100);
 if (digitalRead(but2) == 0)
 break;
 }
 }
 switch (but1_state) {

 case 0:
 lcd.setCursor(9, 0);
 lcd.print("min");
 lcd.setCursor(13, 0);
 lcd.print("sec");

 lcd.setCursor(0, 0);
 lcd.print("min");
 lcd.setCursor(4, 0);
 lcd.print("sec");

 new_time = (millis() / 1000);
 if (old_time < new_time) {
 sec2--;
 old_time = new_time;
 lcd.clear();
 }

 if (sec2 < 1) {
 min2--;
 sec2 = 60;
 }

 lcd.setCursor(9, 1);
 lcd.print(min2);
 lcd.setCursor(13, 1);
 lcd.print(sec2);

 lcd.setCursor(0, 1);
 lcd.print(min);
 lcd.setCursor(4, 1);
 lcd.print(sec);

 break;

 case 1:
 lcd.setCursor(0, 0);
 lcd.print("min");
 lcd.setCursor(4, 0);
 lcd.print("sec");

 lcd.setCursor(9, 0);
 lcd.print("min");
 lcd.setCursor(13, 0);
 lcd.print("sec");

 new_time = (millis() / 1000);
 if (old_time < new_time) {
 sec--;
 old_time = new_time;
 lcd.clear();
 }

 if (sec < 1) {
 min--;
 sec = 60;
 }

 lcd.setCursor(0, 1);
 lcd.print(min);
 lcd.setCursor(4, 1);
 lcd.print(sec);

 lcd.setCursor(9, 1);
 lcd.print(min2);
 lcd.setCursor(13, 1);
 lcd.print(sec2);

 break;
 }
}

void setup() {
 lcd.begin();
 lcd.backlight();
 pinMode(but1, INPUT);
 pinMode(but2, INPUT);

}

void loop() {
 timer1();

}

IMG_20240407_234028.jpg
 

Geri
Yukarı