arduino 串口JSON指令发送

来源:互联网 发布:怎么判别淘宝托管被骗 编辑:程序博客网 时间:2024/06/06 02:32

http://www.geek-workshop.com/thread-3407-1-1.html


我是一个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

代码如下:

ARDUINO 代码复制打印
  1. #include <aJSON.h>
  2. aJsonStream serial_stream(&Serial);
  3.  
  4. void setup()
  5. {
  6.   Serial.begin(9600);
  7. }
  8.  
  9. void loop()
  10. {
  11.  
  12.   if (serial_stream.available()) {
  13.     /* First, skip any accidental whitespace like newlines. */
  14.     serial_stream.skip();
  15.   }
  16.   if (serial_stream.available()) {
  17.     /* Something real on input, let's take a look. */
  18.     aJsonObject *msg = aJson.parse(&serial_stream);
  19.     ComExecution(msg);
  20.     aJson.deleteItem(msg);
  21.   }
  22. }
  23.  
  24.  
  25. void ComExecution(aJsonObject *msg)
  26. {
  27.   aJsonObject *motor = aJson.getObjectItem(msg, "motor");//电动机指令速度
  28.   if (motor) { //电机参数存在
  29.       aJsonObject *motor_left = aJson.getObjectItem(motor, "left"); //左速度
  30.       aJsonObject *motor_right = aJson.getObjectItem(motor, "right");//右速度
  31.       if(motor_left) {
  32.             //左侧电机功能
  33.  
  34.             //
  35.             Serial.println(motor_left->valueint);//速度为整型值
  36.             //Serial.println(motor_left->valuestring);//字符串
  37.  
  38.       }
  39.       if(motor_right) {
  40.             //右侧电机功能
  41.  
  42.             //
  43.             Serial.println(motor_right->valueint);
  44.       }
  45.   }
  46.  
  47.   aJsonObject *servo = aJson.getObjectItem(msg, "servo");//舵机指令角度
  48.   if(servo) { //舵机参数存在
  49.       aJsonObject *servo_1 = aJson.getObjectItem(servo, "servo_1");
  50.       if (servo_1) {
  51.             //舵机1的功能
  52.  
  53.             //
  54.             Serial.println(servo_1->valueint);
  55.       }
  56.   }  
  57.  
  58. }

aJSON.zip

21.33 KB, 下载次数: 259


0 1
原创粉丝点击