第 2 课 - 输入(按键)控制输出(LED)-轮询

接下来就要在LED闪灯的基础上来实现按键控制LED的开关。
在源代码侧面需要做以下几个修改:

1. 通过 别名 获取设备树的一个button节点

#define SW0_NODE	DT_ALIAS(sw0) 

2. 通过节点获取一个 gpio 的实例

static const struct gpio_dt_spec button = GPIO_DT_SPEC_GET(SW0_NODE, gpios); 

3. 判断button 是否可用

	if (!gpio_is_ready_dt(&button))
	{
	return 0;
	}

4. 配置button 为输入模式

	ret = gpio_pin_configure_dt(&button, GPIO_INPUT);
	if (ret < 0)
	{
		return 0;
	}

5. 读取button的电平状态,并赋值给led端口

bool val = gpio_pin_get_dt(&button);
		gpio_pin_set_dt(&led, val);

6. 修改sleep时间,增加读取按键的响应速度

#define SLEEP_TIME_MS 100

完整的 main.c代码

点击查看代码
/*
 * Copyright (c) 2016 Intel Corporation
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#include <stdio.h>
#include <zephyr/kernel.h>
#include <zephyr/drivers/gpio.h>

//TODO: 6. 修改sleep时间,增加读取按键的响应速度
#define SLEEP_TIME_MS 100

/* The devicetree node identifier for the "led0" alias. */
#define LED0_NODE DT_ALIAS(led0) //通过别名获取设备树的 led0 节点
// TODO: 1. 通过 别名 获取设备树的一个button节点
#define SW0_NODE	DT_ALIAS(sw0) 
/*
 * A build error on this line means your board is unsupported.
 * See the sample documentation for information on how to fix this.
 */
static const struct gpio_dt_spec led = GPIO_DT_SPEC_GET(LED0_NODE, gpios); //通过节点获取一个 gpio 的实例
// TODO: 2. 通过节点获取一个 gpio 的实例
static const struct gpio_dt_spec button = GPIO_DT_SPEC_GET(SW0_NODE, gpios); 
int main(void)
{
	int ret;
	bool led_state = true;
	//在使用gpio外设之前判断是否可用
	if (!gpio_is_ready_dt(&led))
	{
		return 0;
	}
	// TODO: 3. 判断button 是否可用
	if (!gpio_is_ready_dt(&button))
	{
		return 0;
	}
	//配置为输出模式
	ret = gpio_pin_configure_dt(&led, GPIO_OUTPUT_ACTIVE);
	if (ret < 0)
	{
		return 0;
	}
	// TODO: 4. 配置button 为输入模式
	ret = gpio_pin_configure_dt(&button, GPIO_INPUT);
	if (ret < 0)
	{
		return 0;
	}
	while (1)
	{
		// TODO: 5. 读取button的电平状态,并赋值给led端口
		bool val = gpio_pin_get_dt(&button);
		gpio_pin_set_dt(&led, val);
		printf("LED set state: %s\n", val ? "ON" : "OFF");
		k_msleep(SLEEP_TIME_MS);
	}
	return 0;
}

编译成功后下载到开发板(我使用的是nRF52840DK)运行,按下BTUTTON1时,LED1亮起,松开时熄灭。

posted @   NEIKOO  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示