В настоящее время я работаю над проектом, в котором подключаю модуль 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 есть проблема. Каково решение?