본문 바로가기

메이커 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/

 

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩