【外设验证】SG90舵机

[复制链接]
查看376 | 回复11 | 2024-4-13 09:10:07 | 显示全部楼层 |阅读模式

本帖最后由 wukong50 于 2024-4-15 18:06 编辑

说明

本次验证了 zlook119 大佬 PWM 驱动 SG90舵机 模块 外设库

【外设移植】SG90舵机Ai-M61开发板 - DIY 经验分享 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)

直接跑 Demo 了

验证成功

显示速度没这么慢,为了能显示,改成 gif 图片,中间断帧

Arduino 和 SDK 显示效果一样

我视频中是MG90S,控制代码显示和SG90一样

WeChat_2024041308563300-00-00--00-00-10.gif

使用

我把外设移植通过验证的的库统一会放到 Gitee 仓库,仓库中分别有 SDK 库方式 和 Arduino 库方式(可移植)

接线

不建议直接接开发板电源,单独供电最好,容易烧板子

单独供电记得共地(GND和GND连一起)

1711609895661.png

GIT 仓库

https://gitee.com/wukong50/m61-libraries.git

SDK 使用方式

SDK 模式

  1. 克隆 Git 仓库
  2. 切换到此目录下
m61-libraries\Servo\SDK\Servo
  1. 修改 Makefile SDK 路径

image.png

  1. 直接 make flash 即可
  2. 烧录的时候需要手动进入烧录模式,先将按住板子上的"IO2"再按一下"EN"使板子进入烧录模式
  3. 烧录有问题,请看文章末尾答疑

Arduino 模式

  1. 克隆 Git 仓库
  2. 复制此目录下文件夹到 Arduino 项目目录 libraries 目录里面
m61-libraries\Servo\Arduino

如图 我的项目文件夹在 D 盘 M61 目录下

那 M61 目录结构就是 libraries 里面粘贴 SG90,如果 libraries 目录没有,需要手动新建一个

目录结构

M61/
└── libraries
    └── Servo
        ├── examples
        │   └── SG90
        │       └── SG90.ino
        ├── library.properties
        └── src
            ├── bflb_servo.cpp
            └── bflb_servo.h

此时,选择好开发板

image.png

在示例中点击示例,就可以运行了

image.png

  1. 烧录的时候需要手动进入烧录模式,先将按住板子上的"IO2"再按一下"EN"使板子进入烧录模式

答疑

  1. 如何搭建 linux 环境 零基础搭建小安派 Linux 开发环境之【编译运行 Hello world】 - 小安派 S1&M61 教程合集 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)
  2. 编译报错#lwip/dns.h 关于编译报错#lwip/dns.h 找不到的解决办法 - 小安派 S1&M61 教程合集 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)
  3. 如何搭建 Arduino 环境 小安派自学笔记 3-arduino 环境安装与编译点灯 - 小安派 S1&M61 教程合集 - 物联网开发者社区-安信可论坛 - Powered by Discuz! (ai-thinker.com)
回复

使用道具 举报

bzhou830 | 2024-4-13 09:13:24 | 显示全部楼层
效率很高哟
选择去发光,而不是被照亮
回复 支持 反对

使用道具 举报

wukong50 | 2024-4-13 09:24:55 | 显示全部楼层

大佬,你的矩阵键盘读取键盘值应该是错误的
另外,能不能把3行4列,改成4行3列,这样123 456 789 会更方便
回复 支持 反对

使用道具 举报

干簧管 | 2024-4-13 10:25:24 | 显示全部楼层
回复

使用道具 举报

bzhou830 | 2024-4-13 13:17:37 | 显示全部楼层
wukong50 发表于 2024-4-13 09:24
大佬,你的矩阵键盘读取键盘值应该是错误的
另外,能不能把3行4列,改成4行3列,这样123 456 789 会更方 ...

也是可以的,这样写的原因是直接接的小安派S1的排针接口上。
对调一下插口就程序就可以修改了
选择去发光,而不是被照亮
回复 支持 反对

使用道具 举报

wukong50 | 2024-4-13 14:06:46 | 显示全部楼层

[quote][size=2][color=#999999]bzhou830 发表于 2024-4-13 13:17[/color][/size] 也是可以的,这样写的原因是直接接的小安派S1的排针接口上。 对调一下插口就程序就可以修改了 ...[/quote]

是这个代码中,按这代码布局,键盘读取的值和后面对应的注释不对

所以,矩阵键盘按的应该和实际不符

0x0001 应该是0行0列

0x0002 应该是0行1列

0x0004 应该是0行2列

0x0008 应该是0行3列 0行3列 不是4的位置,至此以后,数字就都偏移了

这是其一

其二

您0行对应的应该是 1 4 7 * 不是 1 2 3 4

// 矩阵键盘的行线和列线的定义
const uint8_t rows[] = { GPIO_PIN_33, GPIO_PIN_32, GPIO_PIN_31, GPIO_PIN_30};
const uint8_t cols[] = { GPIO_PIN_29, GPIO_PIN_27, GPIO_PIN_25};
void matrix_keys_task(void *params)
{
    int key_val = 0;
    matrix_keys_init();
    while(1)
    {
        key_val = get_key_val();
        if(key_val != 0)
        {
            printf("%x\r\n", key_val);
            switch(key_val)
            {
                case 0x0001:
                    key_val = 0x1e; // 1
                    break;
                case 0x0002:
                    key_val = 0x1f; // 2
                    break;
                case 0x0004:
                    key_val = 0x20; // 3
                    break;
                case 0x0008:
                    key_val = 0x21; // 4
                    break;
                case 0x0010:
                    key_val = 0x22; // 5
                    break;
                case 0x0020:
                    key_val = 0x23; // 6
                    break;
                case 0x0040:
                    key_val = 0x24; // 7
                    break;
                case 0x0080:
                    key_val = 0x25; // 8
                    break;
                case 0x0100:
                    key_val = 0x26; // 9
                    break;
                case 0x0200:
                    key_val = HID_KBD_USAGE_A;   // A
                    break;
                case 0x0400:
                    key_val = 0x27; //0
                    break;
                case 0x0800:
                    key_val = HID_KBD_USAGE_A + 1; // B
                    break;
            }

            if (xQueueSend(xQueue, &key_val, portMAX_DELAY) != pdPASS) 
            {
            }
        }
        bflb_mtimer_delay_ms(10);
    }
}
回复 支持 反对

使用道具 举报

wukong50 | 2024-4-13 14:08:40 | 显示全部楼层
bzhou830 发表于 2024-4-13 13:17
也是可以的,这样写的原因是直接接的小安派S1的排针接口上。
对调一下插口就程序就可以修改了 ...

您好,我新的回复 您看下,MD格式好像是跟帖 不知道会不会 @ 您
回复 支持 反对

使用道具 举报

WangChong | 2024-4-13 15:44:42 | 显示全部楼层
快看看我的
回复 支持 反对

使用道具 举报

wukong50 | 2024-4-13 15:45:56 | 显示全部楼层

王哥 3.5的那个缓缓,我慢慢消化下,数码管的今天或者明天出
回复 支持 反对

使用道具 举报

WangChong | 2024-4-13 19:46:41 | 显示全部楼层
wukong50 发表于 2024-4-13 15:45
王哥 3.5的那个缓缓,我慢慢消化下,数码管的今天或者明天出

哈哈哈 辛苦了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则