질문게시판 > 아두이노 디지털 시계

TODAY9,966 TOTAL3,602,464
사이트 이용안내
Login▼/회원가입
최신글보기 질문게시판 기술자료 동영상강좌

아두이노 센서 ATMEGA128 PWM LED 초음파 AVR 블루투스 LCD UART 모터 적외선


BASIC4MCU | 질문게시판 | 아두이노 디지털 시계

페이지 정보

작성자 1233 작성일2023-06-11 02:03 조회1,202회 댓글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에서도 시간이 똑같이 느리게 갑니다. 어느 부분이 문제이고 어떻게 해결할 수 있는지 알고 싶습니다.(사진도 첨부했습니다)

  • BASIC4MCU 작성글 SNS에 공유하기
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기

댓글 1

조회수 1,202

master님의 댓글

master 작성일

시뮬레이션에서 실제 구동처럼 시간을 맞추지 못합니다.