0

2台のArduinos Leonardoで通信システムをやっています。送信するには、文字列をビット単位で変換し、PWM ピン経由で送信する必要がありました。問題は、受信機をどうするかです。

私の考えは、デジタル ピンでデータを受信することです。そのため、LOW/HIGH を「0」と「1」に変換し、8 ビットを文字列に入れ、char に変換すると、最終的な文字列が得られます。

いくつかの情報: - FSK 変調を実装し、ビットごとに送信したいので、PWM を使用しています;- - 通信システムを動作させるためのハードウェアがあります。- 通信用の物理チャネルはシリアル (Arduino ピン経由) です。- 受信機のハードウェアは TTL 信号を提供するので、0V/5V になります。だからこそ、digitalRead() が機能するはずです。- データは PWM 経由で送信され、2 つのレベルの信号で受信されます。- データを送受信するために何らかのプロトコルを実行する必要がありますが、まだ方法がわかりません...

これは私が書いたコードです:

void setup() {
  Serial.begin(9600);
  while (!Serial) {;}
}
void loop() {
  char bitPosition = 0;
  String inMessage = 0;
  while (Serial.available() > 0) {
    char outChar;
    boolean digValue = digitalRead(inPin);
    for(bitPosition = 7; bitPosition >= 0;  ){
      if(digValue == LOW){
        bitWrite(outChar, bitPosition, 0);
      }
      if(digValue == HIGH){
        bitWrite(outChar, bitPosition, 1);
      }
    bitPosition--;
    }
  inMessage.concat(outChar);
  if(inMessage != 0){
    Serial.println("Received:  " + inMessage);
  }
 }
}

このコードで、digitalRead の HIGH/LOW 状態を文字列に変換する必要があります。0/1 -> 文字 (outChar) -> 文字列 (inMessage)。私の考えが間違っているかどうかはわかりません。提案?データを送受信するためにボーレートについて何かする必要がありますか? どのように?

ヘルプ/提案をいただければ幸いです。

4

2 に答える 2

0

これを行う方法の手がかりとして、SoftwareSerial が Arduino にどのように実装されているかを見てください。

http://arduino.cc/en/Reference/SoftwareSerial

「SoftwareSerial ライブラリは、機能を複製するソフトウェアを使用して、Arduino の他のデジタル ピンでのシリアル通信を可能にするために開発されました (そのため、「SoftwareSerial」という名前が付けられました)。」

于 2013-03-27T21:12:29.183 に答える
0

まあ、あなたの問題は、あなたが信じているよりもはるかに複雑な場合です。EE.SE に投稿された同様の (同一の?) 質問を読みました。

問題について根本的なことを理解していないようです。これはソフトウェアの問題ではありません。あなたの問題を要約すると、グローバルです。

arduino A から arduino B にデータを送信します。

arduino A の PWM ピンを使用して FSK 信号を生成する予定です。

最初のコメント: どのように? 位相変調に応じてポインターが移動する正弦波のルックアップ テーブル? これは簡単そうです。だから、これはあなたが選んだ方法だと信じましょう。(ここではロジック信号と言っていますが、EE.SEではワイヤレス信号と言っています)

これで、XX kHz の信号が得られました (XX の値はわかりませんが、Arduino の Xtal 速度に応じて、500 Khz を超えることはできません)。

arduino Bでは、arduino Bではarduino Aのクロックにアクセスできないため、クロックリカバリの問題を解決する必要があります。これは、取得している信号を基準クロックと比較できないことを意味します。受信信号を分析すると、ローカル クロックに対して特定の位相が得られます。しかし、ardunio A の基準位相がわからないため、受信ビットが -90° か +90° かはわかりません。したがって、受信信号に 0 または 1 を割り当てることはできません。

これは些細な問題ではありません。ここまたはEE.SEに関する質問とコメントへの回答によると、おそらく機能していないアルゴリズムの実装の問題を解決しようとしています。最初に、MATLAB (または無料の OCTAVE) を使用してシミュレートできる適切なアルゴリズムを探し、それが機能することを確認してから、組み込みハードウェアに実装してみてください。

あなたは何をしたいのか、EE.SE で多くの回答を受け取ります。それは、専門家には間違っているように見える実装に関する問題を解決しても意味がないからです。

したがって、意味のある回答が必要な場合。概念的に、問題を解決するために何をどのように計画しているかを説明してください。

FSK がどのように機能するかについての情報を追加します。どのように PWM を使用して FSK を実行する予定ですか? これは些細なことではありません。また、受信したシンボルが 1 または 0 であることを概念的に検出するためにどのように計画するか。

現状では、私の答えは次のとおりです。コピービットの問題を解決できる場合でも、問題は解決しません。

于 2013-03-28T13:21:02.617 に答える