Resumé
La pendule d'échecs est basée sur :
https://www.instructables.com/How-to-Make-a-Chess-Clock-With-Arduino/
Par Simaopintocorreia.
Instructable est bien écrit et contient toutes les informations nécessaires pour un projet réussi.
L'horloge est alimentée par des batteries rechargeables tenues par mon support de 2 batteries.
J'ai ajouté une horloge de compte à rebours au début du programme et une alarme qui sonne lorsqu'un joueur perd. Busser est connecté à la broche 3.
J'ai également ajouté une section au programme qui permet de modifier le temps de jeu : des jeux d'une minute, de trois minutes, de cinq minutes et de dix minutes.
Pour faciliter le câblage, j'ai fabriqué deux petites cartes - l'une pour l'alimentation et l'autre pour la masse. Cela permet aux fils d'être branchés sur de petites cartes plutôt que sur la carte principale de l'Arduino.
L'interrupteur ne fonctionne pas comme prévu - il n'arrête pas complètement l'horloge. Je vais le concevoir avec un interrupteur approprié. Brancher l'alimentation pour démarrer l'horloge.
Le code est le suivant :
inclure
LCD à cristaux liquides (7, 8, 9, 10, 11, 12) ;
const int buttonPin = 2; // le numéro de la broche du bouton-poussoir.
const int ledPin = 13 ; // le numéro de la broche LED.
// Les variables vont changer :
int ledState = HIGH ; // l'état actuel de la broche de sortie.
int buttonState ; // la lecture actuelle de la broche d'entrée.
int lastButtonState = LOW; // la lecture précédente de la broche d'entrée.
un long non signé lastDebounceTime = 0 ; // la dernière fois que la broche de sortie a été commutée.
Un long entier non signé debounceDelay = 50 ; // le temps de débounce ; augmentez-le si la sortie clignote.
//double whiteTime = 610000 ; // Jeu de 10 minutes. Ajoutez // pour ne pas utiliser le minuteur, supprimez // pour sélectionner le minuteur.
//double whiteTime = 310000 ; // jeu de 5 minutes
double whiteTime = 190000 ; // Jeu de 3 minutes.
//double whiteTime = 70000 ;//1 minute de jeu
int whiteMinutes = 0 ;
int whiteSeconds = 0 ;
double whiteLastCheck = millis();
//double blackTime = 610000 ; // jeu de 10 minutes ajouté // pour ne pas utiliser le chronomètre, supprimez // pour sélectionner le chronomètre.
//double blackTime = 310000 ;// jeu de 5 minutes
double blackTime = 190000 ; // Jeu de 3 minutes.
//double blackTime = 70000 ;//1 minute de jeu 70000
int blackMinutes = 0 ;
int blackSeconds = 0 ;
double blackLastCheck = millis();
bool isWhiteTurn = true ;
bool gameOver = false ;
int countDown =0; //utilisé pour le compte à rebours de départ initial.
int buzzer = 3 ;
int buzzerOff = 0 ;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
pinMode(buttonPin, INPUT);
pinMode(ledPin, SORTIE);
Mettre à jour WhiteTime();
Mettre à jour BlackTime();
//int whiteButtonState = 0 ;
//int blackButtonState = 0 ;
}
void loop() {
int lecture = digitalRead(buttonPin);
Serial.println(ledState);
si (lecture != état du dernier bouton) {
lastDebounceTime = millis();}
si ((millis() - lastDebounceTime) > debounceDelay) {
// Quelle que soit la lecture actuelle, elle est là depuis plus longtemps.
// plus que le délai de débounce, alors considérez-le comme l'état actuel réel :
}// définissez la LED :
digitalWrite(ledPin, ledState);
si(ledState==1){
StartWhiteTurn ();
Serial.println("Blanc");
Mettre à jour WhiteTime();
} else if(ledState==0){
StartBlackTurn ();
Serial.println("Noir");
Mettre à jour BlackTime();
}
lastButtonState = lecture ;
}
void UpdateWhiteTime() {
lcd.setCursor(10,0);
lcd.print("Blanc");
lcd.setCursor(12, 1);
Serial.println("Blanc");
whiteTime -= ((millis() - whiteLastCheck));
whiteLastCheck = millis();
si (countDown ==0) {
lcd.clear();
lcd.setCursor(2,1);
lcd.print("Compte à rebours");
pour (int i = 9 ; i > 0 ; i--){
lcd.setCursor(13,1);
lcd.print(i);
delay(1000);
}
countDown = 1 ;
lcd.clear();
}
si (whiteTime <= 0) {
gameOver = true ;
lcd.print("PERDRE");
si (buzzerOff<1) {
ton (buzzer, 400);
delay(500);
noTone(buzzer);
delay(2000);}
buzzerOff=1 ;
retour ;
}
whiteMinutes = floor(whiteTime / 60000);
whiteSeconds = floor(whiteTime / 1000) - whiteMinutes60 ;
lcd.print(whiteMinutes);
lcd.print(":");
si (whiteSeconds < 10) {
lcd.print(0);
}
lcd.print(whiteSeconds);
}// fin de printWait
void UpdateBlackTime() {
lcd.setCursor(0,0);
lcd.print(" Noir");
lcd.setCursor(0, 1);
Serial.println("Noir");
blackTime -= ((millis() - blackLastCheck));
blackLastCheck = millis();
si (blackTime <= 0) {
gameOver = true ;
lcd.print("PERDRE");
si (buzzerOff < 1) {
ton (buzzer, 500);
délai(500);
NoTone (buzzer) ;
delay(2000);}
buzzerOff=1 ;
retourner ;
}
blackMinutes = floor(blackTime / 60000);
blackSeconds = solde(blackTime / 1000) - blackMinutes60 ;
lcd.print(blackMinutes);
lcd.print(":");
si (blackSeconds < 10) {
lcd.print(0);
}
lcd.print(blackSeconds);
}// fin de printWait
void StartWhiteTurn () {
si (c'est le tour du joueur blanc) {
retour ;
}
isWhiteTurn = true ;
whiteLastCheck = millis();
} // fin de StartWhiteTurn
void StartBlackTurn () {
si (!isWhiteTurn) {
retour ;
}
isWhiteTurn = false ;
blackLastCheck = millis();
} // fin de StartBlackTurn
Réglages d'impression.
Marque de l'imprimante :
Creality.
Imprimante :
CR-10S.
Radeaux :
Non.
Soutient :
Non.
Résolution :
300
Remplissage :
15
Etiketler
Model Kaynağı
