Openframeworks,从Arduino读取串行数据

时间:2015-04-25 05:30:20

标签: c++ serialization serial-port arduino openframeworks

我正在尝试使用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 ++代码主要是从http://en.wikipedia.org/wiki/Taylor_series函数的文档中复制而来。

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);
}

对于可能导致读数之间的这种差异的任何见解将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:3)

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

您可以在此处看到ASCII和原始字节(Decimal / aka DEC)之间的转换:

http://www.asciitable.com/

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