gpt4 book ai didi

c++ - Openframeworks,从Arduino读取串口数据

转载 作者:行者123 更新时间:2023-11-30 02:39:24 25 4
gpt4 key购买 nike

我正在尝试使用 ofSerial 对象从 Arduino UNO 读取串行数据并将其分配为 int。我能够读取单个字节,但是,我在 openframeworks 控制台中接收到的值与我在 Arduino 串行监视器中读取的值不同。

我提供了各个控制台的屏幕截图:

Arduino Serial Monitor

openframeworks console

我的 Arduino 代码只是 Arduino IDE 提供的基本“AnalogReadSerial”示例。

// the setup routine runs once when you press reset:
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
}

// the loop routine runs over and over again forever:
void loop() {
// read the input on analog pin 0:
int sensorValue = analogRead(A0);
// print out the value you read:
Serial.println(sensorValue);
delay(1); // delay in between reads for stability
}

而我的 C++ 代码大部分是从 ofSerial readByte 的文档中复制的功能。

void serialReader::setup()
{
serial.listDevices();
vector <ofSerialDeviceInfo> deviceList = serial.getDeviceList();

serial.setup("COM4", 9600); //open the first device and talk to it at 9600 baud
}


void serialReader::printByteToConsole()
{
int myByte = 0;
myByte = serial.readByte();
if ( myByte == OF_SERIAL_NO_DATA )
printf("\nno data was read");
else if ( myByte == OF_SERIAL_ERROR )
printf("\nan error occurred");
else
printf("\nmyByte is %d ", myByte);
}

如能深入了解可能导致读数之间差异的原因,我们将不胜感激。谢谢。

最佳答案

Arduino 的 Serial.println 将原始字节转换成它们的 ASCII 等价物,然后发送这些字节,然后是换行 (10) 和回车 (13) 字节。因此,原始字节 12 被发送为总共 4 个字节——两个字节代表 ASCII 1 (49)、2 (50) 和然后 (10) 和 (13) 换行符。因此,由于 openFrameworks 不会自动将 ASCII 值转换回原始字节,因此您看到的是 ASCII 版本。 Arduino 控制台将 ASCII 版本显示为可读文本。

您可以在此处查看 ASCII 和原始字节(十进制/又名 DEC)之间的转换:

http://www.asciitable.com/

如果您希望两个数字在两边都匹配,请考虑在 Arduino 中使用 Serial.write 来写入没有 ASCII 转换和换行符的原始字节。

关于c++ - Openframeworks,从Arduino读取串口数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29861393/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com