2

我正在尝试使用ardunon 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

首先,我读到 write 将二进制数据写入串行端口,而 print 是 ascii 字符。我怎么会看到ascii字符?

第二个问题是为什么没有超过 127 出现?

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

是不是因为电脑端的串口?

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

4

1 回答 1

2

输出是正确的。您正在编写二进制数据,但您试图将它们视为 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]);
于 2013-04-20T03:41:53.663 回答