串口JSON指令发送

我是一个PHP 程序员,休闲的时候也谢谢python ,小时候就很喜欢电子产品,现在发现了arduino真是太高兴了,休息的时间又可以有个东西玩玩了,但是写惯了PHP 在回来写C发现真是心有余力不足,好吧废话不多说了,最近准备弄个小车,可过年时预定的零件还不能马上发到货,于是先写个伪代码吧,首先我想到的就是和串口的数据交互问题,看了好多文章都不是我想要的做法,由于常使用JSON 我对JSON 还是很有把握的于是找到了aJSON这个库,看了DEMO觉得这个真是太棒了,写了点代码基本实现了我想要的参数传递。小弟新手请大家多多指教。



实现要求

参数传递(由PYTHON 或 processing 通过串口发送给ARDUINO) 格式:{"motor":{"left":100, "right":20}, "servo":{"servo_1":90}}



基本的想法就是想把数据结构化些,并且JSON 好多语言也有支持,实在不行构造也简单,下面的代码只实现了简单的几个参数



{

"motor":{

"left":100,

"right":20

},

"servo":{

"servo_1":90

}

}





当然也可以加更多例如



{

"motor":{

"left":100,

"right":20

},

"servo":{

"servo_1":90,

"servo_2":40,

"servo_3":20,

},

"led":{

"led_1":1,

"led_2":0,

"led_3":1,

},

"test":"xxx"

}

屏幕快照 2013-02-15 下午11.48.12副本.jpg

2013-2-15 23:51 上传
(278.85 KB)





代码如下:

ARDUINO 代码复制打印

#include <aJSON.h>aJsonStream serial_stream(&Serial);void setup(){Serial.begin(9600);}void loop(){if (serial_stream.available()) {  /* First, skip any accidental whitespace like newlines. /  serial_stream.skip();}if (serial_stream.available()) {  / Something real on input, let's take a look. */  aJsonObject *msg = aJson.parse(&serial_stream);  ComExecution(msg);  aJson.deleteItem(msg);}}void ComExecution(aJsonObject *msg){aJsonObject *motor = aJson.getObjectItem(msg, "motor");//电动机指令速度if (motor) { //电机参数存在  aJsonObject *motor_left = aJson.getObjectItem(motor, "left"); //左速度  aJsonObject *motor_right = aJson.getObjectItem(motor, "right");//右速度  if(motor_left) {    //左侧电机功能    //    Serial.println(motor_left->valueint);//速度为整型值    //Serial.println(motor_left->valuestring);//字符串  }  if(motor_right) {    //右侧电机功能    //    Serial.println(motor_right->valueint);  }}aJsonObject *servo = aJson.getObjectItem(msg, "servo");//舵机指令角度if(servo) { //舵机参数存在  aJsonObject servo_1 = aJson.getObjectItem(servo, "servo_1");  if (servo_1) {    //舵机1的功能    //    Serial.println(servo_1->valueint);  }}}
#include <aJSON.h>

aJsonStream serial_stream(&Serial);



void setup()

{

Serial.begin(9600);

}



void loop()

{



if (serial_stream.available()) {

/
First, skip any accidental whitespace like newlines. /

serial_stream.skip();

}

if (serial_stream.available()) {

/
Something real on input, let's take a look. */

aJsonObject *msg = aJson.parse(&serial_stream);

ComExecution(msg);

aJson.deleteItem(msg);

}

}





void ComExecution(aJsonObject *msg)

{

aJsonObject *motor = aJson.getObjectItem(msg, "motor");//电动机指令速度

if (motor) { //电机参数存在

aJsonObject *motor_left = aJson.getObjectItem(motor, "left"); //左速度

aJsonObject *motor_right = aJson.getObjectItem(motor, "right");//右速度

if(motor_left) {

//左侧电机功能



//

Serial.println(motor_left->valueint);//速度为整型值

//Serial.println(motor_left->valuestring);//字符串



}

if(motor_right) {

//右侧电机功能



//

Serial.println(motor_right->valueint);

}

}



aJsonObject *servo = aJson.getObjectItem(msg, "servo");//舵机指令角度

if(servo) { //舵机参数存在

aJsonObject *servo_1 = aJson.getObjectItem(servo, "servo_1");

if (servo_1) {

//舵机1的功能



//

Serial.println(servo_1->valueint);

}

}



}


via - 极客工坊

标签: Arduino教程