[英]Bluetooth communication between Android and Arduino doesn't always work
第一次或第二次通信成功,然后隨機失敗,使我感到困惑。 我正在使用藍牙來控制我的LED燈條的顏色,亮度和圖案。 我有一個微調器來控制模式。
首先,當選擇了微調項時,它會發送一個“ m”以表示下一個值將分配給標識模式的變量。 然后是一個值(例如1 = mode1,2 = mode2)。 因此,我必須一次發送2個字節的數據。
微調器:
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
switch (position) {
case 0:
msg("In ed!");
break;
case 1:
try {
btSocket.getOutputStream().write('m');
btSocket.getOutputStream().write(1);
} catch (IOException e) {
msg("Error1");
}
break;
case 2:
try {
btSocket.getOutputStream().write('m');
btSocket.getOutputStream().write(2);
} catch (IOException e) {
msg("Error2");
}
break;
case 3:
try {
btSocket.getOutputStream().write('m');
btSocket.getOutputStream().write(3);
} catch (IOException e) {
msg("Error3");
}
}
}
}
Arduino代碼的藍牙部分:
if(BT.available()>1) {
COMMAND = (char)BT.read();
inputVal = (int)BT.read();
switch(COMMAND) {
case 'm':
modeSelected = inputVal;
break;
case 'c':
colorOffset1 = inputVal;
break;
case 'b':
brightness = inputVal;
break;
}
}
謝謝您的幫助!
您可能需要使用字符作為結束包。 在您的代碼中,數據包命令可能會出錯。 某種程度上,arduino可能會收到“ m1m”消息,並且會造成混淆。
假設您的and字符是“ x”,然后將結束字符添加到所有android數據包中:
btSocket.getOutputStream().write('m');
btSocket.getOutputStream().write(1);
btSocket.getOutputStream().write('x');
更改您的android代碼:
in global:
char msg[2];
int index = 0;
if(BT.available()>0) {
char c = (char)BT.read();
if (c == 'x') {
COMMAND = msg[0];
inputVal = (int)msg[1];
switch(COMMAND) {
case 'm':
modeSelected = inputVal;
break;
case 'c':
colorOffset1 = inputVal;
break;
case 'b':
brightness = inputVal;
break;
}
} else {
msg[index%2] = c;
index ++;
}
}
我沒有測試代碼,它可能會失敗。 但是我為這個想法寫了代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.