极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 14765|回复: 5

Arduino mega 2560 Serial3.Read()讀不到

[复制链接]
发表于 2016-6-21 11:21:21 | 显示全部楼层 |阅读模式
用Arduino Mega 2560 的Serial3.Read(); 要把資料讀進來,在用Serial3.printel()顯示,但就是無法有數值顯示?
是程式有問題嗎?

  1. void setup(){
  2.     Serial.begin(9600, SERIAL_7E1);
  3.     Serial3.begin(9600 ,SERIAL_7E1);
  4.     Serial.println("Hello");
  5.     Serial3.println("Hello");
  6. }

  7. void loop(){
  8.     if(Serial3.available()){    // 如果 Serial3 有資料,則進入 if
  9.     Serial3.println(readLine3());
  10.   }
  11.    
  12. }

  13. String readLine3(){  // 讀取一整行
  14.       String s =  "";
  15.       char c;
  16.       while((c = Serial3.read()) !='\n'){
  17.           s += c;
  18.       }  
  19.       return s;
  20. }
复制代码
回复

使用道具 举报

发表于 2016-6-21 14:13:13 | 显示全部楼层
是自收发测试还是用其他的模块给Arduino发送的消息?看你使用的格式是7E1,是不是另一个设备的格式和他不同?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-6-21 14:15:54 | 显示全部楼层
164335413 发表于 2016-6-21 14:13
是自收发测试还是用其他的模块给Arduino发送的消息?看你使用的格式是7E1,是不是另一个设备的格式和他不同 ...

是給其他模塊用的,通訊格式是7E1是沒錯的~
回复 支持 反对

使用道具 举报

发表于 2016-6-21 15:54:25 | 显示全部楼层
先做收发测试吧,然后再连接到模块上。
回复 支持 反对

使用道具 举报

发表于 2016-6-21 19:00:53 | 显示全部楼层
你为啥不试试if(Serial.available())
接着可以用字符串接收行,每个字节中间要加delay(2)
回复 支持 反对

使用道具 举报

发表于 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.
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 23:09 , Processed in 0.052875 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表