【萤火工场CEM5826-M11测评】Arduino 采集雷达模块数据与串口绘图
当采用串口输出模式时,雷达检测到运动时,则输出 v=0.0km/h, str=1234
字样;
v
表示目标速度大小,str
表示信号强度;
当雷达检测不到目标时,串口停止输出。
项目实现
Arduino 串口采集雷达模块数据,并通过串口打印至接收窗口,绘制 速度演化曲线 和 信号强度演化曲线 。
原始代码
void setup()
{
Serial.begin (115200);
while (Serial.read() >= 0){}//clear serialbuffer
}
String comdata = "";
void loop() {
if (Serial.available() > 0)
{
char data = Serial.read();
comdata += data;
if (data == '\n')
{
Serial.println (comdata);
comdata = "";
}
}
}
串口打印
注意到串口打印出的字符串既包含文字也包含数字,若要实现串口绘图,则需将其中的数字部分提取出来。
代码升级
String comdata = "";
void setup()
{
Serial.begin (115200);
while (Serial.read() >= 0){}//clear serialbuffer
}
void loop() {
if (Serial.available() > 0)
{
char data = Serial.read();
comdata += data;
if (data == '\n')
{
// 分割字符串
int separatorIndex = comdata.indexOf(','); // 假设分隔符为逗号
if (separatorIndex != -1)
{
String part1 = comdata.substring(0, separatorIndex); // 第一个部分
String part2 = comdata.substring(separatorIndex + 1); // 第二个部分
// 打印分割后的数据
Serial.println(part1);
Serial.println(part2);
}
comdata = "";
}
}
}
效果
数字提取
同理,对 part1
和 part2
进行分离提取索引数字
String comdata = "";
void setup()
{
Serial.begin (115200);
while (Serial.read() >= 0){}//clear serialbuffer
}
void loop() {
if (Serial.available() > 0)
{
char data = Serial.read();
comdata += data;
if (data == '\n')
{// type of comdata: v=1.0 km/h, str=10151
int separatorIndex = comdata.indexOf(','); // 假设分隔符为逗号
if (separatorIndex != -1)
{
String part1 = comdata.substring(0, separatorIndex); // 第一个部分
String part2 = comdata.substring(separatorIndex + 1); // 第二个部分
// 打印分割后的数据
//Serial.println(part1); // type of part1: v=1.0 km/h
//Serial.println(part2); // type of part2: str=10151
/*------------ part1 : v=1.0 km/h ----------*/
int part1separatorIndex = part1.indexOf('='); //index of '='
if (part1separatorIndex != -1)
{
String vlc = part1.substring(part1separatorIndex + 1); // index of velocity, type of vlc is 1.0 km/h
// vlc: 1.0 km/h
int VLCseparatorIndex = vlc.indexOf(' '); // index of ' '
String v = vlc.substring(0, VLCseparatorIndex);// v only include number
float Vn = v.toFloat();
Serial.print(Vn); // print velocity number
Serial.print(',');
}
/*------------- part2 : str=10151 ------------------*/
int part2separatorIndex = part2.indexOf('='); //index of '='
if (part2separatorIndex != -1)
{
String strng = part2.substring(part2separatorIndex + 1); // strng only include number
int Sn = strng.toInt();
Serial.print(Sn); // print strength number
}
Serial.println();
}
comdata = "";
}
}
}
流程图
串口打印数字