ESP8266入门学习之使用软件定时器检测KEY输入并点亮LED

内容简介

本实验是在ESP8266入门学习之使用软件定时器控制LED闪烁实验基础上进行的
实验内容:

  • 使用软件定时器创建按键key扫描定时回调函数;
  • 按键key短按一次,led状态变化一次(点亮或熄灭);

实验目的:

  • 学习GPIO做输入控制;

硬件原理

使用MTCK引脚做输出引脚,低电平有效。MTCK引脚的Function4即做GPIO13。

软件原理

添加user_key文件

1、添加user_key.c文件,鼠标右击IoT_Demo\user,选择New->Source File;
2、添加user_key.h文件,鼠标右击IoT_Demo\include,选择New->Header File;

程序分析

在这里插入图片描述
MTCK引脚的Function4即做GPIO13。

程序编辑

/*
 * key.h
 *
 *  Created on: 2021年2月3日
 *      Author: Administrator
 */

#ifndef IOT_DEMO_INCLUDE_USER_KEY_H_
#define IOT_DEMO_INCLUDE_USER_KEY_H_
#include  "gpio.h"

#define KEY_IO_MUX     PERIPHS_IO_MUX_MTCK_U
#define KEY_IO_NUM     13
#define KEY_IO_FUNC    FUNC_GPIO13
#define KEY_GET_LEVEL  GPIO_INPUT_GET(GPIO_ID_PIN(KEY_IO_NUM))

void user_key_init(void);
#endif /* IOT_DEMO_INCLUDE_USER_KEY_H_ */

/*
 * key.c
 *
 *  Created on: 2021年2月3日
 *      Author: Administrator
 */
#include "osapi.h"
#include "os_type.h"
#include "led.h"
#include "user_key.h"

os_timer_t os_timer_key_scan;  /*定义软件定时器句柄*/
/******************************************************************************
 * FunctionName : key_scan
 * Description  :
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
LOCAL void ICACHE_FLASH_ATTR
user_key_scan(void)
{
   static bool flag = 0;   /*消抖*/
   static bool leve = 1;   /*每次按键只做一次LED电平翻转*/
   static bool stat = 0;   /*长按电平只变化一次,松手后才能按下一次*/

   if(KEY_GET_LEVEL == 0)
   {
	   if((KEY_GET_LEVEL == 0)&&(flag == 1)&&(stat == 0))
	   {
		   stat = 1;
		   leve = !leve;
		   GPIO_OUTPUT_SET(GPIO_ID_PIN(LED_IO_NUM), leve);
	   }
	   flag = 1;
   }
   else
   {
	   flag = 0;
	   stat = 0;
   }
}
/******************************************************************************
 * FunctionName : key_init
 * Description  : key 引脚及软件定时器初始化
 * Parameters   : none
 * Returns      : none
*******************************************************************************/
void ICACHE_FLASH_ATTR
user_key_init(void)
{
    PIN_FUNC_SELECT(KEY_IO_MUX, KEY_IO_FUNC);    /*选择key引脚*/
    PIN_PULLUP_EN(KEY_IO_MUX);                   /*使能上拉*/
    GPIO_DIS_OUTPUT(GPIO_ID_PIN(KEY_IO_NUM));    /*初始化引脚为输出*/

    os_timer_disarm(&os_timer_key_scan);
    os_timer_setfn(&os_timer_key_scan,(os_timer_func_t *)user_key_scan,NULL);
    os_timer_arm(&os_timer_key_scan,10,1);      /**周期为10ms/
}

程序下载

下载程序后观察现象

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值