【XR806开发板试用】使用PWM模块模拟手机呼吸灯提示功能

news2024/11/15 21:36:37

一般情况下,我们的手机在息屏状态,当收到消息处于未读状态时,会有呼吸灯提醒,这次有幸抽中XR806开发板的试用,经过九牛二虎之力终于将环境搞好了,中间遇到各种问题,在我的另一篇文章中已详细描述–【X806开发板试用】WSL环境搭建问题及解决措施,本文主要介绍使用PWM模块模拟手机呼吸灯功能

1、实现思路

思路比较简单,就是将接有LED灯的IO配置为PWM输出,然后控制PWM的占空比随时间变化,不同的占空比对应不用的灯光亮度,适当调整变化周期,从而实现想要的呼吸灯功能;
从原理图看,LE灯接在PA21引脚(如下图)
在这里插入图片描述

根据XR806手册中引脚复用功能配置,该IO对应PWM2
在这里插入图片描述

PWM配置可以参考自带例程
/home/jackie/device/xradio/xr806/ohosdemo/iot_peripheral/src/test_pwm.c
初始化完成后,应用层可以按自己的思路控制PWM的占空比,实现呼吸灯(详见实现代码)。

2、实现代码

在/home/jackie/device/xradio/xr806/ohosdemo路径下新建一个文件夹led_breath,目录结构如下

/home/jackie/device/xradio/xr806/ohosdemo/led_breath/
├── BUILD.gn
└── main.c
BUILD.gn文件内容
import("/home/jackie/device/xradio/xr806/liteos_m/config.gni")

static_library("app_led_breath"){
    configs = []

    sources = [
        "main.c",
    ]

    cflags = board_cflags

    include_dirs = board_include_dirs
    include_dirs +=[
        "/home/jackie/base/iot_hardware/peripheral/interfaces/kits",
        "/home/jackie/kernel/liteos_m/kernel/arch/include",
    ]
}

main.c文件内容
#include <stdio.h>
#include "ohos_init.h"
#include "kernel/os/os.h"
#include "iot_gpio.h"
#include "iot_pwm.h"

static OS_Thread_t g_main_thread;

#define GPIO_ID_PA21 21
#define GPIO_ID_PA11 11

static void MainThread(void *arg)
{
    // unsigned int pwm_delay_cnt = 0;
	unsigned int pwm_channl = 2;
	unsigned int pwm_duty_ratio = 30;
	unsigned int pwm_freq = 2000;

    unsigned int dir_add_flag = 0;

	printf("pwm test ch%d start\r\n", pwm_channl);
	printf("pwm ch%d output duty ratio = %d, freq = %d\r\n", pwm_channl,
	       pwm_duty_ratio, pwm_freq);

	IoTPwmInit(pwm_channl);
	IoTPwmStart(pwm_channl, pwm_duty_ratio, pwm_freq);

    while(1)
    {
        if(pwm_duty_ratio >= 99)
        {
            dir_add_flag = 0;
        }
        else if(pwm_duty_ratio <= 0)
        {
            dir_add_flag = 1;
            OS_MSleep(1000);//灭500ms
        }

        if(dir_add_flag)
        {
            pwm_duty_ratio ++;
        }
        else
        {
            pwm_duty_ratio --;
        }
        
        IoTPwmStart(pwm_channl, pwm_duty_ratio, pwm_freq);
        OS_MSleep(5);       
        printf("freq=%d,duty=%d\n", pwm_freq, pwm_duty_ratio);
    }
}

void led_breathMain(void)
{
    printf("Ctrl led start\r\n");
    if(OS_ThreadCreate(&g_main_thread, "MainThread", MainThread, NULL, OS_THREAD_PRIO_APP, 4 * 1024) != OS_OK)
    {
        printf("[ERR] Create MainThread Failed\r\n");
    }
}

SYS_RUN(led_breathMain);

3、常规操作及注意事项

3.1 运行后会反复打印max_duty_ratio =

可以将该打印屏蔽掉,路径 /home/jackie/device/xradio/xr806/adapter/hals/iot_hardware/wifiiot_lite/iot_pwm.c,如下截图
在这里插入图片描述

3.2 编译时输入hb build就行了,只编译修改部分,不加-f

在这里插入图片描述

3.3 将img文件cp到windows路径下

在这里插入图片描述

3.4 升级

在这里插入图片描述

4、最终效果

https://www.bilibili.com/video/BV1FF411v7yB/?aid=295440616&cid=476678016&page=1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1538950.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试算法-83-不同路径 II

题目 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish”&#xff09;。 现在考虑网格中有障碍物。那么从左上角到…

手机投屏到电脑

手机投屏到电脑 Github 有2个开源的手机投屏项目&#xff1a; Scrcpy: https://github.com/Genymobile/scrcpy QtScrcpy: https://github.com/barry-ran/QtScrcpy 这2个项目都很好用&#xff0c;我这里用的是 Scrcpy&#xff1a; 官方文档中介绍了如何在windows上使用 Scrcpy…

mac 安装 nvm 【真解决问题】

前提 没有node环境已有git 下载 我用的gitee极速下载 git clone https://gitee.com/mirrors/nvm.git ~/.nvm && cd ~/.nvm && git checkout git describe --abbrev0 --tags配置 1. 配置变量 在用户的目录下新增文件 .zshrc export NVM_DIR"$HOME/…

java网络原理(二)------TCP确认应答和超时重传

一Tcp协议 TCP&#xff0c;即Transmission Control Protocol&#xff0c;传输控制协议。人如其名&#xff0c;要对数据的传输进行一个详细的控制。 二.TCP协议段格式 知道了端口号才能进一步确认这个数据报交给了哪一个程序。16为端口号是2字节&#xff0c;范围是0到65535.如…

CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板

CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板 —— 杭州 2024-03-20 凌晨1:06 code review! 文章目录 CMake笔记之将任意官方库作为third_party完整地包含在工程项目中使用的通用模板1.通用CMakeLists.txt模板2.GPT4给出的改进建议3.git clon…

【爬虫】实战-爬取Boss直聘信息数据

专栏文章索引&#xff1a;爬虫 所用工具&#xff1a; 自动化工具&#xff1a;DrissionPage 目录 一、找到目标数据(2个确定)​ 1.确定目标网页 2.确定目标网址 二、编写代码​ 三、查看数据​ 五、总结 一、找到目标数据(2个确定) 1.确定目标网页 打开目标网站 网站&am…

夜神-安卓9模拟器安装 面具(Magisk)

方法1-自带本地安装 1.模拟器助手添加安卓9 的模拟器 2.启动模拟器并安装Magisk Terminal Emulator.apk、Magisk.apk 新开的安卓9 安装这两个apk 3.打开Magisk Terminal Emulator 1、允许 2、输入m回车 3、输入y回车 4、超级用户授权允许1、 2和3 4 允许后跳到这个…

xAI开发的一款巨大型语言模型(HLM)--Grok 1

在xAI发布Grok的权重和架构之后&#xff0c;很明显大型语言模型&#xff08;LLM&#xff09;的时代已经过去&#xff0c;现在是巨大型语言模型&#xff08;HLM&#xff09;的时代。这个混合专家模型发布了3140亿个参数&#xff0c;并且在Apache 2.0许可下发布。这个模型没有针对…

Jenkins中支持maven构建遇到仓库报错问题

目的 Jenkins中支持maven构建(Jenkins使用docker安装&#xff09; 问题 1.构建一个maven项目 2.执行报错 /var/lib/jenkins/local_maven_repo/com/sx/root/1.0.4/root-1.0.4.pom.part.lock (No such file or directory) Failed to transfer Could not transfer artifact co…

【Spring整合QQ个人邮箱】

整合腾讯邮箱&#xff0c;首先需要在腾讯邮箱上开启服务&#xff0c;获取到授权码&#xff1b; 获取步骤如下&#xff1a; 进入设置 进入账号页 开启协议获取授权码 JavaMailSender配置 引入依赖 <!--邮件发送依赖--> <dependency><groupId>org.spring…

EI Scopus双检索| 2024年智能交通与未来出行国际会议(CSTFM 2024)

会议简介 Brief Introduction 2024年智能交通与未来出行国际会议(CSTFM 2024) 会议时间&#xff1a;2024年10月18日-20日 召开地点&#xff1a;中国杭州 大会官网&#xff1a;CSTFM 2024-2024 International Conference on Smart Transportation and Future Mobility(CSTFM 202…

学习笔记Day13:Linux进阶

Linux进阶 Vim——Linux自带的文本编辑器 功能强大 命令模式 使用 vim <file>进入后的默认模式可以上下左右移动光标 方向键/hjkl快速到所在行的开头^/末尾$向下移动30行30j&#xff08;上左右同&#xff09;上下翻页Ctrlf向上&#xff0c;Ctrlb向下翻页快速回到文件第…

网络原理(5)——IP协议(网络层)

目录 一、IP协议报头介绍 1、4位版本 2、4位首部长度 3、8位服务器类型 4、16位总长度 5、16位标识位 6、3位标志位 7、13位偏移量 8、8位生存空间 9、8位协议 10、16位首部检验和 11、32位源IP地址 12、32位目的IP地址 二、IP协议如何管理地址&#xff1f; 1、动…

【STM32嵌入式系统设计与开发】——6矩阵按键应用(4x4)

这里写目录标题 一、任务描述二、任务实施1、SingleKey工程文件夹创建2、函数编辑&#xff08;1&#xff09;主函数编辑&#xff08;2&#xff09;LED IO初始化函数(LED_Init())&#xff08;3&#xff09;开发板矩阵键盘IO初始化&#xff08;ExpKeyBordInit()&#xff09;&…

HCIA-Datacom H12-811 更新

完整题库及答案解析&#xff0c;请直接扫描上方二维码&#xff0c;持续更新中 在WLAN发展历史中&#xff0c;初级移动办公时代的主要无线协议标准不包括以下哪项&#xff1f; A. 802.11ac B. 802.11g C. 802.11b D. 802.11a 答案&#xff1a;A OSPF协议在进行主从关系选举…

Apipost智能Mock功能详解

在接口开发过程中&#xff0c;Mock功能可以帮助开发者快速测试和验证接口的正确性和稳定性&#xff0c;以便快速迭代和修复问题。Apipost推出智能Mock功能&#xff0c;可以在智能期望中填写一些触发条件&#xff0c;开启后&#xff0c;Apipost会根据已设置的触发条件&#xff0…

Qt教程 — 3.6 深入了解Qt 控件:Display Widgets部件(2)

目录 1 Display Widgets简介 2 如何使用Display Widgets部件 2.1 QTextBrowser组件-简单的文本浏览器 ​2.2 QGraphicsView组件-简单的图像浏览器 Display Widgets将分为两篇文章介绍 文章1&#xff08;Qt教程 — 3.5 深入了解Qt 控件&#xff1a;Display Widgets部件-CSDN…

MyBatis是纸老虎吗?(五)

最近看到这样一则消息《全球首位AI工程师诞生&#xff0c;“码农”未来会消失&#xff1f;》&#xff0c;文章提到百度董事长兼首席执行官李彦宏认为未来将不会存在“程序员”这种职业。行业大佬的这种说法&#xff0c;让我异常恐慌。难道程序员就这样被淘汰了&#xff1f;AI真…

YOLOv8 | 注意力机制 | ShuffleAttention注意力机制 提升检测精度

YOLOv8成功添加ShuffleAttention ⭐欢迎大家订阅我的专栏一起学习⭐ &#x1f680;&#x1f680;&#x1f680;订阅专栏&#xff0c;更新及时查看不迷路&#x1f680;&#x1f680;&#x1f680; YOLOv5涨点专栏&#xff1a;http://t.csdnimg.cn/1Aqzu YOLOv8涨点专栏…

力扣236 二叉树的最近公共祖先 Java版本

文章目录 题目描述代码 题目描述 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&…