45集 ESP32 ADC按键程序编写

45集 ESP32 ADC按键程序编写

参考例程是
D:\Espressif\esp-adf\examples\checks\check_board_buttons
1、config
这个向下兼容的要加上,如果不加会有错误。
CONFIG_FREERTOS_ENABLE_BACKWARD_COMPATIBILITY=y
在这里插入图片描述
2、程序里面引入如下头文件
#include “periph_adc_button.h”
#include “input_key_service.h”
在这里插入图片描述
3、加入如下代码

static esp_err_t input_key_service_cb(periph_service_handle_t handle, periph_service_event_t *evt, void *ctx)
{
    ESP_LOGD(TAG, "[ * ] input key id is %d, %d", (int)evt->data, evt->type);
    const char *key_types[INPUT_KEY_SERVICE_ACTION_PRESS_RELEASE + 1] = {"UNKNOWN", "CLICKED", "CLICK RELEASED", "PRESSED", "PRESS RELEASED"};
    switch ((int)evt->data) {
        case INPUT_KEY_USER_ID_REC:
            ESP_LOGI(TAG, "[ * ] [Rec] KEY %s", key_types[evt->type]);
            break;
        case INPUT_KEY_USER_ID_SET:
            ESP_LOGI(TAG, "[ * ] [SET] KEY %s", key_types[evt->type]);
            break;
        case INPUT_KEY_USER_ID_PLAY:
            ESP_LOGI(TAG, "[ * ] [Play] KEY %s", key_types[evt->type]);
            break;
        case INPUT_KEY_USER_ID_MODE:
            ESP_LOGI(TAG, "[ * ] [MODE] KEY %s", key_types[evt->type]);
            break;
        case INPUT_KEY_USER_ID_VOLDOWN:
            ESP_LOGI(TAG, "[ * ] [Vol-] KEY %s", key_types[evt->type]);
            break;
        case INPUT_KEY_USER_ID_VOLUP:
            ESP_LOGI(TAG, "[ * ] [Vol+] KEY %s", key_types[evt->type]);
            break;
        case INPUT_KEY_USER_ID_MUTE:
            ESP_LOGI(TAG, "[ * ] [MUTE] KEY %s", key_types[evt->type]);
            break;
        case INPUT_KEY_USER_ID_CAPTURE:
            ESP_LOGI(TAG, "[ * ] [CAPTURE] KEY %s", key_types[evt->type]);
            break;
        case INPUT_KEY_USER_ID_MSG:
            ESP_LOGI(TAG, "[ * ] [MSG] KEY %s", key_types[evt->type]);
            break;
        case INPUT_KEY_USER_ID_BATTERY_CHARGING:
            ESP_LOGI(TAG, "[ * ] [BATTERY_CHARGING] KEY %s", key_types[evt->type]);
            break;
        case INPUT_KEY_USER_ID_WAKEUP:
            ESP_LOGI(TAG, "[ * ] [WAKEUP] KEY %s", key_types[evt->type]);
            break;
        case INPUT_KEY_USER_ID_COLOR:
            ESP_LOGI(TAG, "[ * ] [COLOR] KEY %s", key_types[evt->type]);
            break;
        default:
            ESP_LOGE(TAG, "User Key ID[%d] does not support", (int)evt->data);
            break;
    }

    return ESP_OK;
}


4、加入key初始化函数



void key_start(esp_periph_set_handle_t set)
{
    ESP_LOGI(TAG, "[ key_start ] Initialize Button peripheral with board init");
    audio_board_key_init(set);

    ESP_LOGI(TAG, "[ key_start ] Create and start input key service");
    input_key_service_info_t input_key_info[] = INPUT_KEY_DEFAULT_INFO();
    input_key_service_cfg_t input_cfg = INPUT_KEY_SERVICE_DEFAULT_CONFIG();
    input_cfg.handle = set;
    input_cfg.based_cfg.task_stack = 4 * 1024;
    periph_service_handle_t input_ser = input_key_service_create(&input_cfg);

    input_key_service_add_key(input_ser, input_key_info, INPUT_KEY_NUM);
    periph_service_set_callback(input_ser, input_key_service_cb, NULL);

    ESP_LOGW(TAG, "[ 4 ] Waiting for a button to be pressed ...");
}


带着

ESP32是一款基于Espressif Systems ESP8266平台开发的扩展板,它支持Arduino IDE进行编程。要使用Arduino编译器编写ESP32的外部中断(也称为GPIO输入捕获)程序,你可以按照以下步骤操作: 1. **安装Arduino IDE**: 如果还没有安装,从官方网站下载并安装最新版本的Arduino IDE:https://www.arduino.cc/en/software 2. **设置开发板类型**: 打开Arduino IDE,点击 `Tools` -> `Board`,选择 `Espressif > ESP32(DevKitM/Module)` 或根据你的硬件配置选择相应型号。 3. **添加必要的库**: 由于ESP32的GPIO功能可能不在默认库中,你需要安装`ESP32 Boards`和`ESP32 Pins`这两个附加库。点击 `Sketch` -> `Include Library` -> `Manage Libraries...`,搜索并安装这些库。 4. **创建新项目**: 点击 `File` -> `New` -> `Blank Sketch`,创建一个新的文件。 5. **编写代码**: 下面是一个基本的外部中断示例,用于检测GPIO引脚上的上升沿事件: ```cpp // 包含必要的头文件 #include <ESP32WiFi.h> #include <HardwareSerial.h> #include <Adafruit_Gpio.h> // 设置GPIO引脚作为外部中断 const int interruptPin = 16; Adafruit_GPIO::DigitalInput interrupt(interruptPin); void setup() { Serial.begin(115200); // 初始化GPIO并设置为中断模式 pinMode(interruptPin, INPUT_PULLUP); interrupt.enableRisingEdgeDetection(); attachInterrupt(digitalPinToInterrupt(interruptPin), externalInterruptHandler, RISING); } void loop() { // 主循环可以做其他事情 } void externalInterruptHandler() { Serial.println("External Interrupt detected on pin " + String(interruptPin)); } ``` 这里我们使用了`Adafruit_Gpio`库来简化GPIO操作。 6. **上传代码**: 确保ESP32连接到电脑并通过USB供电,然后点击 `Tools` -> `Upload` 来编译并烧录代码。 注意:实际应用时,记得替换 `interruptPin` 为你想要监控的GPIO引脚,并根据具体需求调整中断触发条件和回调函数。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

柔贝特三哥

你的鼓励是我坚持创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值