0

Arduino 1.0.5 SoftwareSerial ライブラリに少し問題があります。理想的には、ここで Mega を使用する必要があることは理解していますが、残念ながら Uno R3 で間に合わせる必要があります。

複数の SoftSerial ポートを使用できることは理解していますが、2 つのポートを切り替えるSoft1.listen();などして使用すると問題が発生するようです。

たとえば、以下のスケッチを実行すると:

#include <SoftwareSerial.h>

SoftwareSerial Soft1(3,2);
SoftwareSerial Soft2(5,4);

void setup()
{
    Soft2.begin(9600);
}

void loop()
{
    Soft2.print("Test");
    delay(1000);
}

私はまさに私が期待していたものを手に入れました-「Test」という単語が毎秒印刷されました。今、私が置き換えSoft2.beginSoft1.beginも何も得られません。Soft1.listen();「印刷」の前に追加しても、「開始」の前に追加しても違いはありません。1 つのポートから読み取り/書き込みを行い、2 番目のポートにのみ書き込む必要がありますが、SoftwareSerial ライブラリは、プログラム中に宣言されたときに、どのポートを使用するかを決定しているようです。

複数の SoftwareSerial ポートを正常に使用したことがある人はいますか?

編集:

ソフトウェアシリアル宣言の順序を入れ替えると、ライブポートとデッドポートが逆になるため、実際にはその時点で何かがあるように見えます。テストのために、必要になるまでどちらのポートも開始せず、次のことを試しました。

void loop() {
    Soft2.begin(9600);
    Soft2.print("test2");
    Soft2.end();
    delay(1000); // For stability/to alleviate timing issues, whatever.
    Soft1.begin(9600);
    Soft1.print("test1");
    Soft1.end();
}

しかし、役に立たない。「test2」出力が表示されているだけです。

乾杯、
アレックス。

4

1 に答える 1

0

この回答が最初の投稿から非常に長くなって申し訳ありません。私は実際にこの問題に直面したことがあります。画面と RFBee の両方を 1 つの arduino に接続しました。次に、自分のコンピューターから、最初の RFBee が接続された最初の arduino にシリアル通信を送信しました。次に、この arduino は、RFBee を介して 2 番目の arduino に情報を送信しました。次に、2 番目の arduino はデータを画面に送信し、RFBee を介して最初の arduino にステートメントを返し、最初の arduino は送信されたことを伝えてコンピューターに戻りました。何らかの理由で、メッセージが最初の arduino に送り返されませんでした。読み取る前に現在開いているシリアルポートを選択する必要があるということでした。SoftX.listen(); を入れると、使用する前に、正常に動作するはずです。より良い説明が必要な場合は、http://arduino.cc/en/Tutorial/TwoPortReceiveこれがお役に立てば幸いです。また、SoftX.begin(); を持たないでください。ループ内のステートメント。問題を引き起こす可能性があります。

于 2014-12-11T20:30:49.147 に答える