按键控制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 ...
随机推荐
- Spring Cloud 升级之路 - 2020.0.x - 7. 使用 Spring Cloud LoadBalancer (2)
本项目代码地址:https://github.com/HashZhang/spring-cloud-scaffold/tree/master/spring-cloud-iiford 我们使用 Spri ...
- 图解CSS布局(一)- Grid布局
图解CSS布局(一)- Grid布局 先上图 简介 Grid 布局是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可 ...
- Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
前言 Windows上mingw32版本的openssl的编译是属于比较棘手的,OpenSSL本身不提供支持.. OpenSSL 介绍 OpenSSL是一个开放源代码的软件库包,应用程序可 ...
- eclipse自动格式化代码
前段时间在Eclipse里面设置了java文件保存时自动格式化,在java->Code Style->Formatter里设置了自定义的格式化的样式,这样每次保存后都会自动格式化代码,用了 ...
- 常用深度学习框——Caffe/ TensorFlow / Keras/ PyTorch/MXNet
常用深度学习框--Caffe/ TensorFlow / Keras/ PyTorch/MXNet 一.概述 近几年来,深度学习的研究和应用的热潮持续高涨,各种开源深度学习框架层出不穷,包括Tenso ...
- NVIDIA Turing Architecture架构设计(上)
NVIDIA Turing Architecture架构设计(上) 在游戏市场持续增长和对更好的 3D 图形的永不满足的需求的推动下, NVIDIA 已经将 GPU 发展成为许多计算密集型应用的世界领 ...
- Wide-Bandgap宽禁带(WBG)器件(如GaN和SiC)市场将何去何从?
Wide-Bandgap宽禁带(WBG)器件(如GaN和SiC)市场将何去何从? Where Is the Wide-Bandgap Market Going? 电力电子在采用宽禁带(WBG)器件(如 ...
- 利用NVIDIA NGC的TensorRT容器优化和加速人工智能推理
利用NVIDIA NGC的TensorRT容器优化和加速人工智能推理 Optimizing and Accelerating AI Inference with the TensorRT Contai ...
- RabbitMQ由浅入深入门全总结(二)
写在最前面 距离上一次发文章已经很久了,其实这段时间一直也没有停笔,只不过在忙着找工作还有学校结课的事情,重新弄了一下博客,后面也会陆陆续续会把文章最近更新出来~ 这篇文章有点长,就分了两篇 PS:那 ...
- UF_EVAL 曲线或边分析
Open C UF_EVAL_ask_arc 圆形曲线或边分析,得到曲线或边的信息UF_EVAL_ask_ellipse 椭圆曲线或边分析,得到曲线或边的信息UF_EVAL_ask_hyperbo ...