私のArduinoは、携帯電話から送信される文字をリッスンしてセンサー データを印刷し、 Bluetoothモジュール経由で送り返します。これは正常に機能しており、通信は高速かつ正確です。ただし、2 つの異なるセンサーからデータを要求すると問題が発生します。
センサー A からデータを要求し、結果を取得します。次に、センサー B からデータを要求し、センサー A への残りの要求と思われるものを取得し、センサー A から再び情報を取得します。センサー B からのデータを 2 回続けて要求でき、センサー B から正確にデータを受信します。
入力ストリームをフラッシュしようとしましたが、アプリケーションがクラッシュしました。また、 InputStream.wait() を使用してから、別のセンサーからデータを要求するときに InputStream.notify() で待機を中断しようとしました。これもプログラムをクラッシュさせました。
これは私の受信コードです。渡される文字は、Arduino から送り返すセンサー データを定義する文字です。
public String receive(Character c) {
try {
myOutputStream.write(c);
final Handler handler = new Handler();
final byte delimiter = 10; // ASCII code for a newline
stopWorker = false;
readBufferPosition = 0;
readBuffer = new byte[1024];
myThread = new Thread(new Runnable() {
public void run() {
while (!Thread.currentThread().isInterrupted()
&& !stopWorker) {
try {
int bytesAvailable = myInputStream.available();
if (bytesAvailable > 0) {
byte[] packetBytes = new byte[bytesAvailable];
myInputStream.read(packetBytes);
for (int i = 0; i < bytesAvailable; i++) {
byte b = packetBytes[i];
if (b == delimiter) {
byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0,
encodedBytes, 0,
encodedBytes.length);
final String data = new String(
encodedBytes, "US-ASCII");
readBufferPosition = 0;
handler.post(new Runnable() {
public void run() {
status = data;
}
});
} else {
readBuffer[readBufferPosition++] = b;
}
}
}
}
catch (IOException ex) {
stopWorker = true;
}
}
}
});
myThread.start();
return (status);
}
catch (IOException e) {
// TODO Auto-generated catch block
status = "Failed";
e.printStackTrace();
}
return (status);
}
これは Arduino コードの一部で、非常に単純です。
if(bluetooth.available()) //If something was sent from phone
{
char toSend = (char)bluetooth.read(); //Reads the char sent
if (toSend == 'T')
{
//If the char is T, turn on the light.
float voltage = analogRead(14) * 5.04;
voltage /= 1024.0;
float temperatureC = (voltage - .5) * 100;
float temperatureF = (temperatureC * 9.0 / 5.0) + 32.0;
bluetooth.println(temperatureF);
}
この問題を解決するにはどうすればよいですか?