2015-12-20 130 views
0

我正在写一个代码,通过蓝牙读取6位数的字符。这是我的代码读取值(我使用序列1):为什么Serail.readBytes()读取垃圾值?

Serial.println("DAMN YOU"); 
char data[DATA_LENGTH+1]; //DATA_LENGTH is 6 
data[DATA_LENGTH]='\n'; 
uint8_t actu_length,from_index,to_index,from_road=0,to_road=0; 
if (Serial1.available() > 0){ 
    Serial1.readBytes(data,DATA_LENGTH); 
    Serial.println("bla bla bal"); 
    Serial.println(data); 
} 

但这给了一些垃圾值。

为什么会发生这种情况?我错过了哪一点?

有没有其他有效的方法通过串口通信读取6位数字在arduino?

谢谢你的时间。

回答

0

Serial1if (Serial1.available() > 0){为真时,可能只有1个字节被接收!

因此读取6很可能会产生不好的结果。 等待,直到你有你需要什么:

if (Serial1.available() >= 6){

,因为没有足够的数据,readBytes就会停止阅读。如果data是一个局部变量,则未写入的单元格的内容可以是任何内容(除了最后一个单元格之外,您不会将其初始化/填充已知数据)。

+0

它读取数据,但混乱的方式。就像我发送“123456”它收到“* 1 2 | 9 9” – Anklon

+0

你是否等到收到足够的数据,就像我在我的回答中提到的那样?你的波特率是否正确? –

+0

是的,我愿意。 和宽广的速率是相同的(9600)为串行通信和HC-05蓝牙模块。 – Anklon