요약
체스 시계는 다음에 바탕을 두고 있습니다:
https://www.instructables.com/How-to-Make-a-Chess-Clock-With-Arduino/
심아오 핑토코레이아
인스트رك터블은 잘 쓰여져 있고, 성공적인 프로젝트를 위해 필요한 모든 정보를 포함하고 있습니다.
시계는 제 2개의 배터리 홀더에 들어있는 충전식 배터리에 의해 구동됩니다.
저는 프로그램의 시작 부분에 카운트다운 시계를 추가했고, 선수가 패면 이상 소리가 나는 알람을 추가했습니다. 버서는 핀 3에 연결되어 있습니다.
또한, 재생 시간을 변경할 수 있는 프로그램의 절을 추가했습니다. 1분, 3분, 5분, 10분 게임입니다.
배선을 더 쉽게 할 수 있도록, 저는 두 개의 작은 보드를 만들었습니다. 하나는 전원용이고 다른 하나는 지상용입니다. 이를 통해 전선을 메인 아두이노 보드가 아닌 작은 보드에 연결할 수 있습니다.
스위치가 계획대로 작동하지 않습니다. 시계를 완전히 끄지 못합니다. 적당한 스위치로 설계할 것입니다. 시계를 시작하려면 전원 공급 장치를 연결해야 합니다.
코드는 다음과 같습니다:
포함하세요.
LiquidCrystal LCD(7, 8, 9, 10, 11, 12);
const int buttonPin = 2; // 푸시버튼 핀의 번호
const int ledPin = 13; // LED 핀의 번호
// 변수들이 변할 거야:
인트 리드스테이트 = 하이; // 출력 핀의 현재 상태
인트 버튼 스테이트; // 입력 핀에서 받은 현재 읽기값
인트 라스트 버튼 스테이트 = 로우; // 입력 핀에서 받은 이전 읽기値
언사인드 롱 라스트 데본치 타임 = 0; // 출력 핀이 토글된 마지막 시간
언더사인드 롱 데บ운치 딜레이 = 50; // 데브운치 시간; 출력이 깜빡이면 증가시키세요.
//double whiteTime = 610000; //10분 게임 추가 // 타이머를 사용하지 않으려면, 선택한 타이머를 제거하세요.
//double whiteTime = 310000; // 5분 게임
더블 화이트 타임 = 190000; // 3분 게임
//double whiteTime = 70000; // 1분 게임
인트 화이트 미너트 = 0;
int whiteSeconds = 0;
두 번째 화이트 체크 = millis();
// 두 번의 블랙타임 = 610000; // 10분 게임 추가 // 타이머를 사용하지 않으려면, 타이머를 선택하려면 이 줄을 제거하세요.
// 두 번의 블랙타임 = 310000; // 5분 게임
더블 블랙 타임 = 190000; // 3분 게임
//double blackTime = 70000; //1분 게임 70000
인트 블랙 미니츠 = 0;
인트 블랙 세컨드 = 0;
더블 블랙 마지막 체크 = 밀리초();
부울형 변수 isWhiteTurn은 true입니다.
게임이 끝났는지 여부를 확인하는 변수인 gameOver의 값은 false입니다.
인트 카운트다운 = 0; // 초기 시작 카운트다운에 사용됩니다.
인트 버저 = 3;
buzzerOff = 0;
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.setCursor(0, 0);
버튼 핀을 입력으로 설정하세요.
pinMode(ledPin, OUTPUT);
업데이트 화이트 타임();
업데이트 블랙타임();
//int 화이트 버튼 상태 = 0;
//int 블랙 버튼 상태 = 0;
}
void loop() {
인트 리딩 = digitalRead(버튼 핀);
시리얼.println(ledState);
만일 (reading != lastButtonState)이면,
마지막 디바운스 타임 = 밀리초();그것은...
만일 ((millis() - lastDebounceTime) > debounceDelay이면,
// 읽기 수치가 어떤지 간에, 그것은 오래전부터 거기에 있었을 거예요.
// 데บ운치 지연보다 빠르기에 이것을 실제 현재 상태로 받아들이세요:
자동 번역이 잘 되지 않았을 경우에는 원문을 확인해 주십시오.
digitalWrite(ledPin, ledState);
만약 ledState가 1이라면,
스타트 화이트 턴 ();
시리얼.println("화이트");
업데이트 화이트 타임();
그렇지 않다면, if(ledState == 0)을 실행하세요.
스타트 블랙 턴 ();
서리얼.println("블랙");
업데이트 블랙타임();
}
마지막 버튼 상태 = 읽음;
그것은...
void UpdateWhiteTime() {
lcd.setCursor(10,0);
lcd.print("화이트");
lcd.setCursor(12, 1);
시리얼.println("화이트");
whiteTime -= ((millis() - whiteLastCheck));
화이트LastCheck = millis();
만약 (카운트다운 == 0)면,
lcd.clear();
lcd.setCursor(2,1);
lcd.print("카운트 다운");
for (int i = 9; i > 0; i--){
lcd.setCursor(13,1);
lcd.print(i);
delay(1000);
}
카운트다운 = 1;
lcd.clear();
}
만약 (화이트타임이 0보다 작거나 같다면) {
게임 오버 = 진실;
lcd.print("패배");
만약 buzzerOff가 1보다 작다면,
토너(buzzer, 400);
지연(500);
노톤(buzzer);
delay(2000);}
버저 오프=1;
돌아가세요;
}
whiteMinutes = floor(whiteTime / 60000);
화이트 세컨드 = 화이트 타임 / 1000의 환산값 - 화이트 미너트60;
lcd.print(whiteMinutes);
lcd.print(":");
만일 (화이트 세컨드가 10보다 작다면) {
lcd.print(0);
그것은...
lcd.print(whiteSeconds);
다음은 프로그래밍 언어인 C#의 예입니다.
void UpdateBlackTime() {
lcd.setCursor(0,0);
lcd.print(" 검은색");
lcd.setCursor(0, 1);
Serial.println("검은색");
블랙타임 =- ((millis() - 블랙 마지막 체크 시간));
blackLastCheck = millis();
만약 (blackTime가 0보다 작거나 같다면) {
gameOver = true;
lcd.print("패배");
만일 buzzerOff가 1보다 작다면,
토너(buzzer, 500);
지연(500);
노톤(buzzer);
지연(2000);}
버저 오프=1;
돌아가세요;
그것은...
blackMinutes = floor(blackTime / 60000);
blackSeconds = floor(blackTime / 1000) - blackMinutes60;
lcd.print(blackMinutes);
lcd.print(":");
만약 (blackSeconds가 10보다 작다면) {
lcd.print(0);
}
lcd.print(blackSeconds);
}// printWait 끝
void StartWhiteTurn () {
만일 (isWhiteTurn)이라면,
돌아가세요;
}
화이트 턴 = 트루;
화이트LastCheck = millis();
} // StartWhiteTurn 끝
void StartBlackTurn () {
만약 (!isWhiteTurn)이라면,
돌아가세요;
}
화이트 턴 = false;
블랙 라스트 체크 = 밀리초();
} // StartBlackTurn 끝
인쇄 설정
프린터 브랜드:
크리에이리티
프린터:
CR-10S
래프트들:
아니에요.
지원합니다:
아니에요.
해상도:
300
채우기:
15
Tags
Source du modèle
