#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