В момента правя проект, в който свързвам GPS модул, цифров компас и ZigBee (< href="http://en.wikipedia.org/wiki/XBee" rel="nofollow">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 ще работи, но цифровият компас не. Предполагам, че Software Serial има проблем. Какво е решението?