第一次或第二次通信成功,然后随机失败并让我感到困惑。我正在使用蓝牙控制我的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;
}
}
感谢您的帮助!
答案 0 :(得分:0)
您可能希望将字符用于结束数据包。在你的代码中,数据包顺序我错了。不知何故,arduino可能会收到“m1m”消息而且会混淆。
假设您的和字符是“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 ++;
}
}
我没有测试代码,它可能会失败。但我写了这个想法的代码。