基于 ESP8266_RTOS_SDK 实现声控灯
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <stdbool.h>
#include "driver/gpio.h"
#include "driver/hw_timer.h"
#include "FreeRTOS.h"
#include "freertos/event_groups.h"
#include "rom/ets_sys.h"
#define PIN GPIO_NUM_5
/**
* @brief 定时器中断函数,检测事件组
*/
void timer_callback(void *arg){
EventBits_t bit = xEventGroupGetBitsFromISR((EventGroupHandle_t)arg);
xEventGroupClearBitsFromISR((EventGroupHandle_t)arg, bit);
static uint8_t num = 0;
//接收到声音传感器的响应
if(0x01 == bit){
//当前LED灭,重新开启,当前LED已经打开,刷新计时
if(0 == num){
num = 5;
gpio_set_level(2, 0);
}else{
num = 5;
}
}
if(0 < num){
num--;
}else{
gpio_set_level(2, 1);
}
}
/**
* @brief 声音模块GPIO中断函数,下降沿触发,事件组置位
*/
void sound_isr(void *arg){
BaseType_t base;
xEventGroupSetBitsFromISR((EventGroupHandle_t)arg, 0x01, &base);
}
/**
* @brief 使用事件组和中断实现声控灯
* ESP8266 sound
* D1(GPIO5) out
* VCC VCC
* GND GND
*/
void app_main(void){
EventGroupHandle_t event = xEventGroupCreate();
gpio_config_t conf;
conf.pin_bit_mask = 1 << 2;
conf.mode = GPIO_MODE_OUTPUT;
conf.intr_type = GPIO_INTR_DISABLE;
gpio_config(&conf);
gpio_set_level(2, 1);//板载LED低电平亮
conf.pin_bit_mask = 1 << PIN;
conf.mode = GPIO_MODE_INPUT;
conf.intr_type = GPIO_INTR_NEGEDGE;
conf.pull_up_en = 1;
gpio_config(&conf);
gpio_install_isr_service(0);
gpio_isr_handler_add(PIN, sound_isr, event);
hw_timer_init(timer_callback, event);
hw_timer_set_reload(true);
hw_timer_set_clkdiv(TIMER_CLKDIV_16);
hw_timer_set_intr_type(TIMER_EDGE_INT);
hw_timer_set_load_data((TIMER_BASE_CLK >> hw_timer_get_clkdiv()));//5000000
hw_timer_enable(true);
while(1){
//也可以主任务实现控制逻辑
// xEventGroupWaitBits(event, 0x01, pdTRUE, pdFALSE, portMAX_DELAY);
// gpio_set_level(2, 0);
// for(uint16_t i = 0; i < 1000; i++){
// os_delay_us(1000);
// }
// gpio_set_level(2, 1);
os_delay_us(65534);
}
}
基于 ESP8266_RTOS_SDK 实现声控灯的更多相关文章
- 基于AD5663的UV灯电压控制
在开发臭氧发生器的时,我们使用UV灯来实现臭氧的产生.而UV灯的强度决定了臭氧产生的浓度,UV灯的光强则与其控制电压密切相关.所以我们要控制产生的臭氧的浓度就需要调节其控制电压.我们选择了AD5663 ...
- STM32学习笔记(二) 基于STM32-GPIO的流水灯实现
学会了如何新建一个工程模板,下面就要开始动手实践了.像c/c++中经典的入门代码"hello world"一样,流水灯作为最简单的硬件设备在单片机领域也是入门首推.如果你已经有了一 ...
- 实验一:基于STM32F1的流水灯实验(库函数)
参考原子哥学习程序 条件:实验板STM32103ZET6:固件库STM32F10x_StdPeriph_Lib_V3.5.0:环境MDK5: 目的:了解STM32 的 IO 口如何作为输出使用 :以两 ...
- TPYBoard V102:能跑Python的stm32开发板
近来micropython语言做硬件编程很火,随之而来的就开始带动着支持micropython语言编程的开发板也开始火的发烫,今天小编就来和大家介绍一款很经典的micropython开发板-TPYBo ...
- [MicroPython]TPYBoardv102超全DIY案例一览
TPYBoardv102是一款比较成熟和经典的MicroPython开发板,不仅适用于学习实验还能应用于大型的工业级开发,是MicroPython入门和研发的不二之选.下面我们就扒开v102的“层层外 ...
- Scratch3.0设计的插件系统(上篇)
我们每个人在内心深处都怀有一个梦想: 希望创造出一个鲜活的世界,一个宇宙.处在我们生活的中间.被训练为架构师的那些人,拥有这样的渴望: 在某一天,在某一个地方,因为某种原因,创造出了一个不可思议的.美 ...
- 跟着弦哥学人工智能2—HAND-CRAFTED RULES实现的人工智能及其缺陷
隔壁有个妹纸喷我,好高兴....给她回复了下 哎呀,没想到是个妹纸,其实我就随便那么一说,没合计妹纸还专门写个檄文声讨我,受宠若惊其实你的评论一看就比较专业,所以我就去你博客大概扫了一眼,发现个大问 ...
- ISE14.7使用教程(一个完整工程的建立)
FPGA公司主要是两个Xilinx和Altera(现intel PSG),我们目前用的ISE是Xilinx的开发套件,现在ISE更新到14.7已经不更新了,换成了另一款开发套件Vivado,也是Xil ...
- TRIZ系列-创新原理-23-反馈原理
反馈原理的详细表述例如以下:1)引入反馈:2)假设已经有反馈,那么改变它这个原理告诉我们应当从系统中尽量多收集反馈信息.并用这些信息来矫正系统的作用.非常easy看出,引入反馈是系统自己主动控制 ...
- 【转】ISE——完整工程的建立
FPGA公司主要是两个Xilinx和Altera(现intel PSG),我们目前用的ISE是Xilinx的开发套件,现在ISE更新到14.7已经不更新了,换成了另一款开发套件Vivado,也是Xil ...
随机推荐
- RabbitMQ 10 头部模式
头部模式是根据头部信息来决定的,在发送的消息中是可以携带一些头部信息的(类似于HTTP),可以根据这些头部信息来决定路由到哪一个消息队列中. 定义配置类. import org.springframe ...
- Python生成测试数据--Faker的使用方法
# 官方文档:https://faker.readthedocs.io/en/master/index.html # 安装:pip install Faker from faker import Fa ...
- 安装pnpm 和报错解决,亲测可行
安装pnpm 和报错解决,亲测可行 pnpm 是一款磁盘空间高效的软件包管理器. 当使用 npm 或 Yarn 时,如果你有 1000个项目,并且所有项目都有一个相同的依赖包,那么, 你在硬盘上就需要 ...
- 单机运行环境搭建之 --CentOS-6.4安装MySQL 5.6.10并修改MySQL的root用户密码
单机运行环境搭建之 --CentOS-6.4安装MySQL 5.6.10并修改MySQL的root用户密码 Mysql 5.5以后使用了CMake进行安装,参考与以前的区别请参考: http://ww ...
- 推荐两款HTTP请求Mock利器
1.背景 在日常测试过程中或者研发开发过程中,目前接口暂时没有开发完成,测试人员又要提前介入接口测试中,测试人员不仅仅只是简单的编写测试用例,也可以通过一些mock的方法进行来提前根据接口测试的情况进 ...
- nginx重新整理——————http请求的11个阶段中的preaccess[十四]
前言 简单整理一下preaccess. 正文 主要是介绍一下上文提及到的limit_req以及limit_conn. 里面是http_limit_conn_module 默认编译进去. 生效范围: 全 ...
- What is an HL7 ADT Message?
Patient Admission Discharge and Transfer (ADT) messages are used to exchange the patient state withi ...
- 如何发起 MQTT 亿级连接和千万消息吞吐性能测试
简介:MQTT 协议凭借简单易实现.支持 QoS.报文小等特点,占据了物联网协议的半壁江山. 作者:亦炎 随着 5G 时代的来临,万物互联的伟大构想正在成为现实.联网的物联网设备 在 2021 年已 ...
- KubeVela:标准化的云原生平台构建引擎
简介: 本文由"GO 开源说"第三期 KubeVela 直播内容修改整理而成,视频内容较长,本文内容有所删减和重构. KubeVela 的背景 KubeVela 是一个基于 Go ...
- dotnet 读 WPF 源代码笔记 为什么加上 BooleanBoxes 类
在 WPF 框架,为什么需要定义一个 BooleanBoxes 类.为什么在 D3DImage 的 Callback 方法里面,传入的是 object 对象,却能被转换为布尔.本文将告诉大家为什么需要 ...