我是Arduino初学者,今日尝试用Arduino nano 收串口发来16进制数据,再由软串口转发给下级设备,下级设备返回16进制数据。首先简单测试代码如下:
#include
SoftwareSerial mySerial(2,3);
void setup(){
Serial.begin(9600);
mySerial.begin(9600);
}
void loop(){
if (Serial.available() > 0) {
mySerial.write(Serial.read());
}
if (mySerial.available() > 0) {
Serial.write(mySerial.read());
}
}
使用串口助手发送数据,接收返回数据正常如下:
[14:18:18.096]发→◇FE FD 01 35 01 2D 01 35 01 B6 3D 9F 3B 33 3E A1 39 35 39 35 3C A1 3C 9F 3B 33 3E 9F 3B 33 3B A2 3B 35 39 33 3B 35 39 33 3B 33 3E 30 3B 33 3E 32 38 36 39 32 43 2B 3B 35 39 33 3B 33 3B 35 39 33 3E 32 39 33 3B 33 3B 35 3C 32 39 35 39 33 3B 33 3B 33 3B 35 3C 30 3B 33 3B 33 3E A1 39 33 3B A2 3B 33 3B 35 39 33 3B 35 39 33 3B 33 3B 33 3B 33 3B 33 3B 33 3E 30 3B 33 3B 33 3B 33 3E 30 3B A2 3B 33 3B 35 39 33 3B 35 39 33 3B 35 39 33 3A 33 3E 30 3E 32 39 33 3B 35 39 35 39 35 39 33 3E 32 39 35 39 33 3E 30 3B 35 39 35 39 33 3B 33 3B 33 3B 35 39 33 3B 33 3E 30 3E 30 3B 35 39 33 3B 33 3F 31 3C 32 39 33 3B 33 3E 30 3B 35 3C 32 39 35 39 35 39 35 39 A4 39 32 3E 9F 3B 36 38 33 3B 33 3B 33 3B A2 3B 36 38 A5 38 A2 3B A2 3B 33 3B A4 3C A1 39 35 3F 9E 39 33 3E 9F 3B 35 39 33 3B 35 3C 30 41 2F 39 33 3B 35 39 35 39 35 39 35 39 35 39 33 3B 33 3B 33 3B 33 3B 35 39 33 3B 35 39 35 39 35 39 35 39 33 3A 36 39 33 3B 33 3B 33 3A 33 3B 33 3B 33 3E 32 39 33 3B 35 3F 9C 3B 33 3B A2 3E 9F 3E 32 39 A2 3E 30 3B A4 3C FF □
[14:18:18.375]收←◆FE FC CF
现尝试加入在串口无命令发过来的状态下,没间隔1S发送其他定制内容
实验代码如下:
#include
SoftwareSerial mySerial(2,3);
String item;
void setup(){
item = "";
Serial.begin(9600);
mySerial.begin(9600);
}
void loop(){
if (Serial.available() > 0) {
mySerial.write(Serial.read());
} else {
if (mySerial.available() > 0) {
item = String(item) + String(char(mySerial.read()));
} else {
Serial.println("hello");
delay(1000);
}
if (String(item).length() > 0) {
Serial.print(item);
item = "";
}
}
}
输出结果:
[14:33:38.892]收←◆68 65 6C 6C 6F 0D 0A
[14:33:39.893]收←◆68 65 6C 6C 6F 0D 0A
[14:33:40.895]收←◆68 65 6C 6C 6F 0D 0A
[14:33:41.266]发→◇FE FD 01 35 01 2D 01 35 01 B6 3D 9F 3B 33 3E A1 39 35 39 35 3C A1 3C 9F 3B 33 3E 9F 3B 33 3B A2 3B 35 39 33 3B 35 39 33 3B 33 3E 30 3B 33 3E 32 38 36 39 32 43 2B 3B 35 39 33 3B 33 3B 35 39 33 3E 32 39 33 3B 33 3B 35 3C 32 39 35 39 33 3B 33 3B 33 3B 35 3C 30 3B 33 3B 33 3E A1 39 33 3B A2 3B 33 3B 35 39 33 3B 35 39 33 3B 33 3B 33 3B 33 3B 33 3B 33 3E 30 3B 33 3B 33 3B 33 3E 30 3B A2 3B 33 3B 35 39 33 3B 35 39 33 3B 35 39 33 3A 33 3E 30 3E 32 39 33 3B 35 39 35 39 35 39 33 3E 32 39 35 39 33 3E 30 3B 35 39 35 39 33 3B 33 3B 33 3B 35 39 33 3B 33 3E 30 3E 30 3B 35 39 33 3B 33 3F 31 3C 32 39 33 3B 33 3E 30 3B 35 3C 32 39 35 39 35 39 35 39 A4 39 32 3E 9F 3B 36 38 33 3B 33 3B 33 3B A2 3B 36 38 A5 38 A2 3B A2 3B 33 3B A4 3C A1 39 35 3F 9E 39 33 3E 9F 3B 35 39 33 3B 35 3C 30 41 2F 39 33 3B 35 39 35 39 35 39 35 39 35 39 33 3B 33 3B 33 3B 33 3B 35 39 33 3B 35 39 35 39 35 39 35 39 33 3A 36 39 33 3B 33 3B 33 3A 33 3B 33 3B 33 3E 32 39 33 3B 35 3F 9C 3B 33 3B A2 3E 9F 3E 32 39 A2 3E 30 3B A4 3C FF □
[14:33:41.962]收←◆68 65 6C 6C 6F 0D 0A
[14:33:42.962]收←◆68 65 6C 6C 6F 0D 0A
[14:33:43.963]收←◆68 65 6C 6C 6F 0D 0A
[14:33:44.964]收←◆68 65 6C 6C 6F 0D 0A
[14:33:45.964]收←◆68 65 6C 6C 6F 0D 0A
[14:33:46.965]收←◆68 65 6C 6C 6F 0D 0A
[14:33:47.966]收←◆68 65 6C 6C 6F 0D 0A
似乎下级设备没收到数据,无返回值,求助实现方法或解决办法
最终目的是想实现在串口没有发送数据时,按照延时发送数据包如“hello”
在串口收到数据时,向下级设备转发数据,并接受下级设备反馈回来的数据,从串口输出。
回答
你把 Serial.println(“hello”);
delay(1000);
这两句注释掉试一下。要是注释了以后能收到返回值,那就是你在delay的时候发送了数据,然后串口缓冲区溢出了。
#include
SoftwareSerial mySerial(2,3);
String item;
int count;
void setup(){
item = "";
count=0;
Serial.begin(9600);
mySerial.begin(9600);
}
void loop(){
if (Serial.available() > 0) {
mySerial.write(Serial.read());
count=0;
} else {
if (mySerial.available() > 0) {
Serial.write(mySerial.read());
count=0;
} else {
count++;
if (count>100000){
Serial.println("hello");
count=0;
}
}
}
}