0

我正在 arduino 和 openframeworks 之间制作串行程序。但是arduino向openframeworks程序发送了奇怪的数据。我无法修复它,请帮助。

(arduino代码)

void setup(){
  Serial.begin(9600);
}

void loop(){
  Serial.write('a');
  delay(100);
}

(Mac 上的 opneframeworks 代码)

#include "testApp.h"

ofSerial mySerial;

//--------------------------------------------------------------
void testApp::setup(){
    mySerial.setup(0, 9600);

}

//--------------------------------------------------------------
void testApp::update(){

    unsigned char myByte = 0;
    myByte = mySerial.readByte();

    if(myByte == OF_SERIAL_NO_DATA){
        cout << "no data was read";
    }else if(myByte == OF_SERIAL_ERROR){
        cout << "an error occurred";
    }else{
        cout << "myByte is " << myByte << "\n";
    }

}

(Xcode 上的控制台)

...
myByte is \376
myByte is \376
myByte is a
myByte is \376
myByte is \376
myByte is \376
myByte is \376
...

当 Arduino 没有发送任何数据时,Mac 上的 OpenFrameworks 似乎得到了“\376”。
我的环境是

  • Mac OS 狮子
  • Xcode v4.3.3 SDK10.6
  • 适用于 Mac 的 OpenFrameworks v0.7.4
  • Arduino IDE v1.0.4
  • Arduino uno(atmega328p)
  • Arduino 和我的电脑通过 USB 数据线连接
4

1 回答 1

1

认为这是您尝试读取串行缓冲区时不完整的问题 - 当我在处理或 openFrameworks 中收到奇数数据时,十分之九,这就是问题所在。

尝试将您的 update() 方法更改为:

void testApp::update(){

    unsigned char myByte = 0;
    if(myByte.available > 8 {
      myByte = mySerial.readByte();
    }

    if(myByte == OF_SERIAL_NO_DATA){
        cout << "no data was read";
    }else if(myByte == OF_SERIAL_ERROR){
        cout << "an error occurred";
    }else{
        cout << "myByte is " << myByte << "\n";
    }

}

根据oF 串行类文档

于 2013-05-27T00:32:04.707 回答