#include <U8g2lib.h>
// 定义OLED的分辨率和构造函数,请根据你的OLED型号和连接方式修改
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
#define OLED_RESET 4 // OLED复位引脚,如果不使用则设为-1
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, OLED_RESET, U8X8_PIN_NONE); // 初始化U8G2对象
// 定义按键引脚
#define BUTTON_PIN_1 2
#define BUTTON_PIN_2 3
// 倒计时变量
unsigned long startTime = 0;
// 显示倒计时和判断按键2的函数
void displayCountdown() {
// 如果startTime被设置了(即倒计时已开始)
if (startTime > 0) {
unsigned long currentTime = millis();
if (currentTime < startTime) {
// 计算剩余时间(分钟)
unsigned int remainingMinutes = (startTime - currentTime) / 1000;
// 清除屏幕并显示倒计时
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB14_tr);
u8g2.drawStr(0, 20, "C: ");
u8g2.setCursor(9 * 8, 20); // 'Countdown: ' 占用9个字符宽度
u8g2.print(remainingMinutes);
u8g2.print(" min");
u8g2.sendBuffer();
} else {
// 如果倒计时结束,则清除startTime和显示消息
startTime = 0;
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB14_tr);
u8g2.drawStr(0, 20, "Time's up!");
u8g2.sendBuffer();
}
}
// 检查按键2是否被按下
if (digitalRead(BUTTON_PIN_2) == LOW) {
delay(10); // 消抖
if (digitalRead(BUTTON_PIN_2) == LOW) {
// 清除倒计时
startTime = 0;
// 清空屏幕显示(可选)
u8g2.clearBuffer();
u8g2.sendBuffer();
}
}
}
void setup() {
pinMode(BUTTON_PIN_1, INPUT_PULLUP);
pinMode(BUTTON_PIN_2, INPUT_PULLUP);
u8g2.begin(); // 初始化OLED
}
void loop() {
if (digitalRead(BUTTON_PIN_1) == LOW) {
delay(10); // 消抖
if (digitalRead(BUTTON_PIN_1) == LOW) {
// 设置倒计时为30分钟后
startTime = millis() + 1800000;
}
}
// 显示倒计时和检查按键2
displayCountdown();
}