私は以下を持っています:
2つ Arduinos および2つ XBees 。あるデータから別のデータを送信したい。私は提案テストを行っているので、XBeesは通信します(一方のXBeeをArduinoに接続し、もう一方をPCに接続し、一方から書き込み、もう一方をもう一方の端末で監視します)。
今、私はあるものから別のものにデータを送りたいです:
これらは私の2つのスクリプトです:
送信の場合(すべての文字を送信する前のテストでテストされます):
_#include <SoftwareSerial.h>
SoftwareSerial xbee(2, 3); // RX, TX
char c = 'A';
int pingPong = 1;
void setup()
{
Serial.begin(9600);
Serial.println( "Arduino started sending bytes via XBee" );
//Set the data rate for the SoftwareSerial port
xbee.begin(9600);
}
void loop() {
// Send character via XBee to other XBee connected to Mac
// via USB cable.
xbee.write( c );
//--- Display the character just sent on console. ---
Serial.println( c );
//--- Get the next letter in the alphabet, and reset to ---
//--- 'A' once we have reached 'Z'.
c = c + 1;
if ( c>'Z' )
c = 'A';
//--- Switch LED on Arduino board for every character sent---
if ( pingPong == 0 )
digitalWrite(13, LOW);
else
digitalWrite(13, HIGH);
pingPong = 1 - pingPong;
delay( 1000 );
}
_
問題は、他のXBeeからデータを受信するためにArduinoを接続したときです。
これが私のコードです:
_#include <SoftwareSerial.h>
SoftwareSerial xbee(2, 3); // RX, TX
void setup()
{
Serial.begin(9600);
Serial.println( "Arduino started receiving bytes via XBee" );
// Set the data rate for the SoftwareSerial port.
xbee.begin(9600);
}
void loop() {
int temp = xbee.read();
Serial.print("Character received:");
Serial.println(temp);
delay(1000);
}
_
出力は常に:
_Character received: -1.
_
temp
をint
からbyte
に変更すると、Character received: (a non-[ASCII][3] symbol)
が表示されます。
XBeeシリーズ1を使用しています。
これらは、ladyada.netにある1つのチュートリアルに基づいて、X-CTUを介して構成されます。
次に、XBeeをArduinoに接続し(TXをピン3に、RXを2に、VccとGNDにそれぞれ)、もう1つのXBeeを [〜#〜] ftdi [〜#〜] を介してPCに接続しました。ケーブル。 Arduinoからキャラクターを送って、X-CTUのシリアルモニターで見ることができました。これは、それらが正しく構成されていることを意味しますか?
次に、Arduinoをレシーバーに接続したいと思いました。上記のコードを見ることができます。私は常に利用可能なデータを取得していません。
-1が返されるということは、シリアルにデータがないことを意味します。
int
をbyte
に変更すると、実際にはintがchar
に変更されます。非- [〜#〜] ascii [〜#〜] 記号は、文字(_0b11111111
_)をレンダリングしようとした結果です。 int
はデフォルトで署名されているため、10進数の負の1(_-1
_)はすべて2進数の1です。 Bin/Dec/Hex Converter をチェックして確認してください。
つまり、xbee.read()
はbyte
/char
を返します。 ドキュメント で何も見つかりませんでしたが、_-1
_はエラーによるものと思われます(ハードウェアSerial
ドキュメントに基づく) )。これは、読むものがないためです。
_if (xbee.available()) {
byte temp= xbee.read();
Serial.print(temp);
}
_
実用的な概念実証ができるまでは、できるだけ単純にする必要があります。動作したら、機能を1つずつ追加します。これはすでに行っていることのように見えますが、おそらくさらに単純化することができます(FTDIのみを使用するか、ハードウェアシリアルを使用するなどして、Arduinoを方程式から除外します)。
それはかなりクールなプロジェクトのように聞こえます。幸運を!
void loop() {
unsigned char temp; =
if (Serial.available() > 0){
temp = xbee.read();
Serial.print("Character received:");
Serial.println(temp,HEX);
}
このコードを試してください。
MSBを処理するために、inttempをunsignedcharに変換しました。わたしにはできる。しかし、私はXbeeシリーズ2とハードウェアシリアルを使用しました。とにかく、データ処理は重要です。