登录发现更多内容
首页
分类
发帖
账号
自动登录
找回密码
密码
登录
立即注册
立即登录
立即注册
其他登录
QQ
微信
首页
Portal
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
产品教程
BBS
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
开发资料
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
样品购买
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
IoT云平台
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
GitHub
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
技术博客
求助问答
Xiuno资源
Xiuno教程
Xiuno插件
Xiuno主题
休闲茶馆
定制主题
搜索
搜索
热搜:
LoRa
ESP8266
安信可
本版
帖子
用户
请
登录
后使用快捷导航
没有账号?
立即注册
每日签到
任务
广播
导读
排行榜
设置
我的收藏
退出
9
0
0
首页
Ai-M61-Kit点灯教程
›
安信可Ai-M61-32SU PWM 点 RGB
返回列表
安信可Ai-M61-32SU PWM 点 RGB
[ 复制链接 ]
发布帖子
lovzx
论坛元老
25
主题
246
回帖
9721
积分
论坛元老
论坛元老, 积分 9721, 距离下一级还需 9990278 积分
论坛元老, 积分 9721, 距离下一级还需 9990278 积分
积分
9721
私信
9人留言
楼主
Ai-M61-Kit点灯教程
1256
9
2024-5-4 20:02:55
[i=s] 本帖最后由 lovzx 于 2024-5-4 20:02 编辑 [/i]
> 本帖最后由 lovzx 于 2024-5-4 20:02 编辑 > 本帖最后由 lovzx 于 2024-5-4 20:01 编辑 ### M61-32SU-Kit RGB DEMO ### 准备工作 - 开发环境 这一步可以参考论坛是各位大佬的教程,写的很详细 - 开发板 因为之前搭建过小安派的开发环境,M61-32开发板和小安派一样都是用的BL616/BL618芯片,这俩芯片开发环境是可以通用的,所以我这边就没有配置什么就可以直接上手写代码了 ### 项目思路 考虑到开发板上有RGB的灯和板载的用户按键,首先就想到了用按键控制RGB的开启和关闭,其次考虑到RGB是内置了三颗红绿蓝的led灯珠,于是就有了通过shell命令来单独控制每一颗灯珠的亮度,控制LED灯亮度首选PWM方式,以上就是全部的功能了 - 板载按键控制RGB开启和关闭 - 通过shell命令单独控制RGB三颗小灯珠的亮度 最终实现的shell命令有下面3个: 1. rgb\_on 开启RGB灯 2. rgb\_off 关闭RGB灯 3. rgb 控制rgb灯珠亮度,参数可以是0xFF00FF十六进制,也可以是255.200.22十进制格式,数据从高位到低位分别对应的是R,G,B三颗灯珠的参数 ### 运行效果
### 代码 ##### 按键key代码 - 初始化按键 ```c //板载key init gpio = bflb_device_get_by_name("gpio"); bflb_gpio_init(gpio, PIN_KEY, GPIO_INPUT | GPIO_PULLDOWN); bflb_gpio_set(gpio, PIN_KEY); ``` - 注册button ```c button_t key2; //读取gpio函数 key2.usr_button_read = user_button_read; //事件回调函数 key2.cb = key_response_callback; key2.click_hold_start_tick = FLEX_MS_TO_SCAN_CNT(100); button_register(&key2); ``` 然后就是在while中循环获取到GPIO的状态通过状态机更新用户事件,然后在回调里面触发RGB动作 ```c //扫描GPIO状态 while (1) { button_scan(); bflb_mtimer_delay_ms(10); } ``` - 读取按键GPIO数据 ```c uint8_t user_button_read(void) { return bflb_gpio_read(gpio, PIN_KEY); } ``` - 更新RGB状态 - ```c void key_response_callback(void* argv) { if (button_event_read(btn) == BTN_EVENT_PRESS_CLICK) { printf("event: down\n"); rgb_toggle(); } } ``` ##### rgb设备初始化 ```c void rgb_init() { gpio = bflb_device_get_by_name("gpio"); pwm = bflb_device_get_by_name("pwm_v2_0"); //初始化GPIO为PWM功能 bflb_gpio_init(gpio, RGB_R, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, RGB_G, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); bflb_gpio_init(gpio, RGB_B, GPIO_FUNC_PWM0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1); //pwm配置 struct bflb_pwm_v2_config_s cfg = { .clk_source = BFLB_SYSTEM_PBCLK, .clk_div = 80, .period = 2550, }; bflb_pwm_v2_init(pwm, &cfg); bflb_pwm_v2_channel_set_threshold(pwm, PWM_R, 0, 2550); bflb_pwm_v2_channel_set_threshold(pwm, PWM_G, 0, 2550); bflb_pwm_v2_channel_set_threshold(pwm, PWM_B, 0, 2500); bflb_pwm_v2_start(pwm); } ``` - rgb\_on 开启RGB代码 ```c void rgb_light_on() { if (light_status != 1) { light_status = 1; bflb_pwm_v2_channel_negative_start(pwm, PWM_R); bflb_pwm_v2_channel_positive_start(pwm, PWM_R); bflb_pwm_v2_channel_positive_start(pwm, PWM_G); bflb_pwm_v2_channel_negative_start(pwm, PWM_G); bflb_pwm_v2_channel_positive_start(pwm, PWM_B); bflb_pwm_v2_channel_negative_start(pwm, PWM_B); bflb_pwm_v2_start(pwm); } } ``` - rgb\_off 关闭RGB代码 ```c void rgb_light_off() { if (light_status != 0) { light_status = 0; //R bflb_pwm_v2_channel_negative_stop(pwm, PWM_R); bflb_pwm_v2_channel_positive_stop(pwm, PWM_R); //G bflb_pwm_v2_channel_positive_stop(pwm, PWM_G); bflb_pwm_v2_channel_negative_stop(pwm, PWM_G); //B bflb_pwm_v2_channel_positive_stop(pwm, PWM_B); bflb_pwm_v2_channel_negative_stop(pwm, PWM_B); bflb_pwm_v2_stop(pwm); } } ``` - PWM分别控制R/G/B灯珠 ``` int rgb_update(int r, int g, int b) { printf("r: %d, g: %d, b: %d\n", r, g, b); bflb_pwm_v2_channel_set_threshold(pwm, PWM_R, 0, r * 10); bflb_pwm_v2_channel_set_threshold(pwm, PWM_G, 0, g * 10); bflb_pwm_v2_channel_set_threshold(pwm, PWM_B, 0, b * 10); if (light_status == 0) { rgb_light_on(); } } ``` - 注册shell命令 ``` /** * @brief 开灯 * @param argc * @param argv * @return int */ int rgb_shell_on(int argc, const char** argv) { rgb_light_on(); return 0; } /** * @brief 关灯 * @param argc * @param argv * @return int */ int rgb_shell_off(int argc, const char** argv) { rgb_light_off(); return 0; } /** * rgb 0xff0000 red * rgb 0x00ff00 green * rgb 0x0000ff blue * * * 十进制模式.0结尾可以省略 * rgb 255 red * rgb 0.255 green * rgb 0.0.255 blue * * @brief * @param argc * @param argv * @return int */ int rgb_shell(int argc, const char** argv) { if (argc != 2 || argv[1] == '\0' || strlen(argv[1]) <= 0) { printf("Usage:[%s] 0xFF00|255.0.0\n", argv[0]); return 0; } char* color_str = argv[1]; //转换大小写 color_str = strupr(color_str); if (strncmp(color_str, "0X", 2) == 0) { int int_color = strtol(color_str, NULL, 16); //16-24bit int r = int_color >> 16 & 0xff; //9-16bit int g = int_color >> 8 & 0xff; //1-8bit int b = int_color & 0xff; rgb_update(r, g, b); return 0; } int array[3] = { -1,0,0 }; char* token = strtok(color_str, "."); int index = 1; if (strisdigit(color_str)) { array[0] = atoi(color_str); } while (token != NULL) { token = strtok(NULL, "."); if (strisdigit(token)) { array[index] = atoi(token); } else { break; } index++; } for (int i = 0; i < 3;i++) { if (array[i] < 0 || array[i] > 255) { printf("Usage:[%s] 0xFF00|255.0.0\n", argv[0]); return 0; } } rgb_update(array[0], array[1], array[2]); return 0; } //注册rgb_on shell命令 SHELL_CMD_EXPORT_ALIAS(rgb_shell_on, rgb_on, rgb on); //注册rgb_off shell 命令 SHELL_CMD_EXPORT_ALIAS(rgb_shell_off, rgb_off, rgb off); //注册rgb 调节 shell 命令 SHELL_CMD_EXPORT_ALIAS(rgb_shell, rgb, rgb_shell); ``` [点击下载代码]([https://gitee.com/jrobot](https://gitee.com/jrobot)\_Q\_Q/m61\_-rgb\_-demo)
Ai-M61-32S
PWM点灯
点赞
0
收藏
0
淘帖
0
────
0
人觉得很赞
────
相关帖子
【祖传点灯】安信可Ai-M61-32S 点灯
【祖传点灯】安信可Ai-M61-32S 运行实例
【祖传点灯】安信可Ai-M61-32S
【祖传点灯】安信可Ai-M61-32S + 初次点灯
【祖传点灯】安信可Ai-M61-32S
【祖传点灯】安信可Ai-M61-32S + 点灯,交作业
【祖传点灯】安信可Ai-M61-32S + Clion环境配置 + 点自己的灯
AI_M61-32S核心板
【求助贴】SDK更新后如何搭建开发环境
回复
使用道具
举报
9 回复
电梯直达
正序浏览
倒序浏览
正序浏览
沙发
sansui
回复
使用道具
举报
2024-5-25 16:09:15
大佬啊
回复
评论
使用道具
举报
板凳
7788
回复
使用道具
举报
2024-6-6 16:04:26
666
回复
评论
使用道具
举报
地板
楚华
回复
使用道具
举报
2024-6-6 19:05:25
恭喜
回复
评论
使用道具
举报
5
#
物联网
回复
使用道具
举报
2024-6-7 18:18:57
学习学习
回复
评论
使用道具
举报
6
#
wurong
回复
使用道具
举报
2024-6-24 19:05:03
感谢分享
回复
评论
使用道具
举报
7
#
timo
回复
使用道具
举报
2024-7-2 15:04:07
厉害了
回复
评论
使用道具
举报
8
#
iiv
回复
使用道具
举报
2024-7-3 19:48:58
感谢分享
回复
评论
使用道具
举报
9
#
wukong50
回复
使用道具
举报
2024-7-27 20:10:16
shell命令呀
回复
评论
使用道具
举报
10
#
noonezero
回复
使用道具
举报
2024-10-6 12:59:50
大佬点灯
回复
评论
使用道具
举报
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
立即登录
手机登录
点评
高级模式
本版积分规则
回帖并转播
回帖后跳转到最后一页
返回
今日推荐
【BW20-12F开发板评测】6、Zephyr初步
【安信可BW20-12F-Kit测评】“高级” 点灯
【电子DIY作品】默语智家-AI智能机器狗(立创地文星开发板+安信
【BW20-12F开发板评测】5、NTP时钟
【安信可BW20-12F-Kit测评】环境搭建
【安信可BW20-12F-Kit测评】环境搭建
【BW20-12F 】开发板 WiFi LED 状态指示项目开发教程
求助,Ai-WB2-05W烧录模式一直发送0xff
【BW20-12F开发板评测】4、虚拟文件系统
Ai-WB2-05W烧录模式下是不是没有开启SDIO
热帖排行
Ai-WB2的AT指令发送https请求,如何设置header
热力图贡献
UWB 跟随小车 BU04 可以用esp32s3来控制汽车吗?
【BW20-12F开发板评测】6、Zephyr初步
AI-M62-13U 启动蓝牙从机失败,请帮忙查看是什么情况,多谢
【安信可BW20-12F-Kit测评】“高级” 点灯
【电子DIY作品】默语智家-AI智能机器狗(立创地文星开发板+安信
【BW20-12F开发板评测】5、NTP时钟
统计信息
会员数: 30224 个
话题数: 44436 篇
首页
分类
我的