1. 程式人生 > >arduino 串列埠JSON指令傳送

arduino 串列埠JSON指令傳送

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. void setup()
  4. {
  5.   Serial.begin(9600);
  6. }
  7. void loop()
  8. {
  9.   if (serial_stream.available()) {
  10.     /* First, skip any accidental whitespace like newlines. */
  11.     serial_stream.skip();
  12.   }
  13.   if (serial_stream.available()) {
  14.     /* Something real on input, let's take a look. */
  15.     aJsonObject *msg = aJson.parse(&serial_stream);
  16.     ComExecution(msg);
  17.     aJson.deleteItem(msg);
  18.   }
  19. }
  20. void ComExecution(aJsonObject *msg)
  21. {
  22.   aJsonObject *motor = aJson.getObjectItem(msg, "motor");//電動機指令速度
  23.   if (motor) { //電機引數存在
  24.       aJsonObject *motor_left = aJson.getObjectItem(motor, "left"); //左速度
  25.       aJsonObject *motor_right = aJson.getObjectItem
    (motor, "right");//右速度
  26.       if(motor_left) {
  27.             //左側電機功能
  28.             //
  29.             Serial.println(motor_left->valueint);//速度為整型值
  30.             //Serial.println(motor_left->valuestring);//字串
  31.       }
  32.       if(motor_right) {
  33.             //右側電機功能
  34.             //
  35.             Serial.println(motor_right->valueint);
  36.       }
  37.   }
  38.   aJsonObject *servo = aJson.getObjectItem(msg, "servo");//舵機指令角度
  39.   if(servo) { //舵機引數存在
  40.       aJsonObject *servo_1 = aJson.getObjectItem(servo, "servo_1");
  41.       if (servo_1) {
  42.             //舵機1的功能
  43.             //
  44.             Serial.println(servo_1->valueint);
  45.       }
  46.   }  
  47. }

21.33 KB, 下載次數: 259