Bounce2 按钮功能的测试

#include <Arduino.h>

#include <U8g2lib.h>

#include <Bounce2.h>

#ifdef U8X8_HAVE_HW_SPI

#include <SPI.h>

#endif

#ifdef U8X8_HAVE_HW_I2C

#include <Wire.h>

#endif

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0,U8X8_PIN_NONE);

byte button_pins[]={12,13,15};

#define NUMBUTTONS sizeof(button_pins)

Bounce *buttons=new Bounce[NUMBUTTONS];

#define MENU_SIZE 5

char *menu[MENU_SIZE]={"Option1","Option2","Option3","Option4","Option5"};

int cursor=1;

void setup(void) {

  u8g2.begin();  

  Serial.begin(9600);

     for(int i=0;i<NUMBUTTONS;i++){

     buttons[i].attach(button_pins[i],INPUT_PULLUP);

     buttons[i].interval(25);

   }

  u8g2.firstPage();

  do {

    u8g2.setFont(u8g2_font_helvR08_tr);

    showMenu();

  } while ( u8g2.nextPage() );

}

bool selected=false;

int selectCursor;

void loop(void) {

  for(int i=0;i<NUMBUTTONS;i++){

   if(buttons[i].update() && buttons[i].fell()){

   

      if(i==2) {

        selected=true;

        selectCursor=cursor;

        displaySelect();

        Serial.println("rst button");

        }

      if(i==0){

        cursor++;

        if(cursor>5) cursor=1;

        displayMenu();

        Serial.println("up button");

        }

      if(i==1){

        cursor--;

        if(cursor<1) cursor=5;

        displayMenu();

        Serial.println("down button");

        }

    }

  }

}

void displaySelect()

{

 u8g2.firstPage();

  do {

    u8g2.setFont(u8g2_font_helvR08_tr);

    showMenu();

    showSelect();

  } while ( u8g2.nextPage() );

}

void displayMenu()

{

  u8g2.firstPage();

  do {

    u8g2.setFont(u8g2_font_helvR08_tr);

    showMenu();

    if(selected) showSelectCursor();

  } while ( u8g2.nextPage() );

}

void showMenu()

{

 // u8g2.clearDisplay();

  for(int i=0;i<MENU_SIZE;i++){

    u8g2.drawStr(20, (i+1)*10, menu[i]);

   // u8g2.sendBuffer();

  }

  u8g2.setCursor(14, 10*cursor);

  u8g2.print('>');

}

void showSelect()

{

  u8g2.setCursor(4, 10*6+2);

  u8g2.print(">> select: ");

  u8g2.print(menu[cursor-1]);

}

void showSelectCursor()

{

  u8g2.setCursor(4, 10*6+2);

  u8g2.print(">> select: ");

  u8g2.print(menu[selectCursor-1]);

}

void executeChoice(int choice) {

  switch(choice) {

      case 0 :

                Serial.print("Execute choice "); Serial.print(choice); Serial.print(" - "); Serial.println(menu[choice]);

                break;

      case 1 :

                Serial.print("Execute choice "); Serial.print(choice); Serial.print(" - "); Serial.println(menu[choice]);

                break;

      case 2 :

                Serial.print("Execute choice "); Serial.print(choice); Serial.print(" - "); Serial.println(menu[choice]);

                break;

      case 3 :

                Serial.print("Execute choice "); Serial.print(choice); Serial.print(" - "); Serial.println(menu[choice]);

                break;

      case 4 :

                Serial.print("Execute choice "); Serial.print(choice); Serial.print(" - "); Serial.println(menu[choice]);

                break;

      default :

                Serial.print("Execute choice "); Serial.print(choice); Serial.print(" - "); Serial.println(menu[choice]);

                break;

  }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值