Zusammenfassung
Die Schachuhr basiert auf:
https://www.instructables.com/How-to-Make-a-Chess-Clock-With-Arduino/
Von simaopintocorreia
Instructable ist gut geschrieben und enthält alle Informationen, die für ein erfolgreiches Projekt erforderlich sind.
Die Uhr wird von wiederaufladbaren Batterien betrieben, die in meinem 2-Batteriehalter aufbewahrt werden.
Ich habe einen Countdown-Timer zum Beginn des Programms hinzugefügt und einen Alarm, der ertönt, wenn ein Spieler verliert. Busser ist an Pin 3 angeschlossen.
Außerdem wurde ein Abschnitt zum Programm hinzugefügt, der es ermöglicht, die Spielzeit zu ändern: 1-minütige, 3-minütige, 5-minütige und 10-minütige Spiele.
Um die Verkabelung zu erleichtern, habe ich zwei kleine Boards hergestellt - eines für die Stromversorgung und eines für die Masse. Das ermöglicht es, Kabel in kleine Boards anstatt in das Haupt-Arduino-Board einzustecken.
Der Schalter funktioniert nicht wie geplant - er schaltet die Uhr nicht vollständig aus. Ich werde einen geeigneten Schalter entwerfen. Stecken Sie das Netzteil ein, um die Uhr zu starten.
Der Code folgt:
einbeziehen
LiquidCrystal LCD (7, 8, 9, 10, 11, 12);
const int buttonPin = 2; // die Nummer des Taster-Pins
const int ledPin = 13; // die Nummer des LED-Pins
// Variablen werden sich ändern:
int ledState = HIGH; // der aktuelle Zustand des Ausgangsstifts
int buttonState; // der aktuelle Messwert vom Eingangs-Pin
int lastButtonState = LOW; // die vorherige Messung vom Eingangs-Pin
unsigned long lastDebounceTime = 0; // das letzte Mal, dass der Ausgangspin umgeschaltet wurde
unsigned long debounceDelay = 50; // die Debounce-Zeit; erhöhen, wenn der Ausgang flackert
//double whiteTime = 610000; //10 Minuten Spiel hinzufügen // um den Timer nicht zu verwenden, entfernen // um den Timer auszuwählen
//double whiteTime = 310000;//5 Minuten Spiel
double whiteTime = 190000; // 3-Minuten-Spiel
//double whiteTime = 70000;//1 Minute Spielzeit
int whiteMinutes = 0;
int weiße Sekunden = 0;
double whiteLastCheck = millis();
//double blackTime = 610000;//10 Minuten Spiel hinzufügen // um den Timer nicht zu verwenden, entfernen // um den Timer auszuwählen
//double blackTime = 310000;//5 Minuten Spiel
double blackTime = 190000; // 3-Minuten-Spiel
//double blackTime = 70000;//1 Minute Spiel 70000
int blackMinutes = 0;
int blackSeconds = 0;
double blackLastCheck = millis();
bool isWhiteTurn = true;
bool gameOver = false;
int countDown =0; //wird für den anfänglichen Start-Countdown verwendet
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 weißer Tastenzustand = 0;
//int blackButtonState = 0;
}
void loop() {
int reading = digitalRead(buttonPin);
Serial.println(ledState);
wenn (Lesen != letzter Tastenzustand) {
lastDebounceTime = millis();)
wenn ((millis() - letzteDebounceZeit) > DebounceVerzögerung) {
// Was auch immer der Messwert ist, er ist schon länger dort.
// als die Debounce-Verzögerung, also nimm es als den tatsächlichen aktuellen Zustand:
}// Setze die LED:
digitalWrite(ledPin, ledState);
wenn (ledState == 1) {
StartWhiteTurn ();
Serial.println("Weiß");
UpdateWhiteTime();
} else if(ledState==0){
StartBlackTurn ();
Serial.println("Schwarz");
UpdateBlackTime();
}
lastButtonState = Lesen;
)
void UpdateWhiteTime() {
lcd.setCursor(10,0);
lcd.print("Weiß");
lcd.setCursor(12, 1);
Serial.println("Weiß");
whiteTime -= ((millis() - whiteLastCheck));
whiteLastCheck = millis();
wenn (countDown ==0) {
lcd.clear();
lcd.setCursor(2,1);
lcd.print("Count Down");
für (int i = 9; i > 0; i--){
lcd.setCursor(13,1);
lcd.print(i);
delay(1000);
}
countDown = 1;
lcd.clear();
}
wenn (whiteTime <= 0) {
gameOver = true;
lcd.print("VERLIEREN");
wenn (buzzerOff < 1) {
Tone (Buzzer, 400);
delay(500);
NoTone(Buzzer);
delay(2000);}
buzzerOff=1;
return;
}
whiteMinutes = floor(whiteTime / 60000);
whiteSeconds = floor(whiteTime / 1000) - whiteMinutes60;
lcd.print(whiteMinutes);
lcd.print(":");
wenn (weiße Sekunden < 10) {
lcd.print(0);
)
lcd.print(whiteSeconds);
}// Ende von printWait
void UpdateBlackTime() {
lcd.setCursor(0,0);
lcd.print("Schwarz");
lcd.setCursor(0, 1);
Serial.println("Schwarz");
blackTime -= ((millis() - blackLastCheck));
blackLastCheck = millis();
wenn (blackTime <= 0) {
gameOver = true;
lcd.print("VERLIEREN");
wenn (buzzerOff < 1) {
Ton (Buzzer, 500);
Verzögerung(500);
NoTone(Buzzer);
delay(2000);}
BuzzerOff=1;
Rückkehr;
)
blackMinutes = floor(blackTime / 60000);
blackSeconds = floor(blackTime / 1000) - blackMinutes60;
lcd.print(blackMinutes);
lcd.print(":");
wenn (schwarze Sekunden < 10) {
lcd.print(0);
}
lcd.print(blackSeconds);
}// Ende von printWait
void StartWhiteTurn () {
wenn (es der weiße Zug ist) {
return;
}
isWhiteTurn = true;
whiteLastCheck = millis();
} // Ende StartWhiteTurn
void StartBlackTurn () {
wenn (!isWhiteTurn) {
return;
}
isWhiteTurn = false;
blackLastCheck = millis();
} // Ende StartBlackTurn
Druckeinstellungen
Drucker-Marke:
Creality
Drucker:
CR-10S
Flöße:
Nein.
Unterstützt:
Nein.
Auflösung:
300
Füllung:
15
태그
모델 소스
