[英]Arduino --> Android bluetooth communication (receive text with App Inventor)
我正在創建一個可以通過 Android 應用程序控制的基於 Arduino 的無人機。 為了改善用戶體驗,我想在應用程序上顯示加速度計/羅盤傳感器的值,因此我需要通過藍牙將它們從 Arduino 發送到 Android。 這些值是 0 到 180 之間的簡單整數。
我認為最好的解決方案是將所有值(用逗號分隔)連接到一個字符串中,並將其發送到應用程序,這將分隔單個值(僅在應用程序需要時才會發送該字符串,在這種情況下當 Arduino 收到“z”字節時)。
if (Serial.available() > 0) {
if (Serial.read()=='z'){
Serial.println(String((int)sensor1) + ',' + String((int)sensor2) + ',' + String((int)sensor3));
}
}
以下是 App Inventor 模塊:
似乎這些值被很好地接收了,但有一個關鍵問題:有時字符串沒有被很好地接收,這會導致很多錯誤。 有時收到的字符串是(例如)10,10,10,但有時它是 10,10,1010 或只是 10,10 ecc ...
我也嘗試一個一個地發送值,但結果幾乎相同。 我什至嘗試使用分隔符字節將“numberOfBytes”設置為 -1,但不幸的是,這也沒有成功。
我很生氣,所以我希望有另一種方法可以將那些整數發送到 Android,或者修復我已經在使用的系統。
我使用 Serial.print 發送每個結果,然后使用Serial.write('>');
作為結束標記。
在appinventor
設計器窗口中,將藍牙客戶端的分隔符字節設置為 62(> 字符的 ASCII 值)。
在塊窗口中,使用藍牙客戶cliant1.Receive
文本並將字節數設置為-1
發明的應用程序將讀取直到找到分隔符。
但是,如果找不到應用程序,它將導致應用程序掛起。
問題是你沒有發出我在一個項目中使用他的例子的字符串結尾的信號,是這樣的:
while(Serial.available()>0){
Serial.println(String((int)Sensor1) + ',' + String((int)Sensor2)+ ',');
}
如果您比較這兩個代碼,差異將是打印末尾的“ , ”,它為您解決了問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.