[英]Android Bluetooth Arduino
我目前正在嘗試使用Bluesmirf模塊從Arduino獲取數據到Android。
這是我的Arduino代碼。
void setup() {
Serial.begin(115200);
}
void loop() {
if(Serial.available()){
char val = Serial.read();
if(val == '.'){
Serial.println("t1|x1|x2|x3|x4");
}
}
}
正如你所看到的,我只是在寫一個長字符串。 最終,該字符串將包含值。 如果我給arduino寫一個句點,它將返回這些值。 這是我的藍牙代碼,它非常類似於藍牙聊天示例中的代碼:
private class ConnectedThread extends Thread{
private BluetoothSocket mmSocket;
private InputStream mmInStream;
private OutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket) {
// TODO Auto-generated constructor stub
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (Exception e) {
// TODO: handle exception
}
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
public void run(){
byte[] buffer = new byte[1024];
int bytes;
while(true){
try {
// Garbage collector necessary to prevent data loss
System.gc();
bytes = mmInStream.read(buffer);
Log.d("Value of Output", new String(buffer, 0, bytes))
} catch (IOException e) {
e.printStackTrace();
connectionLost();
}
}
}
public void write(byte[] buffer){
try{
mmOutStream.write(buffer);
} catch(IOException e){
Log.d("Write", "failed");
}
}
public void cancel(){
if (mmInStream != null) {
try{mmInStream.close();}catch(Exception e){}
mmInStream = null;
}
if (mmOutStream != null) {
try{mmOutStream.close();} catch(Exception e){}
mmOutStream = null;
}
if (mmSocket != null) {
try{mmSocket.close();}catch(Exception e){}
mmSocket = null;
}
}
}
我要提幾件事。 System.gc()就在那里,因為如果我不把它放在那里,我有時會得到錯誤的數據。 有時數據會丟失,有時會重復。
我遇到的問題是輸出返回多行。 所以在我的日志中我會得到類似的東西
輸出t1 | x1 | x的值
輸出2 | x3 | x4的值
而不是一切都在一條線上。 當我通過藍牙(藍牙加密狗)將arduino連接到計算機時,數據返回一行。 如何確保數據返回一行。
我可以嘗試在“緩沖區”中連接您的數據,並檢查此緩沖區是否有新的行/回車字符。 找到后,將數據設置為真實變量,清除緩沖區並重新開始。 這應該夠了吧。
希望能幫助到你! :)
好。 我遇到過同樣的問題。 為了解決這個問題,我使用了mDinput = new DataInputStream(mmInStream);
,然后是mDinput.readFully(dateBuffer, 0, sizeYouWant);
。 然后, readFully
只有在它滿時才會返回緩沖區
希望這可以幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.