2013-04-20 52 views
1

我想使用arduinon Serial.write(buf,leng)。这里是我的代码Arduino串行写入

byte buf[] = {125, 126, 127, 128, 129}; 

void setup() { 
    // initialize serial: 
    Serial.begin(9600); 

} 

void loop() { 
    int i = Serial.write(buf, sizeof(buf)); 
    Serial.println(i); 
    delay(1000); 
} 

然而,当我打开串口监视器这是它打印出

}~ 5 
}~ 5 
}~ 5 
}~ 5 

首先,我读了写二进制数据写入到串行端口和打印是ascii字符。我怎么看到ascii角色?

第二个问题是127怎么没有出现?

每当我Serial.write(> 127)它总是显示在串行监视器中一个愚蠢的输出?

是因为计算机的串口?

我的主要目标是一次写入32个字节到串行,所有它们都在我的xbee传输包的相同有效负载中。 ??

回答

1

输出正确。您正在编写二进制数据,但您试图将它们视为ASCII,这就是为什么您会看到例如}而不是125,因为一个字节125代表的是ASCII中的}125将需要3个字节来显示为ASCII。

当你写一个大于127的字节时,你会看到奇怪的东西,因为ASCII只包含128个字符(0到127)的定义。

如果在接收电路上您想要读取与您的代码完全相同的数组,那么您的草图就没有问题。您只需使用某种“串行读取”,并根据需要使用数字,请记住每个数字都有一个字节大小。另一方面,如果要在串行监视器上查看数字(以ASCII字符表示),则必须将这些数字转换为ASCII码,或者只需使用循环将数字作为整数打印println功能:

int numbers[] = {125, 126, 127, 128, 129}; 
for(int i = 0; i < (sizeof(numbers)/sizeof(numbers[0])); i++) 
    Serial.println(numbers[i]); 
+0

谢谢,它是有道理的,实际功能很好,只是串行显示器开始搞砸了。欢呼 – DRAN 2013-04-20 13:24:36

+0

我有同样的问题。当我使用Serial.print(124)时,在Arduino中,我得到三个单独的值。我得到“1”的ascii代码,“2”的ascii代码和“4”的ascii代码。 如何从arduino发送一个简单的值,然后通过处理读取它? – Kokodoko 2014-02-28 16:19:20