第 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
亮起,松开时熄灭。
合集:
NCS学习笔记
分类:
NCS学习笔记 / 基础篇
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架