按钮控制LED

  1. 2 年前
    83
    2 年前,由 小助手 重新编辑
    /*
      巴法科技 2022
      https://bemfa.com
    
      attachInterrupt(digitalPinToInterrupt(buttonPin),checkSwitch, RISING); //设置中断
      LOW	  每当引脚为低电平时触发中断
      HIGH  每当引脚为高电平时触发中断
      CHANGE	每当引脚值从高电平变为低电平或从低电平变为高电平时触发中断
      FALLING	当引脚从高电平变为低电平时触发中断
      RISING	当引脚从低电平变为高电平时触发中断
    
    */
     
    
    const byte ledPin = D4;   //定义led引脚
    const byte buttonPin = D3; //定义按钮引脚
    bool ledState = false;     //led 状态
     
    void IRAM_ATTR checkSwitch() {
       ledState = !ledState;
       digitalWrite(ledPin, ledState);
    }
     
    void setup() {
      pinMode(ledPin, OUTPUT); //设置led引脚为输出引脚
      pinMode(buttonPin, INPUT); // 设置led引脚为输入引脚
      attachInterrupt(digitalPinToInterrupt(buttonPin),checkSwitch, RISING); //设置中断
    }
     
    void loop() {
      
      
    }
  2. 去除抖动版本

    /*
      巴法科技 2022
      https://bemfa.com
    
      attachInterrupt(digitalPinToInterrupt(buttonPin),checkSwitch, RISING); //设置中断
      LOW	  每当引脚为低电平时触发中断
      HIGH  每当引脚为高电平时触发中断
      CHANGE	每当引脚值从高电平变为低电平或从低电平变为高电平时触发中断
      FALLING	当引脚从高电平变为低电平时触发中断
      RISING	当引脚从低电平变为高电平时触发中断
    
    */
     
    
    const byte ledPin = D4;   //定义led引脚
    const byte buttonPin = D3; //定义按钮引脚
    bool ledState = false;     //led 状态
    static unsigned long buttonLastMillis = 0;//时间戳,用于计算防抖
    
    
    void IRAM_ATTR checkSwitch() {
       unsigned long newMillis = millis();//获取当前时间戳
        if(newMillis-buttonLastMillis > 30){  //是否大于30
            ledState = !ledState; //改变led状态
            digitalWrite(ledPin, ledState); //写入状态 
        }
        buttonLastMillis = newMillis;   //重新计算防抖动
       
    }
     
    void setup() {
      pinMode(ledPin, OUTPUT); //设置led引脚为输出引脚
      pinMode(buttonPin, INPUT); // 设置led引脚为输入引脚
      attachInterrupt(digitalPinToInterrupt(buttonPin),checkSwitch, RISING); //设置中断
    }
     
    void loop() {
      
      
    }
  3. 2 年前,由 小助手 重新编辑

    使用acebutton库

    支持短按和长按,长按时间是5秒,可自行修改buttonConfig->setLongPressDelay(5000);//长按时间5秒

    /*
      巴法科技 2022
      https://bemfa.com
    
      在arduino IDE软件中,点击「工具」 →「管理库」 →「搜索Acebutton」点击安装
    
    */
    
    #include <AceButton.h>
    using namespace ace_button;
    
    
    
    //按钮接口
    const int buttonPin = D3;
    
    
    //配置接口
    AceButton ledButton(buttonPin);
    //按键处理程序
    void handleEvent(AceButton* button, uint8_t eventType,
        uint8_t) {
    
      switch (eventType) {
        //当短按时
        case AceButton::kEventReleased:
          Serial.println(F("Button: Pressed"));
          break;
        //当长按时
        case AceButton::kEventLongPressed:
          Serial.println(F("Button: Long Pressed"));
          break;
      }
    
    }
    
    //----------------------------------------------------------------------------
    
    void setup() {
      delay(1000); // some microcontrollers reboot twice
      Serial.begin(115200);
      Serial.println(F("setup(): begin"));
    
      // Button uses the built-in pull up register.
      pinMode(buttonPin, INPUT_PULLUP);
      
    
      //按键配置
      ButtonConfig* buttonConfig = ButtonConfig::getSystemButtonConfig();
      buttonConfig->setEventHandler(handleEvent);
      buttonConfig->setFeature(ButtonConfig::kFeatureLongPress);
      buttonConfig->setFeature(ButtonConfig::kFeatureRepeatPress);
      buttonConfig->setFeature(ButtonConfig::kFeatureSuppressAfterLongPress);
      buttonConfig->setLongPressDelay(5000);//长按时间5秒
    
    }
    
    void loop() {
    
      ledButton.check();
    
    }
  4. 2 年前,被 小助手 删除

或者 后参与话题.