cまたはc++を使用して赤外線リモコンコードをデコードする方法を教えてください。
4 に答える
異なるメーカーは、異なるエンコード方式、異なるタイミング、さらには異なる変調周波数を使用しています。一般的な IR レシーバー センサーはハードウェアで復調を実行するため、 OOK変調信号ではなくロジック パルス シーケンスを出力します。受信機は、送信機の変調周波数と一致する必要があります。複数の変調周波数を受信したい場合は、単純な IR フォトダイオードを使用し、対象の変調周波数ごとに独自の OOK キャリア検出回路を用意するか、複数の受信機を使用する必要があります。
復調パルスシーケンスを取得したら、特定のメーカーのエンコード方式に従ってデコードするのは簡単なことです。私は、Sony SIRCリモコンをロボットコントローラーとして使用するためにこれを行ったことがあります. センサーが割り込みをトリガーし、パルスタイミングが各割り込みでラッチされた場所。デバイスに入力キャプチャと比較タイマーのハードウェアがある場合、オーバーヘッドを減らして精度を上げることができます (ただし、これはおそらく必要ではありません)。
ここには、さまざまなプロトコルとメーカーのテーマに関する多くのリソースがあります
適用可能な規格がいくつかありますが、それらに準拠する必要のある製造業者はなく、それ以上の規格があります。 RC-5とRECS 80は、かなり一般的な 2 つの標準です。
C++ についてはわかりませんが、C# では次のようになります。
void ReadRemote()
{
while(!Console.KeyAvailable)
Console.Write(DecoderClass.ReadIR(IRType.TVRemoteControl));
}
それを行うハードウェアを購入し、C または c++ api 呼び出し (lirc など) を行います。または、プロトコルのデコードと、ハードウェアではなくソフトウェアでの実行に関心がある場合は、マイクロコントローラーを使用します。
楽しくて簡単なので、最初のマイクロコントローラ プロジェクトとしてお勧めします。一般的なプロトコルはいくつかありますが、ほとんどはいくつかのテーマのバリエーションです。基本的に、ラジオ シャックで入手できる受信機を入手できますが、ラジオ シャックのラジオ コンポーネントであったものの量ははるかに少なく、小さな引き出しに埋もれています。店の裏、もうすぐなくなります。とにかく受信機をそこに置くか、マイクロコントローラーであるデジキーまたはマウザーを入手し、立ち上がりエッジと立ち下がりエッジの間のクロックティック数をカウントします(レシーバーは〜40Khzのキャリア周波数を削除しました)それらの時間を予想されるプロトコルと比較し、ゼロからのものを決定します. マイクロコントローラーと赤外線 LED だけで送信することはできますが、変調を行う必要があるため、少し複雑です。
マルチ プロトコル レシーバーは、特定のプロトコル レシーバーほど優れていない可能性があります。これは、gcc が特定のプラットフォームではあまり優れていないが、すべてのプラットフォームで優れているのと同じです。大量生産製品の価格に匹敵することはできませんが、独自に構築することは楽しく、教育的であり、一般的により良い受信機になります. 問題の一部は、キャリア周波数の変化にも関係しており、理想的には、使用しているプロトコルのキャリア周波数と一致する受信機を選択する必要があります。たとえば、8 フィート離れていなければならないのではなく、30 フィート離れていてもかまいません。また、3 フィート離れた場所では機能しますが、1 フィートまたは 3 インチ離れた場所では機能しません。そのようなこと。