我在Arduino中制作了这个小型实验程序,看看函数 lowByte() 和 highByte() < / strong>工作。传递一个值时他们应该返回什么? 在串行监视器中输入字符“9”时,它将打印以下内容:
9
0
218
255
那是怎么来的?此外,为输入的所有值打印最后2行。为什么会这样?
int i=12;
void setup()
{
Serial.begin(9600);
}
void loop()
{
if(Serial.available())
{
i = Serial.read() - '0'; // conversion of character to number. eg, '9' becomes 9.
Serial.print(lowByte(i)); // send the low byte
Serial.print(highByte(i)); // send the high byte
}
}
答案 0 :(得分:2)
如果您有这些数据:
10101011 11001101 // original
// HighByte() get:
10101011
// LowByte() get:
11001101
答案 1 :(得分:0)
int
是Arduino上的16位整数。因此,您将高低部分读作字节。
由于实际缓冲区为"9\n"
,因此第二位打印出“有趣”数字,原因是'0'
减去了结果。
答案 2 :(得分:0)
Serial.print
需要格式化为字节输出,如果这是你想看到的。
尝试:
Serial.print(lowByte, BYTE)
答案 3 :(得分:0)
除了Rafalenfs的回答之外,您是否应该提供更大的数据类型:
00000100 10101011 11001101 // original
// HighByte() will NOT return: 00000100, but will return:
10101011
// LowByte() will still return:
11001101
Highbyte()返回第二个最低位(由文档https://www.arduino.cc/reference/en/language/functions/bits-and-bytes/highbyte/指定)