本帖最后由 noonezero 于 2024-3-22 07:56 编辑
本帖最后由 noonezero 于 2024-3-22 07:49 编辑
本帖最后由 noonezero 于 2024-3-21 21:49 编辑
说明
原来是想用我之前小安派做的智能家居控制器加功能的
不加LVGL正常接收
加了LVGL后,烧录进去就直接无法运行了
暂时还在排查和哪里的代码冲突了
原本的想法也就先暂时搁置了
这次先使用BW16点个灯吧,后续弄好了我在发个帖子
开发板介绍
本次使用的是安信可的双模模组(既可以连接2.4G 也可以 5G)
具体可以看官方资料瑞昱BW系列模组专题 | 安信可科技 (ai-thinker.com)
具体使用可以见我后续帖子,不忙了会陆续更新的
RD03E |
BW16 |
VCC |
5V |
GND |
GND |
OT1 |
PB2 |
RX |
PB1 |
实物
代码
bool zhen_one = false; // 判断帧数据第一位 AA
bool zhen_two = false; // 判断帧数据第二位 AA
int index_num = -1;
char msgarr[3] = {0}; // 接收的数据
void setup() {
Serial.begin(115200); // 用于主机通信
Serial1.begin(256000); // RD03E通信
pinMode(PA12, OUTPUT); // BW16的RGB灯初始化
pinMode(PA13, OUTPUT);
pinMode(PA14, OUTPUT);
while (!Serial);
while (!Serial1);
Serial.println("lail,laodi----");
}
void loop() {
while (Serial1.available() > 0) {
char msg = Serial1.read();
// Serial.print(msg, HEX);
// Serial.print(" ");
// 开始判断
if ((int)msg == 0xAA && zhen_one == false){ // 先判断是不是 AA 然后再判断是不是第一字节数据
zhen_one = true;
continue; // 防止触发下一个判断
}
if((int)msg == 0xAA && zhen_one == true){
if (zhen_two == false){ // 先判断是不是 AA 然后再判断是不是第二字节数据
zhen_two = true;
continue; // 防止触发下一个判断
}
}
if (zhen_one == true && zhen_two == true){
index_num += 1;
msgarr[index_num] = msg;
if(index_num == 2){
// Serial.print(msgarr[0], HEX); // 运动微动
// Serial.print(" ");
// Serial.print(msgarr[1], HEX); // 距离低8位
// Serial.print(" ");
// Serial.print(msgarr[2], HEX); // 高8位
// Serial.println();
zhen_one = false;
zhen_two = false;
index_num = -1;
if((int)msgarr[0] > 0){
if((int)msgarr[0] == 1){
Serial.print("Y: ");
}
else{
Serial.print("W: ");
}
int distance = ((int)msgarr[2] << 8) | (int)msgarr[1];
Serial.println(distance);
if(distance <= 40){ // 红灯
digitalWrite(PA12, HIGH);
digitalWrite(PA13, LOW);
digitalWrite(PA14, LOW);
}
else if(distance > 40 && distance <= 80){ // 蓝灯
digitalWrite(PA12, LOW);
digitalWrite(PA13, HIGH);
digitalWrite(PA14, LOW);
}
else if(distance > 80){ // 绿灯
digitalWrite(PA12, LOW);
digitalWrite(PA13, LOW);
digitalWrite(PA14, HIGH);
}
}
else{
digitalWrite(PA12, HIGH); // 无目标信息。白光
digitalWrite(PA13, HIGH);
digitalWrite(PA14, HIGH);
}
}
}
}
}
串口输出
代码详解
在Setup函数中,初始化了串口和RGB引脚 OUTPUT 模式
在loop函数中,判断串口是否有数据,有,读取,先判断连续两个 0XAA,证明是帧头,
接下来开始读取1位目标状态,1运动 2微动
读取2位距离信息,转成16位数据
然后根据距离信息显示不同颜色的灯
显示效果
小于40cm
40 - 80蓝灯
> 80 绿灯
无人状态
无人状态是全亮,白灯。但是不好拍照,就没拍了 |