Я хочу сделать проект, используя Arduino UNO R3 + Ultimate GPS Shield (со встроенным GPS) от Adafruit + Xbee Shield + Xbee S2 и еще один Arduino MEGA с Xbee Shield + Xbee-модульArduino + Ultimate GPS Shield + Xbee Shield + Xbee
Следующий код представляет собой библиотеку adafruit для вывода данных gps на консоль, используя скорость передачи данных в 115200. Моя проблема заключается в том, что xbee становится неумножаемым (с использованием XCTU) с таким кодом, поэтому я не могу его настроить ,
Мой вопрос заключается в том, работает ли мой xbee, даже несмотря на то, что его невозможно распознать или у меня проблема с программным обеспечением?
Обратите внимание, что gps работает и выводит данные в порядке.
#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>
SoftwareSerial mySerial(8, 7);
SoftwareSerial xbeeSerial(2,3);
Adafruit_GPS GPS(&mySerial);
#define GPSECHO false
boolean usingInterrupt = false;
void useInterrupt(boolean); // Func prototype keeps Arduino 0023 happy
void setup()
{
Serial.begin(115200);
xbeeSerial.begin(9600);
Serial.println("Adafruit GPS library basic test!");
GPS.begin(9600);
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); // 1 Hz update rate
GPS.sendCommand(PGCMD_ANTENNA);
useInterrupt(true);
delay(1000);
mySerial.println(PMTK_Q_RELEASE);
}
SIGNAL(TIMER0_COMPA_vect) {
char c = GPS.read();
#ifdef UDR0
if (GPSECHO)
if (c) UDR0 = c;
#endif
}
void useInterrupt(boolean v) {
if (v) {
OCR0A = 0xAF;
TIMSK0 |= _BV(OCIE0A);
usingInterrupt = true;
} else {
TIMSK0 &= ~_BV(OCIE0A);
usingInterrupt = false;
}
}
uint32_t timer = millis();
void loop() // run over and over again
{
if (! usingInterrupt) {
char c = GPS.read();
if (GPSECHO)
if (c) Serial.print(c);
}
if (GPS.newNMEAreceived()) {
if (!GPS.parse(GPS.lastNMEA())) // this also sets the newNMEAreceived() flag to false
return; // we can fail to parse a sentence in which case we should just wait for another
}
if (timer > millis()) timer = millis();
if (millis() - timer > 2000) {
timer = millis(); // reset the timer
Serial.print("\nTime: ");
Serial.print(GPS.hour, DEC); Serial.print(':');
Serial.print(GPS.minute, DEC); Serial.print(':');
Serial.print(GPS.seconds, DEC); Serial.print('.');
Serial.println(GPS.milliseconds);
Serial.print("Date: ");
Serial.print(GPS.day, DEC); Serial.print('/');
Serial.print(GPS.month, DEC); Serial.print("/20");
Serial.println(GPS.year, DEC);
Serial.print("Fix: "); Serial.print((int)GPS.fix);
Serial.print(" quality: "); Serial.println((int)GPS.fixquality);
if (GPS.fix) {
Serial.print("Location: ");
Serial.print(GPS.latitude, 4); Serial.print(GPS.lat);
Serial.print(", ");
Serial.print(GPS.longitude, 4); Serial.println(GPS.lon);
Serial.print("Location (in degrees, works with Google Maps): ");
Serial.print(GPS.latitudeDegrees, 4);
Serial.print(", ");
Serial.println(GPS.longitudeDegrees, 4);
Serial.print("Speed (knots): "); Serial.println(GPS.speed);
Serial.print("Angle: "); Serial.println(GPS.angle);
Serial.print("Altitude: "); Serial.println(GPS.altitude);
Serial.print("Satellites: "); Serial.println((int)GPS.satellites);
}
}
}
Вы хотите сказать, что вы не можете настроить XBee с помощью X-CTU, когда он установлен в щите на Arduino? Ваш код, похоже, ничего не делает с этим последовательным портом, кроме открытия. Просто настройте XBee с помощью адаптера XBee USB или какой-либо другой платы разработчика, а затем установите его в Arduino. Также рассмотрите возможность запуска XBee со скоростью 115200 бит/с - вы получите лучшую производительность, если будете нажимать сколько-нибудь значительное количество данных. – tomlogic
Нет, я говорю на самом деле, что блок кода «serial.begin()» даже с этим кодом в моем эскизе делает почему-то неузнаваемым в XCT модуле xbee. Но если я использую пустой эскиз или что-то еще, что xbee узнаваем! Нужно ли настраивать последовательные контакты где-нибудь в конфигурации XCTU или что-то в этом роде? –