BASIC4MCU | 질문게시판 | 아두이노 디지털 시계
페이지 정보
작성자 1233 작성일2023-06-11 02:03 조회426회 댓글1건본문
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C MyLCD(0x27, 16, 2);
const int buttonPin = 13;
int buttonState = HIGH;
int lastButtonState = HIGH;
unsigned long buttonPressStartTime = 0;
bool modeChanged = false;
bool mode = false;
unsigned long pausedTime = 0;
void setup() {
MyLCD.init();
MyLCD.backlight();
pinMode(buttonPin, INPUT_PULLUP);
}
void loop() {
unsigned long currentTime = millis();
buttonState = digitalRead(buttonPin);
if (buttonState != lastButtonState) {
if (buttonState == LOW) {
buttonPressStartTime = currentTime;
} else {
unsigned long buttonPressDuration = currentTime - buttonPressStartTime;
if (buttonPressDuration >= 3000) {
mode = !mode;
modeChanged = true;
}
}
lastButtonState = buttonState;
}
if (modeChanged) {
if (mode) {
// 모드가 변경되었을 때 실행할 동작
// 예: 화면에 모드 변경 메시지 출력
MyLCD.setCursor(0, 0);
MyLCD.print("Mode changed!");
pausedTime = currentTime; // 시간 멈추는 모드 진입 시간 기록
} else {
// 모드가 변경되었을 때 실행할 다른 동작
// 예: 화면 초기화
MyLCD.clear();
pausedTime = 0; // 시간 멈추는 모드 해제 시 초기화
}
modeChanged = false;
}
if (!mode) {
// 시간 표시 모드
unsigned long time = currentTime / 1000;
if (pausedTime > 0) {
time = (pausedTime / 1000); // 시간 멈춤 모드일 경우 현재 시간 대신 멈춘 시간 사용
}
unsigned long sec = time % 60;
unsigned long min = (time / 60) % 60;
unsigned long hour = (time / 3600) % 24;
MyLCD.setCursor(6, 1);
if (min < 10) {
MyLCD.print("0"); // 한 자리 숫자일 경우 0을 출력하여 2자리로 맞춤
}
MyLCD.print(min);
MyLCD.setCursor(8, 1);
MyLCD.print("M");
MyLCD.setCursor(2, 1);
if (hour < 10) {
MyLCD.print("0"); // 한 자리 숫자일 경우 0을 출력하여 2자리로 맞춤
}
MyLCD.print(hour);
MyLCD.setCursor(4, 1);
MyLCD.print("H");
MyLCD.setCursor(10, 1);
if (sec < 10) {
MyLCD.print("0"); // 한 자리 숫자일 경우 0을 출력하여 2자리로 맞춤
}
MyLCD.print(sec);
MyLCD.setCursor(12, 1);
MyLCD.print("S");
}
}
안녕하세요 아두이노 관련 질문 드리려고 합니다. 위 코드는 디지털 시계를 만들고 버튼을 설치해서 3초 이상 누르면 시간이 일시정지하는 코드입니다 이렇게 코드를 짰는데 팅커캐드에서 실행했을 때 시뮬레이터 시간이 실제 시간보다 느리게 가고 lcd에서도 시간이 똑같이 느리게 갑니다. 어느 부분이 문제이고 어떻게 해결할 수 있는지 알고 싶습니다.(사진도 첨부했습니다)
댓글 1
조회수 426master님의 댓글
master 작성일시뮬레이션에서 실제 구동처럼 시간을 맞추지 못합니다.