#include <U8g2lib.h>
#include <Wire.h>
#include <OneButton.h>
U8G2_SH1106_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);//该驱动是1.3寸的OLED屏幕。---------U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);这是比较常用的0.9寸的OLED显示器的驱动
OneButton button1(4,true,true); //初始化按键
OneButton button1(5,true,true);
OneButton button1(6,true,true);
//OneButton button(BTN_PIN,true,true)
//第二个参数:true 低有效,false 高有效
//第三个参数:true 开启内部拉高,false 关闭内部拉高
//string week[]{Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday};
//char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};
//int week[]{11,22,33,44,55,66,77};
struct Date{
int year;
int month;
int day;
int hour;
int minute;
int second;
char daysOfTheWeek[];
};
Date day1={2023,01,30,16,55,50,"sunday"};
//Date day2={ , , , , , ,("Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday")};
unsigned long nowtime;
unsigned long beforetime;
void setup(void) { //demo1
Serial.begin(115200);
u8g2.begin();
u8g2.setFont(u8g2_font_ncenB08_tr); //设置字体
beforetime = millis();
button1.setDbounceTicks(50); //按钮去抖动50毫秒
//单击,双击,三连击,N连击
button1.setClickTicks(500); //时间判断500毫秒
button1.attachClick(singleClick1);
button1.attachDoubleClick(doubleClick1);
button1.attachMultiClick(mulitiClick1);
//1000ms后开启长按功能
button1.setClickTicks(1ooo); //长按时间判断,1000毫秒后算长按
button1.attachLongPressStart(longPressStart1);
button1.attachLongPressStop(longPressStop1);
button1.attachDuringLongPress(longPress1);
}
void loop(void) {
time_show();
//Serial.println(String(day1.year) +String("/") + String(day1.month) + String("/") + String(day1.day));
//delay(1000);
sjdj();
button1.tick();
button2.tick();
button3.tick();
}
void time_show(){
u8g2.clearBuffer();
u8g2.setFont(u8g2_font_ncenB08_tr); //设置字体
u8g2.drawStr(30,10,"time show"); //
u8g2.drawLine(5, 12, 118, 12);
u8g2.drawLine(5, 52, 118, 52);
u8g2.setCursor(5, 62);
u8g2.print(String(day1.year) +String("/") + String(day1.month) + String("/") + String(day1.day));
//u8g2.drawStr(5,64,String(day1.year) +String("/") + String(day1.month) + String("/") + String(day1.day)); //语法不对,应先用setCursor再用print
u8g2.drawLine(65, 52, 65, 62);
//u8g2.drawStr(80,62,week[1]);
u8g2.setCursor(70, 62);
u8g2.print(day1.daysOfTheWeek);
u8g2.setFont(u8g2_font_ncenB18_tr); //设置字体
u8g2.setCursor(10, 42);
u8g2.print(String(day1.hour) +String(":") + String(day1.minute) + String(":") + String(day1.second));
u8g2.sendBuffer();
}
void sjdj(){
if((millis()-beforetime)>=10){
beforetime=millis();
day1.second++;
if(day1.second==60){
day1.second=0;
day1.minute++;
if(day1.minute==60){
day1.minute=0;
day1.hour++;
if(day1.hour==24){
day1.hour=0;
}
}
}
}
}
void multiClick1(){
int n =button1.getNumberClicks();
switch(n){
case 3:
Serial.println("triple click");
break;
case 4:
Serial.println("quadruple click");
break;
default:
Serial.print("mulitiClick (");
Serial.print(n);
Serial.println(" )detected");
}
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
oled1:GND
oled1:VCC
oled1:SCL
oled1:SDA
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r