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 = "";
}