家のある部屋にあるリモコンから別の部屋にあるセットトップボックスにIRコードを中継するためにワイヤレスシステムに入れたいArduinoが2つあります。一方のArduinoにはIRデコーダーがあり、ハンドヘルドリモコンからキーをデコードし、IRエミッターを備えたボックスの前に駐車されているもう一方のArduinoに送信します。システムは、部分的には正常に動作します。検出器から(PCに)コードを取得し、手動で(PCから)送信するArduinoに送信すると、ボックスが適切に制御されます。しかし、Arduino間でコードをワイヤレスで直接送信しようとすると、正しく機能しません。コマンドが正しく中継されていないようで、放出しているArduinoはbxを制御できません。
デコードするArduinoコードは次のようになります。「myNumber」は4バイトのキーを保持します。
myNumber.UL = results->value;
Serial.write(&myNumber.B,4);
デコーダーがIRパターンを検出すると、エミッターを使用するか、リモートのオン/オフキーを押すかに関係なく、シリアルポートに次の情報を送信します。問題のキーは61A0F00F(電源オン/オフ)です。
Hex Field ASCII
0000 0F F0 A0 61 ... a
実際のリモートを検出器に向けたとき、またはコード61A0F00Fでエミッターを駆動しているとき、デコーダーはこれと同じ応答を出します。したがって、実際のリモートとArduino駆動のエミッターの違いはわかりません。問題は、この出力がシステムの放射側のArduinoによって正しく理解されないことです。
放出コードは次のようになります。
void loop() {
int x = 0;
while (x < 4) {
if (Serial.available()) myNumber.B[x++] = Serial.read();
}
Serial.print(myNumber.UL, HEX);
if (x==3) irsend.sendNEC(myNumber.UL, 32); //drive IR emitter with NEC code
delay(10000);
そして、シリアル出力は次のようになります。
HEX field ASCII Field
0000 36 31 41 30 46 30 30 46 61A0F00F
この16進コードを手動で、つまりCoolTermを介して挿入すると、セットトップボックスが(オンになって)応答します(0FF0A061)。Arduinoをワイヤレスでリンクすると、リンクしません。
上記の通信の何が問題になっているのか誰かがわかりますか?hexフィールドの数値は正しく表示されません。デコーダーからのhexフィールドはhexのように見えますが、エミッターからのhexフィールドはASCIIのように見えますか?では、エミッターはASCII番号を期待していますが、代わりに16進数を取得していますか?私はSerial.readとSerialだと思っていたでしょう。書き込みも同じように機能します。
これは非常に苛立たしいことです。システムはほぼほぼ機能しているように見えますが、完全ではありません。
任意のヘルプ/洞察をいただければ幸いです。