#include <U8g2lib.h>
#include "OneButton.h"//导入onebutton库,按键多状态
#include <FastLED.h>//导入WS2812,控制RGB LES
// 定义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 hongganPin 2
#define shajunPin 3
#define huliPin 4
unsigned long startTime = 0; //一键杀菌时间
unsigned long startTime2 = 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(hongganPin, INPUT_PULLUP);
pinMode(shajunPin, INPUT_PULLUP);
pinMode(huliPin, INPUT_PULLUP);
u8g2.begin(); // 初始化OLED
daijixianshi();
}
void loop() {
if (digitalRead(hongganPin) == LOW) {
}
if (digitalRead(shajunPin) == LOW) {
delay(10); // 消抖
if (digitalRead(shajunPin) == LOW) {
startTime = millis() + 10000;
}
}
if (digitalRead(huliPin) == LOW) {
delay(10); // 消抖
if (digitalRead(huliPin) == LOW) {
// // 设置倒计时为10分钟后
// fan();//打开风扇
// delay(1000);//延迟1秒
// fanChou();//打开风扇和臭氧
Serial.println("hulianjian");
startTime2 = millis() + 20000;
}
}
shajun_display();
hulidaojishi();
//honggan_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();
}
void fan() { //风扇继电器打开
Serial.println(F("风扇继电器打开,黄灯亮"));
}
void fanChou() { //风扇和臭氧继电器打开
Serial.println(F("风扇和臭氧继电器打开,蓝灯,黄灯亮"));
}
void fanJia() { //风扇和加热丝继电器打开
Serial.println(F("风扇和加热丝继电器打开,红灯,黄灯亮"));
}
void hulidaojishi()//循环调用:一键护理带屏幕倒计时
{
// 如果startTime被设置了(即倒计时已开始)
if (startTime2 > 0) {
unsigned long currentTime2 = millis();
if (currentTime2 < startTime2) {
// 计算剩余时间(分钟)
unsigned int remainingMinutes2 = (startTime2 - currentTime2) / 1000;
if (remainingMinutes2 == 17) {
fanJia();
}
if (remainingMinutes2 == 5) {
fan();
}
// 清除屏幕
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_logisoso62_tn);
u8g2.setCursor(0, 63); // 重置光标位置
if (remainingMinutes2 < 10) {
u8g2.print("0"); // 如果倒计时小于10,前面补0
}
u8g2.print(remainingMinutes2); // 显示倒计时数字
u8g2.drawXBMP(92, 1, 26, 26, logo_honggan);
u8g2.drawXBMP(86, 45, 37, 18, logo_min);
u8g2.sendBuffer();
} else {
// 如果倒计时结束,则清除startTime和显示消息
startTime2 = 0;
daijixianshi();
}
}
}