发帖
22 1 2

【雷达灯控】安信可 Rd-03E+ 灯 + Ai-M61-32S 手势识别

WT_0213
论坛元老

105

主题

1482

回帖

1万

积分

论坛元老

积分
13486
电子DIY 2579 22 2024-3-10 22:14:12

本帖最后由 WT_0213 于 2024-3-14 09:03 编辑

免费申请 | 挑战智能家居!毫米波雷达模组,100个名额,先到先得!(活动已停)

https://bbs.ai-thinker.com/forum.php?mod=viewthread&tid=44214

参加论坛活动,用毫米波雷达点灯。由于没有合适的灯控制,直接点亮M61-32S上面的LED了。

基于Rd-03E原生固件通过手势识别进行点灯。

企业微信截图_20240311084953.png

相关资料:

Rd-03E手势识别上位机:Rd-03E手势识别上位机

Rd-03E快速入门使用文档

Rd-03E 手势识别固件用户手册

接线方式:

Rd-03E M61-32S
VCC 5V
GND GND
OT1 GPIO24
RX GPIO23

如下图按数字标号连线即可。
WX20240310-220354.png

1710079596294.jpg

下面是示例代码:

#include "bflb_mtimer.h"
#include "board.h"
#include "bflb_uart.h"
#include "bflb_gpio.h"
#include "FreeRTOS.h"
#include "task.h"
#include "math.h"

#define DBG_TAG "MAIN"
#include "log.h"

struct bflb_device_s *gpio;
struct bflb_device_s *rd03e;
uint8_t UART_RECEIVE_BUFFER[5];

// 创建任务持续获取雷达数据
void _rd03eTask(void* pvParameters){
    int index = 0;
    int data_count = 5;
    int status = 0;
    while (1)
    {
          // 获取单个数据
         int ch = bflb_uart_getchar(rd03e);
        // 如果ch不等于-1说明有数据
         if(ch!=-1){
            // 如果当前数据是雷达指令头
            if(ch == 0xAA){
                 // 重置数据缓存
                memset(UART_RECEIVE_BUFFER,0 , data_count);
                index = 0;
            }
            // 如果当前数据量小于指令数据
            if(index < data_count){
                UART_RECEIVE_BUFFER[index++] = ch;
                // 如果是数据帧结束标记
                if(ch == 0x55){
                    // for (size_t i = 0; i < data_count; i++)
                    // {
                    //     printf("0x%02x ", UART_RECEIVE_BUFFER[i]);
                    // }
                    // 检测手势
                    if(UART_RECEIVE_BUFFER[3] == 0x01){
                      printf("触发了手势\r\n");   
                      if(status==0){
                        status = 1;
                        bflb_gpio_set(gpio, GPIO_PIN_14);
                      }else{
                        status = 0;
                        bflb_gpio_reset(gpio, GPIO_PIN_14);
                      }
                    }
                    // printf("\r\n");
                }
            }
         }
       vTaskDelay(1);
    }
  
}

int main(void)
{
    board_init();
    // 初始化gpio
    gpio = bflb_device_get_by_name("gpio");

    // 初始化led针脚gpio
    bflb_gpio_init(gpio, GPIO_PIN_14, GPIO_OUTPUT | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_0);
    bflb_gpio_reset(gpio, GPIO_PIN_14);

    // 初始化uart
    rd03e = bflb_device_get_by_name("uart1");
    // 初始化uart gpio
    bflb_gpio_uart_init(gpio, GPIO_PIN_23, GPIO_UART_FUNC_UART1_TX);
    bflb_gpio_uart_init(gpio, GPIO_PIN_24, GPIO_UART_FUNC_UART1_RX);

    // 初始化uart配置参数
    struct bflb_uart_config_s conf = {
        .baudrate = 256000,
        .data_bits = UART_DATA_BITS_8,
        .stop_bits = UART_STOP_BITS_1,
        .parity = UART_PARITY_NONE,
        .flow_ctrl = UART_FLOWCTRL_NONE,
        .rx_fifo_threshold = 7,
        .tx_fifo_threshold = 7
    };

    bflb_uart_init(rd03e, &conf);

    // 创建任务接收数据
    xTaskCreate(_rd03eTask, (char*)"rd03e", 1024, NULL, 1, NULL);
    vTaskStartScheduler();

    while (1) {
   
    }
}

──── 1人觉得很赞 ────

使用道具 举报

2024-3-10 22:53:49

本帖最后由 WT_0213 于 2024-3-11 09:22 编辑

目前仅支持手势开灯

2024-3-11 08:46:43
2024-3-11 08:48:23
可以可以
2024-3-11 09:15:12
tql
2024-3-11 09:15:45
有个图裂开了!
2024-3-11 09:19:05
2024-3-11 09:24:11
爱笑 发表于 2024-3-11 09:15
有个图裂开了!

应该是好了吧
2024-3-11 09:27:31
智能马桶
2024-3-11 11:27:03
您需要登录后才可以回帖 立即登录
高级模式
123下一页
统计信息
  • 会员数: 28374 个
  • 话题数: 40420 篇