按键控制LED灯-ESP32中断处理
#include <driver/gpio.h>
#include <esp_task_wdt.h>
#include <freertos/FreeRTOS.h>
#include <freertos/queue.h>
#include <freertos/semphr.h>
#include <freertos/task.h>
#include <math.h>
#include "sdkconfig.h" #define MIN_DELAY 500
#define BUTTON_GPIO GPIO_NUM_14
#define BLINK_GPIO GPIO_NUM_13 static char *TAG = "SMART-WATER";
//二值信号量可以在某个特殊的中断发送时,让任务解除阻塞,相当于让任务与中断同步。
//这样,可以让中断事件处理量大的工作在同步任务中完成,中断服务例程(ISR)中只是快速处理少部分工作。
static xSemaphoreHandle semaphore_handle = NULL; //任务处理函数
void led_task(void* arg) {
bool x = false;
while (true) {
//获取信号量,portMAX_DELAY标识一直等待,可以设置具体的时钟滴答次数
xSemaphoreTake(semaphore_handle, portMAX_DELAY);
x = !x;
gpio_set_level(BLINK_GPIO, x);
}
} //按钮中断处理
void IRAM_ATTR button_isr_handler(void* arg) {
int last_time = 0;
//获取系统当前运行的时钟节拍数,此函数用于在中断服务程序里面调用, 如果在任务里面调用的话,
//需要使用函数 xTaskGetTickCount,这两个函数切不可混用
int now = xTaskGetTickCountFromISR();
if (now - last_time > MIN_DELAY) {
int ignored = pdFALSE;
//通过释放信号量来使任务解除阻塞
xSemaphoreGiveFromISR(semaphore_handle, &ignored);
last_time = now;
}
} void app_main(void)
{
gpio_pad_select_gpio(BLINK_GPIO);
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); gpio_pad_select_gpio(BUTTON_GPIO);
gpio_set_direction(BUTTON_GPIO, GPIO_MODE_INPUT);
//上拉
gpio_set_pull_mode(BUTTON_GPIO, GPIO_PULLUP_ONLY);
//设置电平下降沿触发中断
gpio_set_intr_type(BUTTON_GPIO, GPIO_INTR_NEGEDGE); //创建一个二进制信号量
semaphore_handle = xSemaphoreCreateBinary();
//创建任务,param1:任务入口函数,无限循环 param2:任务名称
//param3:指定任务堆栈的大小 ,堆栈能保护变量的数目,不是字节数。栈空间 大小为usStackDepth*4(bytes)。
//param4:指针用于作为一个参数传向创建的任务 param5:任务运行时的优先级 param6:用于传递一个处理——引用创建的任务
xTaskCreate(led_task, "led_task", 2048, NULL, 10, NULL);
//第一个处理器核安装中断处理程序
gpio_install_isr_service(ESP_INTR_FLAG_LEVEL1);
//添加中断处理函数
gpio_isr_handler_add(BUTTON_GPIO, button_isr_handler, NULL); }
按键控制LED灯-ESP32中断处理的更多相关文章
- 长按短按控制LED灯-ESP32中断处理
#include <stdio.h> #include <string.h> #include <stdlib.h> #include "freertos ...
- CC2530学习路线-基础实验-GPIO 按键控制LED灯亮灭(2)
目录 1.前期预备知识 1.1 新大陆Zigbee模块按键电路图 1.2 CC2530相关寄存器 1.3 CC2530中断走向图 1.4 使用C语言为51单片机编写中断程序 1.5 *函数指针 2. ...
- 独立按键控制led灯
#include "regx51.h"typedef unsigned int u16; void delay_us(u16 time){ while(time--){} }voi ...
- 嵌入式Linux学习入门:控制LED灯
记录自己linux学习过程,让自己能够一直坚持下去 1.原理图分析: nLED_1, nLED_2, nLED_4, 给低电平则对应LED灯亮,高电平则对应LED灯灭, S3C2440芯片GPF4-G ...
- arduino 红外遥控器控制LED灯
/* 日期:2016.9.1 功能:红外遥控器控制LED灯 开,关,闪烁,呼吸 元件: 跳线公公头 * 5 led 220欧电阻 红外接收管,红外遥控 接线: 红外灯面向自己从左到右分别接 IO3 , ...
- arduino入门学习实现语音控制LED灯
需要的准备的硬件arduino+PC+麦克风实现语音命令控制LED灯的亮灭. 首先需要将写好的arduino程序烧录到arduino uno主板中,下面是代码如下: int val;//定义变量val ...
- C#与Arduino通过串口通信来控制LED灯的状态
一.引言 最近摆弄了一段时间的Arduino,发现Arduino做一些电子类项目.监控.机器人.电子玩具比较容易,并且Arduino与.NET程序集成也不难.接下来介绍一个简单的小程序,C#做的一个W ...
- BLE 安卓APP控制LED灯的实现(转)
源:BLE 安卓APP控制LED灯的实现 //注:参考AmoMcu源代码修改. 打开APP,检查蓝牙是否打开 BluetoothAdapter mBluetoothAdapter; final Blu ...
- 通过按键实现LED灯的亮灭(含两种情况)
#include "stm32f10x.h"// 相当于51单片机中的 #include <reg51.h> #include "stm32f10x_gpio ...
随机推荐
- Golang基础编程(一)-基本结构、数据类型、流程语句
一.Go语言简介 简洁,高效,并发 二.语言特性 ·简洁,只有25个关键字 ·函数多返回值 ·匿名函数和闭包 ·类型和接口 ·自动垃圾回收 ·编译迅速 ·并发编程 25个关键字: 三.Go程序基本结构 ...
- lua type 获取 类型
lua中的类型作一小记 print(type("Hello world")) --> string print(type(10.4*3)) --> number pri ...
- 痞子衡嵌入式:关于i.MXRT中FlexSPI外设lookupTable里配置Normal read的一个小误区
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT中FlexSPI外设lookupTable里配置Normal read的一个小误区. 关于串行四线NOR Flash,当其作 ...
- 详述盒子模型(包含padding、border、margin的详细用法和描述)
提起盒子模型,我想无论是对于一个前端资深开发人员还是前端入门开发人员来说都不陌生,这是CSS最基础的知识. 但是惭愧地说,我之前理解的盒子模型,只是文字上的理解.我知道定义一个元素的宽度和高度时,设置 ...
- springboot对mybatis的整合
1. 导入依赖 首先新建一个springboot项目,勾选组件时勾选Spring Web.JDBC API.MySQL Driver pom.xml配置文件导入依赖 <!--mybatis-sp ...
- js的节流、防抖以及使用场景
介绍 首先看一个没有经过任何处理的: 1 // 模拟一个输出的函数 2 function input(value) { 3 console.log(`输入的内容${value}`) 4 } 5 con ...
- TVM性能评估分析(五)
TVM性能评估分析(五) Figure 3. A futher speed up with operator fusion Table 1. Performance issue of cuBLAS ...
- AI推理单元
AI推理单元 推理服务供了一套面向 MLU(Machine Learning Unit,机器学习单元)设备的类似服务器的推理接口(C++11标准),以及模型加载与管理,推理任务调度等功能,极大地简化了 ...
- h265player开发
h265player开发 https://github.com/goldvideo/h265player 简介 随着视频编码技术的发展,相比H.264, H.265同等画质体积仅为一半.带宽占用省一半 ...
- spring 声明式事务剖析
spring事务是在数据库事务的基础上进行封装扩展, 支持原有事务的隔离级别, 加入了事务传播的概念,提供多个事务合并和分割的功能, 提供声明式事务,让事务和业务代码分开 spring提供了三个接口供 ...