本帖最后由 AndyL 于 2024-3-31 18:42 编辑
一、涉及的相关硬件设备
1、CH583M(主控设备)
2、RD-03E(雷达模块/手势识别模式)
3、LED(RGB三色灯)
二、(雷达人体识别蓝牙灯控)主要功能
1、测距模式:在设定的距离范围内,LED会根据雷达识别到人体的范围分别显示出不同的颜色(R,G,B)三色,并在串口中输出当前的距离。(当超出指定范围,将会关闭灯光 (节能))
2、手势模式:当雷达首次识别到手势时,根据蓝牙发送的指令,LED显示设定的颜色(常亮/测距模式失效)。
3、手势模式:当雷达再次识别到手势时,LED熄灭,并重新变为测距模式。
三、具体代码分析如下:
1、主函数(基于TMOS蓝牙任务调度机制):
int main(void)
{
SetSysClock(CLK_SOURCE_PLL_80MHz);
#ifdef DEBUG
GPIOA_SetBits(bTXD1); //prinf到串口1中 PA8/9 115200
GPIOA_ModeCfg(bTXD1, GPIO_ModeOut_PP_5mA);
UART1_DefInit();
#endif
CH58X_BLEInit();//BLE库初始化
HAL_Init();//硬件初始化
GAPRole_PeripheralInit();//GAP角色初始化,初始化为外围设备,协议栈API函数
Peripheral_Init();//外围设备,自定义参数初始化,自定义函数
app_uart_init();//蓝牙串口初始化
Pwm_Init(); //LED的PWM模式初始化
Main_Circulation();
}
2、LED(RGB)相关处理函数:
(通过PWM模式控制LED灯的亮灭,以及任意颜色的实现)
由于主控设备的硬件PWM模式只有8位,所以PWM周期会较短,但刚好8位可以实现Plusewidth为0-255取值范围,刚好对应RGB(R,G,B)的三个参数的取值范围,从而实现五颜六色。
3、雷达数据(串口3)发送到蓝牙上(在串口1输出相关数据)
对收到的雷达数据进行相关处理,首先判断是否为有效数据,然后再进行相关处理(对FIFO中数据滤波/测距模式下显示指定颜色,并在串口1(上位机)中打印出距离/将蓝牙发送的数据保存在全局数组中,当识别到手势时,将数据传入到PWM函数中,实现指定颜色常亮/再次识别时手势时,指定颜色熄灭重新变为测距模式)
4、蓝牙发送数据到主控芯片(串口3)
(初始颜色为白光,当蓝牙发送数据时,将数据存入全局数组中当识别到手势时,更改LED颜色(arr_color中的值))
三、关于蓝牙(TMOS处理机制/事件处理/收发数据)、串口收发数据(FIFO)更多细节内容(后续...)
后续将通过小程序连接设备,实现实时距离显示以及灯光交互等效果。
(🤥未完待续...?😴) |