Summary
Chess clock is based on :
https://www.instructables.com/How-to-Make-a-Chess-Clock-With-Arduino/
By simaopintocorreia
Instructable is well written and contains all information necessary for a successful project.
Clock is powered by rechargeable batteries held by my 2 battery holder.
I added a countdown clock to beginning of program and an alarm that sounds when a player looses. Busser is connected to pin 3.
Also added section to program that allow for play time to change: 1 min, 3 min, 5 min, and 10 min games.
To make wiring easier, I made two small boards - one for power and another for ground. That allows wire to be plugged into small boards rather than main arduino board.
Switch does not work as planned - it does not completely shut off clock. Will design with proper switch. Plug power supply in to start clock.
Code follows:
include
LiquidCrystal lcd (7, 8, 9, 10, 11, 12);
const int buttonPin = 2; // the number of the pushbutton pin
const int ledPin = 13; // the number of the LED pin
// Variables will change:
int ledState = HIGH; // the current state of the output pin
int buttonState; // the current reading from the input pin
int lastButtonState = LOW; // the previous reading from the input pin
unsigned long lastDebounceTime = 0; // the last time the output pin was toggled
unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers
//double whiteTime = 610000;//10 minute game add // to not use timer, remove // to select timer
//double whiteTime = 310000;//5 minute game
double whiteTime = 190000;//3 minute game
//double whiteTime = 70000;//1 minute game
int whiteMinutes = 0;
int whiteSeconds = 0;
double whiteLastCheck = millis();
//double blackTime = 610000;//10 minute game add // to not use timer, remove // to select timer
//double blackTime = 310000;//5 minute game
double blackTime = 190000;//3 minute game
//double blackTime = 70000;//1 minute game 70000
int blackMinutes = 0;
int blackSeconds = 0;
double blackLastCheck = millis();
bool isWhiteTurn = true;
bool gameOver = false;
int countDown =0; //used for initial start countdown
int buzzer = 3;
int buzzerOff = 0;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
pinMode(buttonPin, INPUT);
pinMode(ledPin, OUTPUT);
UpdateWhiteTime();
UpdateBlackTime();
//int whiteButtonState = 0;
//int blackButtonState = 0;
}
void loop() {
int reading = digitalRead(buttonPin);
Serial.println(ledState);
if (reading != lastButtonState) {
lastDebounceTime = millis();}
if ((millis() - lastDebounceTime) > debounceDelay) {
// whatever the reading is at, it's been there for longer
// than the debounce delay, so take it as the actual current state:
}// set the LED:
digitalWrite(ledPin, ledState);
if(ledState==1){
StartWhiteTurn ();
Serial.println("White");
UpdateWhiteTime();
} else if(ledState==0){
StartBlackTurn ();
Serial.println("Black");
UpdateBlackTime();
}
lastButtonState = reading;
}
void UpdateWhiteTime() {
lcd.setCursor(10,0);
lcd.print("White");
lcd.setCursor(12, 1);
Serial.println("White");
whiteTime -= ((millis() - whiteLastCheck));
whiteLastCheck = millis();
if (countDown ==0){
lcd.clear();
lcd.setCursor(2,1);
lcd.print("Count Down");
for (int i = 9;i >0; i--){
lcd.setCursor(13,1);
lcd.print(i);
delay(1000);
}
countDown = 1;
lcd.clear();
}
if (whiteTime <= 0) {
gameOver = true;
lcd.print("LOSE");
if(buzzerOff<1){
tone(buzzer, 400);
delay(500);
noTone(buzzer);
delay(2000);}
buzzerOff=1;
return;
}
whiteMinutes = floor(whiteTime / 60000);
whiteSeconds = floor(whiteTime / 1000) - whiteMinutes 60;
lcd.print(whiteMinutes);
lcd.print(":");
if (whiteSeconds < 10) {
lcd.print(0);
}
lcd.print(whiteSeconds);
}// end printWait
void UpdateBlackTime() {
lcd.setCursor(0,0);
lcd.print(" Black");
lcd.setCursor(0, 1);
Serial.println("Black");
blackTime -= ((millis() - blackLastCheck));
blackLastCheck = millis();
if (blackTime <= 0) {
gameOver = true;
lcd.print("LOSE");
if(buzzerOff<1){
tone(buzzer, 500);
delay(500);
noTone(buzzer);
delay(2000);}
buzzerOff=1;
return;
}
blackMinutes = floor(blackTime / 60000);
blackSeconds = floor(blackTime / 1000) - blackMinutes 60;
lcd.print(blackMinutes);
lcd.print(":");
if (blackSeconds < 10) {
lcd.print(0);
}
lcd.print(blackSeconds);
}// end printWait
void StartWhiteTurn () {
if (isWhiteTurn) {
return;
}
isWhiteTurn = true;
whiteLastCheck = millis();
} // end StartWhiteTurn
void StartBlackTurn () {
if (!isWhiteTurn) {
return;
}
isWhiteTurn = false;
blackLastCheck = millis();
} // end StartBlackTurn
Print Settings
Printer Brand:
Creality
Printer:
CR-10S
Rafts:
No
Supports:
No
Resolution:
300
Infill:
15
Теги
Источник модели
