본문 바로가기

메이커 Maker

하루의 남은 시간을 초로 보요주는 기계 Display

반응형

 

 

Q: 현재 시간을 입력 받아서 밤 12시 00분 00초까지 하루의 남은 시간을 초로 나타내어 1초씩 줄어드는 숫자를 OLED에 표시하는 아두이노 코드를 작성해 줘. 

 

아래는 요청하신 아두이노 코드입니다. 이 코드는 현재 시간을 입력받아 하루의 남은 시간을 계산한 뒤, OLED 디스플레이에 1초마다 업데이트하여 표시합니다. 코드는 RTClib 라이브러리를 사용하여 RTC(Real-Time Clock)를 다루며, OLED 디스플레이는 Adafruit_SSD1306 라이브러리를 활용합니다.

 

사전 준비

  1. Adafruit_GFX.h와 Adafruit_SSD1306.h를 설치합니다.
  2. RTClib.h를 설치하여 RTC 모듈과 통합합니다.
  3. I2C OLED 디스플레이와 RTC 모듈을 아두이노에 연결합니다. 

 

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <RTClib.h>

#define SCREEN_WIDTH 128  // OLED 가로 픽셀 크기
#define SCREEN_HEIGHT 64  // OLED 세로 픽셀 크기
#define OLED_RESET -1     // OLED 리셋 핀 (아두이노와 연결 안 함)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);

RTC_DS3231 rtc; // RTC 모듈 객체 생성

void setup() {
  // Serial 시작
  Serial.begin(9600);

  // OLED 초기화
  if (!display.begin(SSD1306_I2C_ADDRESS, 0x3C)) {
    Serial.println("OLED 초기화 실패");
    for (;;);
  }
  display.clearDisplay();
  display.setTextSize(2);
  display.setTextColor(WHITE);

  // RTC 초기화
  if (!rtc.begin()) {
    Serial.println("RTC 모듈을 찾을 수 없습니다.");
    for (;;);
  }

  // RTC 시간 설정 (처음 실행 시에만 활성화하세요)
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}

void loop() {
  // 현재 시간 가져오기
  DateTime now = rtc.now();

  // 하루의 남은 시간 계산
  int hoursLeft = 23 - now.hour();
  int minutesLeft = 59 - now.minute();
  int secondsLeft = 59 - now.second();
  long totalSecondsLeft = hoursLeft * 3600 + minutesLeft * 60 + secondsLeft;

  // OLED에 출력
  display.clearDisplay();
  display.setCursor(0, 0);
  display.print("Time Left:");
  display.setCursor(0, 30);
  display.print(totalSecondsLeft);
  display.print(" s");
  display.display();

  // 1초 대기
  delay(1000);
}

 

코드 설명

 

  1. RTC 모듈 초기화 및 시간 설정: rtc.adjust()를 사용하여 RTC의 시간을 설정합니다. 이 코드는 최초 실행 후 주석 처리하세요.
  2. 남은 시간 계산: 현재 시간을 기준으로 자정까지 남은 시간을 계산하여 초 단위로 변환합니다.
  3. OLED 표시: 계산된 남은 시간을 OLED에 출력하며, 1초마다 업데이트합니다.
  4. 1초 지연 delay(1000)를 통해 1초마다 루프를 실행합니다.

 

하드웨어 연결

 

RTC DS3231

  • SDA -> 아두이노 A4 (Uno 기준)
  • SCL -> 아두이노 A5

OLED 디스플레이 (I2C)

  • SDA -> 아두이노 A4
  • SCL -> 아두이노 A5  

 

 

내용과 사진은 다릅니다

사진 출처: https://docs.arduino.cc/tutorials/mkr-zero/mkr-zero-rtc-clock/

 

 

반응형

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