我有一些简单的解析JSON从Arduino到处理的问题,这里是下面的代码。
ARDUINO代码
int x,y;
void setup()
{
Serial.begin(9600);
}
void loop()
{
sendJSON();
delay(500);
}
void sendJSON(){
String json;
json = "{\"accel\":{\"x\":";
json = json + x;
json = json + ",\"y\":";
json = json + y;
json = json + "}}";
Serial.println(json);
}
处理代码
import processing.serial.*;
Serial myPort;
JSONObject json;
int x,y;
void setup () {
size(200, 200);
myPort = new Serial(this, Serial.list()[5], 9600);
myPort.bufferUntil('\n');
}
void draw () {
}
void serialEvent (Serial myPort) {
while (myPort.available() > 0) {
String inBuffer = myPort.readString();
if (inBuffer != null) {
json = loadJSONObject(inBuffer);
JSONObject acc = json.getJSONObject("accel");
int x = acc.getInt("x");
int y = acc.getInt("y");
println(x + ", " + y);
}
}
}
在串行监视器上,我有正确的字符串:
{"accel":{"x":451,"y":-118}}
但是,在处理草图上,我有以下错误:
{ does not exist or could not be read
Error, disabling serialEvent() for /dev/tty.usbmodem1421
null
or sometime even :
{"":{"x":456,"y":-123}} does not exist or could not be read Error,
如果有人能在调试这个当前问题时给我一些帮助,我将不胜感激!
非常感谢你们!
我建议将其作为二进制数据传输,您可以在处理端解压缩。它应该可以解决您的json问题,并且会更加高效。这样的东西应该适合您…
Arduino代码
byte Rx_Data[4];
Tx_Data[0] = accelX >> 8 & 0xff;
Tx_Data[1] = accelX& 0xff;
Tx_Data[2] = accelY >> 8 & 0xff;
Tx_Data[3] = accelY& 0xff;
Serial.write(Data_Packet);
处理代码
byte Tx_Data[4];
if(Serial.available() == 4) {
for(int i=0;i<4;i++){
Tx_Data[i] = Serial.read();
}
}
int accelX = Tx_Data[0] << 8 | Tx_Data[1];
int accelY = Tx_Data[2] << 8 | Tx_Data[3];