現在、GPS モジュール、デジタル コンパス、ZigBee ( XBeeモデム) を Arduino に接続するプロジェクトを行っています。ところで、私はEclipse IDE を使用してこのプロジェクトを実行しているので、コードをいくつかのライブラリに分割しました。
XBee は現在、ハードウェアUARTを使用しており、正常に動作しています。GPS モジュールとデジタル コンパスはどちらもソフトウェア シリアルを使用しています。
私の問題は、両方のソフトウェア シリアルをインスタンス化すると、最新のものしか機能しないことです。
以下は私のサンプルコードです。
void CSensor::initSensors()
{
//For GPS
this->gpsSerial = new SoftwareSerial(2, 3);
this->gpsSerial->begin(9600);
//For digital compass
this->compassSerial = new SoftwareSerial(6, 7);
this->compassSerial->begin(9600);
}
gpsSerial
CSensor
クラスのポインターメンバーとして宣言されています。-> SoftwareSerial* gpsSerial
; compassSerial
も同じように宣言されています - >SoftwareSerial* compassSerial;
上記のサンプル コードでは、デジタル コンパスのみが動作し、GPS は動作しません。しかし、コードの位置を入れ替えると、次のようになります。
void CSensor::initSensors()
{
//For digital compass
this->compassSerial = new SoftwareSerial(6, 7);
this->compassSerial->begin(9600);
//For GPS
this->gpsSerial = new SoftwareSerial(2, 3);
this->gpsSerial->begin(9600);
}
GPS は機能しますが、デジタル コンパスは機能しません。ソフトウェアシリアルに問題があると思います。解決策は何ですか?