まとめ
チェスクロックは以下に基づいています。
https://www.instructables.com/How-to-Make-a-Chess-Clock-With-Arduino/
シマ・オピント・コレイアによる。
このInstructableはよく書かれており、成功するために必要なすべての情報が含まれています。
時計は、私の2つのバッテリーホルダーで保持されている充電式バッテリーによって駆動されています。
プログラムの開始時にカウントダウンクロックを追加し、プレイヤーが負けたときに警告音が鳴るようにしました。バッサーはピン3に接続されています。
また、プレイ時間を変更できるプログラムのセクションも追加しました。1分、3分、5分、10分のゲームです。
配線を簡単にするために、私は2つの小さな基板を作りました。1つは電源用、もう1つはグラウンド用です。それにより、配線をメインのArduino基板ではなく、小さな基板に接続することができます。
スイッチが予想通りに機能しない。時計を完全にオフにできない。適切なスイッチで設計し直します。時計を始めるために電源を接続します。
コードは次のとおりです。
含める
LiquidCrystal液晶ディスプレイ(7、8、9、10、11、12);
const int buttonPin = 2; // プッシュボタンのピン番号
const int ledPin = 13; // LEDピンの番号
変数は変更されるでしょう:
int ledState = HIGH; // 出力ピンの現在の状態
int buttonState; // 入力ピンからの現在の読み取り値
int lastButtonState = LOW; // 入力ピンからの前回の読み取り値
未署名のlong型のlastDebounceTime = 0; これは、出力ピンが最後にトグルされた時刻です。
未署名のlong型のデバウンスデリレイ = 50; これはデバウンス時間です。出力が点滅する場合は、この値を増やしてください。
//double whiteTime = 310000;//5分間のゲーム
ダブルホワイトタイム = 190000; // 3分のゲーム
//double whiteTime = 70000;//1分のゲーム
int whiteMinutes = 0;
int whiteSeconds = 0;
ダブルホワイトLastCheck = millis();
・double blackTime = 610000; ・10分のゲームを追加 ・タイマーを使用しない場合は、コメントアウトする ・タイマーを選択する場合は、コメントアウトを解除する
//ダブルブラックタイム = 310000; 5分のゲーム
ダブルブラックタイム = 190000; // 3分のゲーム
//ダブルブラックタイム = 70000; //1分のゲームは70000です。
int blackMinutes = 0;
int blackSeconds = 0;
ダブルブラックの最後のチェック = millis();
白のターンかどうかを判断するには、bool型の変数「isWhiteTurn」を使用します。この変数の初期値はtrueです。
ゲームオーバーかどうかを判断する変数gameOverの値はfalseです。
カウントダウン int countDown =0; //初期の開始カウントダウンに使用
ブザーの番号は3です。
ブザーオフは0です。
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
ピンモード(buttonPin, INPUT);
ピンモード(ledPin, OUTPUT);
ウィートタイムを更新する();
更新BlackTime();
//int whiteButtonState = 0;
//int blackButtonState = 0;
}
void loop() {
読み取り値 = digitalRead(ボタンピン);
シリアル.println(ledState);
もし(reading が lastButtonState と異なっている場合):
lastDebounceTime = millis();』
もし((millis() - lastDebounceTime) > debounceDelay)ならば、
・読み値がどこにあっても、それは長い間そこにあったのです。
デブアンスの遅延よりも短いので、それを実際の現在の状態と見なしてください。
//////////////////////////////////////////////////////
digitalWrite(ledPin, ledState);
もしledStateが1ならば、
スタートホワイトターン();
シリアル.println("ホワイト");
ウィートタイムを更新する();
そうでない場合、つまりledStateが0の場合は:
スタート・ブラック・ターン();
シリアル.println("黒");
更新BlackTime();
}
lastButtonState = 読み込み中;
』
void UpdateWhiteTime() {
lcd.setCursor(10,0);
lcd.print("白");
lcd.setCursor(12, 1);
シリアル.println("ホワイト");
白時間 = = ((millis() - 白最後のチェック)) で減らす
白の最後のチェック = millis();
もしカウントダウンが0ならば、
lcd.clear();
lcd.setCursor(2,1);
lcd.print("カウントダウン");
(int i = 9; i > 0; i --) {
lcd.setCursor(13,1);
lcd.print(i);
delay(1000);
}
カウントダウン = 1;
lcd.clear();
}
もし(whiteTimeが0以下なら) {
ゲームオーバー = 真;
lcd.print("敗北");
もしブザーオフが1より小さいなら、
トーン(ブザー、400);
delay(500);
ノートン(ブザー);
delay(2000);}
ブザーオフ=1;
戻る;
}
白い時間 = 白い時間 / 60000 の丸めた値です。
白秒 = 白時間 / 1000 の小数部を切り上げたもの - 白分60;
lcd.print(whiteMinutes);
lcd.print(":");
もし(白い秒数が10未満なら) {
lcd.print(0);
』
lcd.print(whiteSeconds);
その後、printWait関数を終了します。
void UpdateBlackTime() {
lcd.setCursor(0,0);
lcd.print("黒");
lcd.setCursor(0, 1);
Serial.println("黒");
黒時間 -= ((millis() - 黒最後のチェック時間));
黒い最後のチェック = millis();
もし(blackTime <= 0)ならば、
ゲームオーバー = 真;
lcd.print("敗北");
もしブザーオフが1より小さいなら、
トーン(ブザー、500);
デリレイ(500);
ノートン(ブザー);
delay(2000);}
ブザーオフ=1;
戻る;
』
黒の時間 = 黒の時間 / 60000 の分数部分を切り捨てたもの。
黒秒 = 黒時間 / 1000 の小数点以下の値 - 黒分60;
lcd.print(blackMinutes);
lcd.print(":");
もし(blackSecondsが10未満なら) {
lcd.print(0);
}
lcd.print(blackSeconds);
}// end printWait
void StartWhiteTurn () {
もし(isWhiteTurn)ならば、
戻る;
}
isWhiteTurn = true;
白の最後のチェック = millis();
} // StartWhiteTurnの終わり
void StartBlackTurn () {
もし(!isWhiteTurn)が真でない場合、
戻る;
}
isWhiteTurn = false;
黒の最後のチェック = millis();
} // StartBlackTurnの終わり
印刷設定
プリンターのブランド:
クリエーリティ
プリンター:
CR-10S
ラフト:
いや
サポート:
いや
解決策:
300
充填:
15
タグ
モデルソース
