#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 honggan_Pin 2
#define shajun_Pin 3
#define huli_Pin 4
unsigned long startTime = 0; //一键杀菌时间
PROGMEM const uint8_t logo[] {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0x7F, 0xE0, 0xFF, 0x0F, 0xFE, 0xC0, 0x00, 0x03, 0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0xFF, 0x7F, 0xE0, 0xFF, 0x1F, 0xFE, 0xC6, 0xC0, 0xE7, 0x1F, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xC0, 0x00, 0x60, 0x10, 0x18, 0x30, 0xDC, 0xC0, 0xE7, 0x1F, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0x7F, 0x60, 0x10, 0x18, 0x30, 0xD8, 0x00, 0x01, 0x03, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xC0, 0x00, 0x60, 0x38, 0x1C, 0xFC, 0xC0, 0x00, 0xE1, 0x1F, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0xFF, 0xFF, 0xE0, 0xFF, 0x1F, 0xFE, 0xC6, 0x00, 0xE7, 0x1F, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0x3F, 0xFE, 0x60, 0x30, 0x18, 0x30, 0xCE, 0x80, 0x07, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFC, 0x1F, 0x60, 0x10, 0x18, 0xB4, 0xD8, 0xC0, 0x33, 0x10, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0xFF, 0x7F, 0x60, 0x30, 0x18, 0xF6, 0xC0, 0x00, 0x61, 0x18, 0xFC, 0xFF, 0xFF, 0xFF, 0x7F, 0x00, 0x03, 0x60, 0xE0, 0xFF, 0x0F, 0xB6, 0xC0, 0x00, 0xC3, 0x0C, 0xF8, 0xFF, 0xFF, 0xFF, 0x3F, 0x00, 0xFF, 0x7F, 0xC0, 0xFF, 0x0F, 0xB6, 0xFE, 0x01, 0x83, 0x07, 0xF0, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0x03, 0x60, 0x00, 0x10, 0x00, 0xB6, 0xFC, 0x01, 0x83, 0x03, 0xE0, 0xFF, 0xFF, 0xFF, 0x0F, 0x00, 0xFF, 0x7F, 0x00, 0x30, 0x00, 0xB6, 0xC0, 0x00, 0x83, 0x07, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0x00, 0xFF, 0x7F, 0x00, 0x30, 0x00, 0xB6, 0xC0, 0x80, 0xC1, 0x0C, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0x00, 0x03, 0x20, 0x00, 0x30, 0x00, 0xB4, 0xC0, 0x80, 0x71, 0x18, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0x00, 0x03, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFC, 0xFF, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0xFF, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const uint8_t logo_honggan[] {
0x00, 0x08, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x80, 0xC3, 0x00, 0x00, 0x80, 0xC1, 0x00, 0x00, 0xC0, 0x80, 0x01, 0x00, 0xC0, 0x80, 0x01, 0x00, 0x60, 0x00, 0x01, 0x00, 0x30, 0x00, 0x00, 0x00, 0x30, 0x00, 0x18, 0x00, 0x18, 0x00, 0xFE, 0x00, 0x18, 0x07, 0xC3, 0x01, 0x0C, 0xFE, 0x01, 0x01, 0x0C, 0xF8, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x7C, 0x00, 0x0C, 0x03, 0xEF, 0x01, 0x0C, 0xCE, 0x83, 0x01, 0x18, 0xFC, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 0xC0, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00,
};
PROGMEM const uint8_t logo_min[] {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFC, 0x20, 0xF8, 0x07, 0xCF, 0xCF, 0x61, 0x78, 0x0E, 0x07, 0x83, 0x21, 0x18, 0x0C, 0x03, 0x83, 0x21, 0x18, 0x08, 0x03, 0x83, 0x21, 0x08, 0x08, 0x03, 0x83, 0x21, 0x08, 0x08, 0x03, 0x83, 0x21, 0x08, 0x08, 0x03, 0x83, 0x21, 0x08, 0x08, 0x03, 0x83, 0x21, 0x08, 0x08, 0x03, 0x83, 0x21, 0x08, 0x08, 0x03, 0x83, 0x21, 0x08, 0x08, 0x03, 0x83, 0x61, 0x0C, 0x18, 0x02, 0x81, 0x21, 0x08, 0x08,
};
PROGMEM const uint8_t logo_huli[] {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x87, 0x3F, 0x00, 0xF8, 0xCF, 0x7F, 0x00, 0x3C, 0xFE, 0xF1, 0x00, 0x0E, 0x78, 0xC0, 0x01, 0x07, 0x30, 0x80, 0x03, 0x07, 0x00, 0x80, 0x03, 0x03, 0x00, 0x00, 0x03, 0x03, 0x30, 0x00, 0x03, 0x03, 0x30, 0x00, 0x03, 0x03, 0x30, 0x00, 0x03, 0x07, 0xB6, 0x01, 0x03, 0x07, 0xFF, 0x83, 0x03, 0x0E, 0xFF, 0xC3, 0x01, 0x0C, 0x30, 0xC0, 0x01, 0x1C, 0x30, 0xE0, 0x00, 0x78, 0x30, 0x70, 0x00, 0xF0, 0x30, 0x3C, 0x00, 0xE0, 0x01, 0x1E, 0x00, 0xC0, 0x03, 0x0F, 0x00, 0x00, 0xCF, 0x03, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
PROGMEM const uint8_t logo_shajun[] {
0x00, 0x40, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x80, 0xFF, 0x88, 0x01, 0x80, 0x9D, 0xCF, 0x01, 0xF0, 0x00, 0x61, 0x00, 0xF8, 0x00, 0x30, 0x00, 0x18, 0x00, 0x9C, 0x00, 0x18, 0x06, 0xCE, 0x00, 0x18, 0x07, 0xC7, 0x00, 0x0E, 0x87, 0xC3, 0x00, 0x07, 0xC2, 0xC0, 0x00, 0x06, 0x60, 0xC0, 0x01, 0x0E, 0x38, 0x8E, 0x03, 0x0C, 0x1C, 0x84, 0x03, 0x06, 0x0E, 0xC0, 0x01, 0x06, 0x07, 0xC0, 0x00, 0x8F, 0x01, 0xC0, 0x00, 0xCC, 0x20, 0xC0, 0x00, 0x70, 0x70, 0xE0, 0x01, 0x38, 0x20, 0x70, 0x00, 0x4C, 0x00, 0x18, 0x00, 0xE6, 0x00, 0x18, 0x00, 0x82, 0x99, 0x1F, 0x00, 0x80, 0xFF, 0x09, 0x00, 0x00, 0xE7, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
};
void setup() {
pinMode(honggan_Pin, INPUT_PULLUP);
pinMode(shajun_Pin, INPUT_PULLUP);
pinMode(huli_Pin, INPUT_PULLUP);
u8g2.begin(); // 初始化OLED
daijixianshi();
}
void loop() {
if (digitalRead(honggan_Pin) == LOW) {
honggan_display();
}
if (digitalRead(shajun_Pin) == LOW) {
delay(10); // 消抖
if (digitalRead(shajun_Pin) == LOW) {
startTime = millis() + 10000;
}
}
if (digitalRead(huli_Pin) == LOW) {
}
shajun_display();
}
void honggan_display() {
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_logisoso62_tn);
u8g2.setCursor(0, 63); // 重置光标位置
u8g2.print(30);
u8g2.drawXBMP(92, 1, 26, 26, logo_honggan);
u8g2.drawXBMP(86, 45, 37, 18, logo_min);
u8g2.sendBuffer();
}
void shajun_display() {
// 如果startTime被设置了(即倒计时已开始)
if (startTime > 0) {
unsigned long currentTime = millis();
if (currentTime < startTime) {
// 计算剩余时间(分钟)
unsigned int remainingMinutes = (startTime - currentTime) / 1000;
// 清除屏幕
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_logisoso62_tn);
u8g2.setCursor(0, 63); // 重置光标位置
if (remainingMinutes < 10) {
u8g2.print("0"); // 如果倒计时小于10,前面补0
}
u8g2.print(remainingMinutes); // 显示倒计时数字
u8g2.drawXBMP(92, 1, 26, 26, logo_honggan);
u8g2.drawXBMP(86, 45, 37, 18, logo_min);
u8g2.sendBuffer();
} else {
// 如果倒计时结束,则清除startTime和显示消息
startTime = 0;
}
}
}
void huli_display() {
}
void daijixianshi() {
u8g2.clearBuffer();
u8g2.drawXBMP(0, 0, 128, 64, logo);
u8g2.sendBuffer();
}