提问者:小点点

JSONArduino处理?


我有一些简单的解析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, 

如果有人能在调试这个当前问题时给我一些帮助,我将不胜感激!

非常感谢你们!


共1个答案

匿名用户

我建议将其作为二进制数据传输,您可以在处理端解压缩。它应该可以解决您的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];

相关问题