ここで問題があることである:バックアンドロイドアプリから私はどのように私はcharがあるdata
を使用し、ダウン以下irsend.sendN
マイスケッチに0x92c0の代替としてそれを使うのですか、char data
ことによってそれを受信する必要がされます0x92c0をchar(またはbyte)として転送することはできません。ちょうどそれがバイトではなく2つであるからです。
は今、私はアンドロイドにあまりないので、私はあなたの3つの方法でこれを扱うことができる真の解決策を作成するには、Androidのコードを参照する必要があります。
- バイナリ(2バイト)のデータを転送
- データを文字列として転送する(5バイト)
- 可能な応答を配列に索引付けし、索引を転送します(少量のコードに対してのみ適用可能)。
第1位が最も効果的ですが、私はあなたがアンドロイドからバイナリ形式でデータを送受信するための適切な知識を持っているとは思いません(と確かに私はしませんそれを持っている)。
データを文字列形式(あなたがそれをアップロードしているのと同じ方法)で転送されるのであれば、あなたはより多くのバイト受信します:
を
コードはちょうどあなたが変数に受信バイトを格納し、その後、あなたはCRやLFを受信したときにそれを送信します。
// Outside the loop function
uint16_t receivedData;
// Inside the loop function
if(bluetoothPort.available() > 0)
{
data = bluetoothPort.read();
if ((data >= '0') && (data <= '9'))
{ // If it is a digit between 0 and 9 (in ascii)
receivedData = (receivedData << 4) | (data - '0');
}
else if ((data >= 'A') && (data <= 'F'))
{ // If it is a digit between A and F (in ascii)
receivedData = (receivedData << 4) | (data - 'A' + 10);
}
else if ((data >= 'a') && (data <= 'f'))
{ // Lowercase case
receivedData = (receivedData << 4) | (data - 'a' + 10);
}
else if (((data == '\r') || (data == '\n')) && (receivedData > 0))
{ // I tend to consider both CR and LF, because windows always screws this
Serial.print(receivedData, HEX);
irsend.sendNEC(receivedData,32); // Not sure about the 32 here...
irrecv.resume();
receivedData = 0;
}
else
receivedData = 0; // Something went wrong, just reset the variable
}
いくつかのコードを送信するだけであれば、コードを保存してから適切なインデックスのみを転送することができます。例えば:あなたが値0
にアンドロイドから送信する必要があります0x92c0
この場合、例えば
// Outside the loop function
uint16_t possibleCodes[] = { 0x92c0, 0x8238, 0x5555 };
// Inside the loop function
if(bluetoothPort.available() > 0)
{
data = bluetoothPort.read();
// If you are using string transmission, use the following
// line to get the correct value
// data = bluetoothPort.read() - '0';
if (data < sizeof(possibleCodes)/sizeof(possibleCodes[0]))
{
Serial.print(possibleCodes[data], HEX);
irsend.sendNEC(possibleCodes[data],32); // Not sure about the 32 here...
irrecv.resume();
}
}
を送信します