#include <U8g2lib.h>
#include <Wire.h> // 如果你使用ESP32或ESP8266等,可能需要包含这个库
// 请根据你的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 // 按键1连接的引脚
#define BUTTON_PIN_2 3 // 按键2连接的引脚
unsigned long startTime = 0; // 倒计时开始时间(毫秒)
void setup() {
pinMode(BUTTON_PIN_1, INPUT_PULLUP);
pinMode(BUTTON_PIN_2, INPUT_PULLUP);
u8g2.begin(); // 初始化OLED
u8g2.clearBuffer(); // 清除缓冲区
u8g2.setFont(u8g2_font_ncenB14_tr); // 选择字体
u8g2.drawStr(0, 20, "Ready"); // 在OLED上显示"Ready"
u8g2.sendBuffer(); // 发送缓冲区到OLED
Serial.begin(9600);
}
void loop() {
if (digitalRead(BUTTON_PIN_1) == LOW) { // 如果按键1被按下
delay(50); // 消除抖动
if (digitalRead(BUTTON_PIN_1) == LOW) { // 再次检查按键状态
startTime = millis() + 1800000; // 设置30分钟后的时间(毫秒)
Serial.println(millis());
Serial.println(startTime);
}
}
if (digitalRead(BUTTON_PIN_2) == LOW) { // 如果按键2被按下
delay(50); // 消除抖动
if (digitalRead(BUTTON_PIN_2) == LOW) { // 再次检查按键状态
startTime = 0; // 清除倒计时
}
}
if (startTime > 0) { // 如果已经设置了倒计时
unsigned long currentTime = millis();
//Serial.println(currentTime);
if (currentTime < startTime) { // 如果还没有到达倒计时结束时间
unsigned int remainingMinutes = (startTime - currentTime) / 60000; // 计算剩余分钟数
Serial.println(startTime - currentTime);
u8g2.clearBuffer(); // 清除缓冲区
u8g2.setCursor(0, 20); // 设置光标位置
u8g2.print("C: ");
u8g2.print(remainingMinutes);
u8g2.print(" min"); // 显示倒计时时间
u8g2.sendBuffer(); // 发送缓冲区到OLED
} else { // 如果倒计时已经结束
startTime = 0; // 清除倒计时
u8g2.clearBuffer(); // 清除缓冲区
u8g2.drawStr(0, 20, "Time's up!"); // 显示"Time's up!"
u8g2.sendBuffer(); // 发送缓冲区到OLED
}
}
}