我正在尝试使用arduinon Serial.write(buf,leng)。这是我的代码
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传输包的相同有效负载中。 ??
答案 0 :(得分:1)
输出正确。您正在编写二进制数据,但是您尝试将它们视为ASCII,这就是为什么您看到}
而不是125
的原因,因为一个字节125代表}
用ASCII。 125
需要3个字节才能显示为ASCII。
当你写一个大于127的字节时,你会看到奇怪的东西,因为ASCII只包含128个字符(0到127)的定义。
如果在接收电路上你想要读取代码中完全相同的数组,那么你的草图就可以了。您只需使用某种"串行读取",并根据需要使用这些数字,请记住每个数字都有一个字节大小。
另一方面,如果要查看串行监视器上的数字(表示为ASCII字符),则必须将这些数字转换为ASCII代码,或者只使用循环将数字作为整数打印到{ {1}}功能:
println