close

arduino與PC端的通信( PC送信給arduino )

這個是源碼http://www.4shared.com/file/RkTtxTCq/INPUT.html

我用來控制兩顆servo motor,控制方式是輸入 X+"角度";Y+"角度";

要說比較奇怪的地方...就是每接收一個字元都必須有1ms的delay,否則收到得字串會錯誤

另外這種方式在有線傳輸的時候不會有問題,在無線傳輸上就問題大了(我用的是APC220)

連續的輸入會造成資料遺失,例如輸入 X123;Y456;

程式會先正確的儲存X123

然後在儲存Y456的時候...Y456會變成@#$之類的亂碼

大概會有一半的機率會發生吧

這個時候最好把程式改成讀取"X123Y456;" 而不是 "X123;"及"Y456;"

把程式改成擷取從index("X")到index("Y"),以及從index("Y")節取到最後一個字元...

這樣就可以了

 

//以下是節錄arduino forum的程式...原作者使用goto被別人說是Spaghetti code, 可是我覺得很好懂勒XD

void loop()
{
  //expect a string like wer,qwe rty,123 456,hyre kjhg,
  while( Serial.available() )
  {
    delay(1);//如果小於1ms就會收到錯誤的資料
    //delayMicroseconds(500);
    if( Serial.available() > 0 )
    {
      char c = Serial.read();  //gets one byte from serial buffer
      if (c == ';')
      {
        goto parce;
      }
      readStr += c;
    } //makes the string readString
  }     
  parce:  
 
  if ( readStr.length() > 0 )
  {
    int pos = readStr.length(); //capture string length
    str1 = readStr.substring(0, readStr.indexOf(' ')); //first part of string
    str2 = readStr.substring(readStr.indexOf(' ') + 1, pos);
    Serial.println("Recieving command: " + readStr);
    command(str1, str2);
    readStr = "";
  }

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 蘇兄 的頭像
    蘇兄

    Mens et manus

    蘇兄 發表在 痞客邦 留言(0) 人氣()