1.环境介绍
如果创建项目请看第2篇 led闪烁. ESP8266实现开关功能。这里利用线程获取gpio的状态. 从而控制led灯 亮或灭
2.软件消抖
关于led灯的控制和GPIO口状态的读取 在第2篇中都有介绍了,这里主要处理软件消抖
软件消抖的原理是,当获取到按键按下的状态时。延迟20ms再获取一次状态,当第二次的状态同样为按下时。就判断为没有抖动了。即为按下状态。最后等待按键松开即可。
代码
void key_handler_task(void *pvParameters){
key_init();
for(;;){
uint32_t bit;
if (GPIO_INPUT_GET(15) == 0x01){
vTaskDelay(20 / portTICK_RATE_MS);
if( GPIO_INPUT_GET(15) == 0x01){
led_toggle();
while( GPIO_INPUT_GET(15) == 0x01 );
}
}
vTaskDelay(100 / portTICK_RATE_MS);
}
vTaskDelete(NULL);
}
3.查看结果
查看到led of led on 同时LED灯跟据开关次数不停迁换
关键字:Nodemcu freertos GPIO口控制 LED灯开关
引用地址:
Nodemcu freertos 学习之路 -- GPIO口控制LED灯开关
推荐阅读最新更新时间:2024-11-08 13:32
反激式开关电源可在1.1V电压下点亮HBLED灯
本设计实例展示的是一种利用单节1.5V电池驱动小功率电子电路的方法。它基于一种自激振荡器设计,该自激振荡器可驱动一个反激式变压器生成更高的可控电压。本设计可以用来为模拟电路、微控制器以及其他任何轻负载供电。 该电源电路经过设计、仿真并最终构建出来。它能够以小于50mW的功耗,甚至在电压降至1.1V的条件下可靠运行。经测试,对于给定的电路值,通过调整单个电阻器的值所产生的稳压输出在6V~24V之间。输出功率足以驱动低功耗模式(15 A@32kHz)下的PIC微控制器。在没有任何修改的情况下,该电路还可作为一个闪光灯,以0.1Hz~20Hz的速率点亮一串 LED 灯或一个LED电源指示灯。虽然对于其他 简单 任务来说,这种设计可
[电源管理]
STM32+FreeRTOS+CUBEMX_学习笔记(五)HAL串口终极总结
前言: 在写这篇文章的过程中,我参考了很多的博文。这些博文给了我很多帮助,但是不得不说,网上的博文终究是层次不齐的。当遇到一些关于原理的地方,还是官方文档比较靠谱。毕竟官方要保证这些文档的可靠性。 如果只是想找对应的方式,直接看目录到对应的地方就可以啦 注意,源码库在最后。 目的: 学习HAL库串口操作函数 实现串口的中断收发定长数据 实现串口的帧头帧尾判断收发不定长数据 实现串口的空闲中断收发不定长数据 实现串口的DMA收发不定长数据 环境和平台: keil5 cubemx stm32c8t6 一、HAL库的串口函数学习: 1.1、hal库: HAL库是ST新推出的官方库,该库同图形化开发工具CUBEMX可以结合
[单片机]
CC2530按键控制LED灯开关
实验要求 代码实现 #include ioCC2530.h #define D3 P1_0 #define D4 P1_1 #define D5 P1_3 #define D6 P1_4 //两个按键 #define SW1 P1_2 #define SW0 P0_1 //延迟函数 void Delay(unsigned int t) { while(t--); } //端口初始化函数 void Init_Prot() { //配置4个LED灯的引擎 //选择端口的功能 P1SEL &=~0x1B;//设置通用io端口 //配置端口的方向 P1DIR |=0x1B; //配置SW1按键引脚 P1SE
[单片机]
STM32上移植FreeRTOS
首先在网上看到大部分移植FreeRTOS 都是选择修改他的启动文件,我个人感觉这样不是很好,毕竟是汇编,当你采用不同的芯片型号时,又要修改不同的xx.S文件,所以我选择修改FreeRTOSconfig.h文件。 1. 下载STM32官方源码:我的是基于V3.5的官方库(有工程模板的可以不用)。 下载FreeRTOS的源码 http://download.csdn.net/detail/jb8154989/6033207 2. 搭建好一个MDK的工程,我这里采用的是野火的工 程, http://download.csdn.net/my/uploads 3. 在工程模板目录下新建一个FreeRTOS文件夹,在FreeRTOS文件夹
[单片机]
【单片机笔记】NodeMcu入坑—LUA脚本语言PWM调光
先上代码 --pwm.lua pin = 4 dutyMAX = 1023 dutyMIN = 0 flag = 0 pwm.setup(pin,100,dutyMAX) pwm.start(pin) function changeDuty() local duty = pwm.getduty(pin); print(duty); if(flag == 0) then if (duty dutyMIN+10) then pwm.setduty(pin,duty - 10); else flag = 1; end else if (duty dutyMA
[单片机]
W800/W801学习记录FreeRTOS操作系统部分(一):任务系统
前言 在官方提供的SDK中,使用的是FreeRTOS实时操作系统。但使用时和一般的FreeRTOS不同,因为它对一些函数进行了改造,直白点来说就是披上了一层皮。本章对SDK中的FreeRTOS的任务系统进行阐述和解析。 一、启动方式 在上图可以看到,芯片在上电后运行启动文件,然后进行初始化。用户在main.c的void UserMain(void)函数里面编写自己的程序。 二、任务创建与删除 1.任务创建函数 tls_os_status_t tls_os_task_create(tls_os_task_t *task, //任务句柄 const char* name, //名称
[单片机]