반응형
Q: 현재 시간을 입력 받아서 밤 12시 00분 00초까지 하루의 남은 시간을 초로 나타내어 1초씩 줄어드는 숫자를 OLED에 표시하는 아두이노 코드를 작성해 줘.
아래는 요청하신 아두이노 코드입니다. 이 코드는 현재 시간을 입력받아 하루의 남은 시간을 계산한 뒤, OLED 디스플레이에 1초마다 업데이트하여 표시합니다. 코드는 RTClib 라이브러리를 사용하여 RTC(Real-Time Clock)를 다루며, OLED 디스플레이는 Adafruit_SSD1306 라이브러리를 활용합니다.
사전 준비
- Adafruit_GFX.h와 Adafruit_SSD1306.h를 설치합니다.
- RTClib.h를 설치하여 RTC 모듈과 통합합니다.
- 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);
}
코드 설명
- RTC 모듈 초기화 및 시간 설정: rtc.adjust()를 사용하여 RTC의 시간을 설정합니다. 이 코드는 최초 실행 후 주석 처리하세요.
- 남은 시간 계산: 현재 시간을 기준으로 자정까지 남은 시간을 계산하여 초 단위로 변환합니다.
- OLED 표시: 계산된 남은 시간을 OLED에 출력하며, 1초마다 업데이트합니다.
- 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/
반응형
'메이커 Maker' 카테고리의 다른 글
PCB Design Arduino Training Kit (0) | 2025.01.06 |
---|---|
영문과 한글 교재로 만들어야 합니다. 어떤 언어로 된 책을 먼저 써야하는 지 조언 (1) | 2024.12.30 |
ESP32 MPU6050 Gesture Control with Audio DFPlayer Mini Integration (1) | 2024.12.20 |
아두이노 나노 33 BLE로 나만의 전자 주사위 만들기 (1) | 2024.12.11 |
지적재산 디자인권 심사기준 (1) | 2024.12.11 |
아두이노 태양 추적기 Arduino Solar Tracker (3) | 2024.12.06 |
2축 태양광 추적기 아두이노 프로젝트 (2) | 2024.12.05 |
태양광 패널 추적 시스템 회로도 (1) | 2024.12.04 |
더욱 좋은 정보를 제공하겠습니다.~ ^^