2015-02-02 4 views
0

Я хочу сделать проект, используя 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); 
    } 
} 
} 
+0

Вы хотите сказать, что вы не можете настроить XBee с помощью X-CTU, когда он установлен в щите на Arduino? Ваш код, похоже, ничего не делает с этим последовательным портом, кроме открытия. Просто настройте XBee с помощью адаптера XBee USB или какой-либо другой платы разработчика, а затем установите его в Arduino. Также рассмотрите возможность запуска XBee со скоростью 115200 бит/с - вы получите лучшую производительность, если будете нажимать сколько-нибудь значительное количество данных. – tomlogic

+0

Нет, я говорю на самом деле, что блок кода «serial.begin()» даже с этим кодом в моем эскизе делает почему-то неузнаваемым в XCT модуле xbee. Но если я использую пустой эскиз или что-то еще, что xbee узнаваем! Нужно ли настраивать последовательные контакты где-нибудь в конфигурации XCTU или что-то в этом роде? –

ответ

1

documentation for the XBee shield, кажется, подразумевает, что это ожидаемое поведение:

С прыгунов в положение USB (т.е. на двух штырей, ближайших к краю доски), то DOUT контактный XBee модуль подключается к выходу RX микросхемы FTDI, а DIN на модуле Xbee подключен к TX-выводу микросхемы FTDI. Это означает, что модуль Xbee может обмениваться данными непосредственно с компьютером - однако это работает только если микроконтроллер удален с платы Arduino. Если микроконтроллер оставлен на плате Arduino, он сможет нормально разговаривать с компьютером , но ни компьютер, ни микроконтроллер не смогут разговаривать с модулем Xbee.

Если экран XBee имеет перемычку в положении «USB», чтобы вы могли общаться с X-CTU, вы не можете использовать этот последовательный порт в своей программе Arduino.

+0

спасибо, есть переключатель на щите, я могу переключить его с USB на Direct, и я могу общаться с xbees! –

Смежные вопросы