본문 바로가기

ESP32

시간 간격을 설정하고 그 시간이 지났는지 확인하는 코드

반응형

 

알고 보니 시간이 증가하지 않는다. 말인 즉슨 RTC가 고장이 났다는 말이다.

처음부터 다시한다. 주옥같다!

 

처음 시간을 설정한 후, 경과 시간(예: 1시간 40분)이 지났는지 확인하는 코드는 DS1302에서 현재 시간을 읽고, 설정한 시간과의 차이를 계산하여 구현할 수 있습니다. 아래는 그에 맞는 코드를 제안합니다. 

 

맨 위의 라이브러리를 확인하세요. 개발 환경이 다를 수 있습니다.

 

 

#include <ThreeWire.h>
#include <RtcDS1302.h>

// DS1302 핀 설정
#define RST_PIN 4
#define DAT_PIN 5
#define CLK_PIN 6

ThreeWire myWire(DAT_PIN, CLK_PIN, RST_PIN);
RtcDS1302<ThreeWire> Rtc(myWire);

RtcDateTime startTime;
const uint32_t targetInterval = 1 * 60 * 60 + 40 * 60; // 1시간 40분 (6000초)

void setup() {
  Serial.begin(9600);

  Rtc.Begin();
  
  if (!Rtc.IsDateTimeValid()) {
    Serial.println("RTC 시간 초기화 오류!");
    RtcDateTime compiled = RtcDateTime(2024, 11, 24, 14, 30, 0); // 초기화 시간
    Rtc.SetDateTime(compiled);
  }

  Rtc.SetIsRunning(true);

  startTime = Rtc.GetDateTime();
  Serial.println("기준 시간이 설정되었습니다:");
  printDateTime(startTime);
}

void loop() {
  RtcDateTime now = Rtc.GetDateTime();

  // 디버깅용 출력
  Serial.print("기준 시간: ");
  printDateTime(startTime);
  Serial.print("현재 시간: ");
  printDateTime(now);

  uint32_t elapsedTime = now.TotalSeconds() - startTime.TotalSeconds();

  Serial.print("경과 시간 (초): ");
  Serial.println(elapsedTime);

  if (elapsedTime >= targetInterval) {
    Serial.println("1시간 40분이 경과했습니다!");
  } else {
    uint32_t remainingTime = targetInterval - elapsedTime;
    Serial.print("남은 시간 (초): ");
    Serial.println(remainingTime);
  }

  delay(1000);
}

void printDateTime(const RtcDateTime& dt) {
  char buffer[20];
  snprintf_P(buffer,
             sizeof(buffer),
             PSTR("%04u/%02u/%02u %02u:%02u:%02u"),
             dt.Year(),
             dt.Month(),
             dt.Day(),
             dt.Hour(),
             dt.Minute(),
             dt.Second());
  Serial.println(buffer);
}

 

 

결과는 아래와 같습니다.

 

초기 설정

기준 시간이 설정되었습니다:
2024/11/24 14:30:00

 

매초 출력 메시지

기준 시간: 2024/11/24 14:30:00
현재 시간: 2024/11/24 14:30:01
경과 시간 (초): 1
남은 시간 (초): 5999

 

목표 시간 도달

기준 시간: 2024/11/24 14:30:00
현재 시간: 2024/11/24 16:10:00
경과 시간 (초): 6000
1시간 40분이 경과했습니다!

 

 

 

 

반응형

더욱 좋은 정보를 제공하겠습니다.~ ^^