s930427 发表于 2016-6-21 11:21:21

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;
}

164335413 发表于 2016-6-21 14:13:13

是自收发测试还是用其他的模块给Arduino发送的消息?看你使用的格式是7E1,是不是另一个设备的格式和他不同?

s930427 发表于 2016-6-21 14:15:54

164335413 发表于 2016-6-21 14:13 static/image/common/back.gif
是自收发测试还是用其他的模块给Arduino发送的消息?看你使用的格式是7E1,是不是另一个设备的格式和他不同 ...

是給其他模塊用的,通訊格式是7E1是沒錯的~

164335413 发表于 2016-6-21 15:54:25

先做收发测试吧,然后再连接到模块上。

zjz5717 发表于 2016-6-21 19:00:53

你为啥不试试if(Serial.available())
接着可以用字符串接收行,每个字节中间要加delay(2)

Super169 发表于 2016-6-22 18:08:19

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]
查看完整版本: Arduino mega 2560 Serial3.Read()讀不到