Arduino mega 2560 Serial3.Read()讀不到
用Arduino Mega 2560 的Serial3.Read(); 要把資料讀進來,在用Serial3.printel()顯示,但就是無法有數值顯示?是程式有問題嗎?
void setup(){
Serial.begin(9600, SERIAL_7E1);
Serial3.begin(9600 ,SERIAL_7E1);
Serial.println("Hello");
Serial3.println("Hello");
}
void loop(){
if(Serial3.available()){ // 如果 Serial3 有資料,則進入 if
Serial3.println(readLine3());
}
}
String readLine3(){// 讀取一整行
String s ="";
char c;
while((c = Serial3.read()) !='\n'){
s += c;
}
return s;
} 是自收发测试还是用其他的模块给Arduino发送的消息?看你使用的格式是7E1,是不是另一个设备的格式和他不同?
164335413 发表于 2016-6-21 14:13 static/image/common/back.gif
是自收发测试还是用其他的模块给Arduino发送的消息?看你使用的格式是7E1,是不是另一个设备的格式和他不同 ...
是給其他模塊用的,通訊格式是7E1是沒錯的~ 先做收发测试吧,然后再连接到模块上。 你为啥不试试if(Serial.available())
接着可以用字符串接收行,每个字节中间要加delay(2) Serial3.println(readLine3());<- 你把 Serial3 的 Tx 接到那裡?一開始的 Hello 有顯示出來嗎?
在每次 Serial3.read之前, 都應該加上 if (Serial3.available()) 才讀取資料.又或者用 whiel(Serial3.avilable()) 再在內裡讀取資料.
由於 arduion 處理速度相對串口通訊快很多, 而你用 9600bps 的速度, 每發送一個 byte 就要 8/9600 s 以上, 大約要 1ms.如果不想被誤當發送完成, 可在 Serial3.read 至Serial3.available() 之間加上 delay(1), 多等 1ms.
页:
[1]