Robofun 機器人論壇
標題:
請教一個 nokia sample 的問題
[打印本頁]
作者:
nethawk
時間:
2014-5-18 01:51
標題:
請教一個 nokia sample 的問題
nokia 提供一個WP 透過藍芽的控制arduino的sample
http://developer.nokia.com/community/wiki/Windows_Phone_8_communicating_with_Arduino_using_Bluetooth
但這個sample我一直執行不成功﹐不知道是那裏的問題﹐arduino 程式又沒有 try catch exception 之類的語法...不曉得該如何查問題。
我依照程式沒有任何修改﹐透過 Serial.println 大概知道程式的問題在那個地方
void loop() {
if(btSerial.available()) {
int commandSize = (int)btSerial.read();
Serial.println("commandSize = ");
Serial.println(commandSize);
char command[commandSize];
int commandPos = 0;
while(commandPos < commandSize) {
if(btSerial.available()) {
Serial.println("commandPos = ");
Serial.println(commandPos);
command[commandPos] = (char)btSerial.read();
commandPos++;
}
}
command[commandPos] = 0;
processCommand(command);
}
unsigned long currentTime = millis();
if((currentTime - time) > periodicMessageFrequency) {
sendPeriodicMessages();
time = currentTime;
}
}
複製代碼
透過Serial Monitor 觀察﹐
1.當我在WP手機按下一個 RED 按鍵﹐在arduino 板上 TX 燈有閃一下﹐Serial Monitor 顯示
commanSize =175﹐
commandPos =0
commandPos =1
然後就停了
2.再按一次WP手機上 RED鍵﹐Serial Monitor
commandPos =2
commandPos =3
commandPos =4
然後就停了
3.再按一次WP手機上 RED鍵﹐Serial Monitor
commandPos =5
commandPos =6
commandPos =7
然後就停了
........
觀察起來是在 loop 有兩個地方判斷 if (btSerial.available()) ﹐當由手機第一次RED鍵﹐arduino收到資料﹐第一個btSerial.available() 判斷為true﹐然後進入while迴圈﹐在while 迴圈內的 btSerial.available()一開始判斷也是true﹐但不知道為什麼commandPos只累加了2次while 迴圈中的 btSerial.available 就判斷變成 false﹐但沒有離開 while 迴圈﹐再按一次手機上的RED鍵﹐while 中的 btSerial.available又變成了true﹐但只跑了三次 while 中的 btSerial.available 又變成 false.....
不知道到底是那裏出了問題...
作者:
vegewell
時間:
2014-5-19 03:49
回復
1#
nethawk
nokia 提供的程式應該沒問題,首先,你要確定你的bluetooth baud rate是設定在9600 bps,
要自己先查詢,
參考:
Config bluetooth baud rate w/ Arduino
http://coopermaa2nd.blogspot.tw/2012/07/config-bluetooth-baud-rate-w-arduino.html
作者:
nethawk
時間:
2014-5-20 01:19
感謝vegewell 果然是baud rate的問題
我以為在 setup() 中的 Serial.begin(9600) 就是設定baud rate....真是大錯特錯.....
歡迎光臨 Robofun 機器人論壇 (https://robofun.net/forum/)
Powered by Discuz! X3.2