Repaired EM-406 library
corrected units on MTK test program git-svn-id: https://arducopter.googlecode.com/svn/trunk@383 f9c3cf11-9bcb-44bc-f272-b75c42450872
This commit is contained in:
parent
eb7b9f6d6e
commit
2913b74b3a
@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
GPS_406.cpp - 406 GPS library for Arduino
|
GPS_406.cpp - 406 GPS library for Arduino
|
||||||
Code by Jason Short, Jordi Muñoz and Jose Julio. DIYDrones.com
|
Code by Jason Short, Jordi Muñoz and Jose Julio. DIYDrones.com
|
||||||
This code works with boards based on ATMega168/328 and ATMega1280 (Serial port 1)
|
This code works with boards based on ATMega168/328 ATMega1280 (Serial port 1)
|
||||||
|
|
||||||
This library is free software; you can redistribute it and / or
|
This library is free software; you can redistribute it and / or
|
||||||
modify it under the terms of the GNU Lesser General Public
|
modify it under the terms of the GNU Lesser General Public
|
||||||
@ -45,7 +45,7 @@ AP_GPS_406::AP_GPS_406()
|
|||||||
// Public Methods ////////////////////////////////////////////////////////////////////
|
// Public Methods ////////////////////////////////////////////////////////////////////
|
||||||
void AP_GPS_406::init(void)
|
void AP_GPS_406::init(void)
|
||||||
{
|
{
|
||||||
change_to_sirf_protocol();
|
change_to_sirf_protocol(); //Changes to SIFR protocol and sets baud rate
|
||||||
delay(100); //Waits fot the GPS to start_UP
|
delay(100); //Waits fot the GPS to start_UP
|
||||||
configure_gps(); //Function to configure GPS, to output only the desired msg's
|
configure_gps(); //Function to configure GPS, to output only the desired msg's
|
||||||
|
|
||||||
@ -53,13 +53,7 @@ void AP_GPS_406::init(void)
|
|||||||
new_data = 0;
|
new_data = 0;
|
||||||
fix = 0;
|
fix = 0;
|
||||||
print_errors = 0;
|
print_errors = 0;
|
||||||
|
|
||||||
// initialize serial port
|
|
||||||
#if defined(__AVR_ATmega1280__)
|
|
||||||
Serial1.begin(38400); // Serial port 1 on ATMega1280
|
|
||||||
#else
|
|
||||||
Serial.begin(38400);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// optimization : This code don´t wait for data, only proccess the data available
|
// optimization : This code don´t wait for data, only proccess the data available
|
||||||
@ -80,6 +74,8 @@ void AP_GPS_406::update(void)
|
|||||||
for (int i = 0; i < numc; i++){ // Process bytes received
|
for (int i = 0; i < numc; i++){ // Process bytes received
|
||||||
#if defined(__AVR_ATmega1280__)
|
#if defined(__AVR_ATmega1280__)
|
||||||
data = Serial1.read();
|
data = Serial1.read();
|
||||||
|
//Serial.print(data,HEX);
|
||||||
|
//Serial.println(" ");
|
||||||
#else
|
#else
|
||||||
data = Serial.read();
|
data = Serial.read();
|
||||||
#endif
|
#endif
|
||||||
@ -97,28 +93,28 @@ void AP_GPS_406::update(void)
|
|||||||
step = 0;
|
step = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2:
|
/* case 2:
|
||||||
if(data == 0xA2)
|
if(data == 0xA2)
|
||||||
step++;
|
step++;
|
||||||
else
|
else
|
||||||
step = 0;
|
step = 0;
|
||||||
break;
|
break;
|
||||||
|
*/
|
||||||
case 3:
|
case 2:
|
||||||
if(data == 0x00)
|
if(data == 0x00)
|
||||||
step++;
|
step++;
|
||||||
else
|
else
|
||||||
step = 0;
|
step = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 4:
|
case 3:
|
||||||
if(data == 0x5B)
|
if(data == 0x5B)
|
||||||
step++;
|
step++;
|
||||||
else
|
else
|
||||||
step = 0;
|
step = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 5:
|
case 4:
|
||||||
if(data == 0x29){
|
if(data == 0x29){
|
||||||
payload_counter = 0;
|
payload_counter = 0;
|
||||||
step++;
|
step++;
|
||||||
@ -126,7 +122,7 @@ void AP_GPS_406::update(void)
|
|||||||
step = 0;
|
step = 0;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 6: // Payload data read...
|
case 5: // Payload data read...
|
||||||
if (payload_counter <= PAYLOAD_LENGTH){ // We stay in this state until we reach the payload_length
|
if (payload_counter <= PAYLOAD_LENGTH){ // We stay in this state until we reach the payload_length
|
||||||
buffer[payload_counter] = data;
|
buffer[payload_counter] = data;
|
||||||
payload_counter++;
|
payload_counter++;
|
||||||
@ -147,7 +143,7 @@ AP_GPS_406::parse_gps(void)
|
|||||||
{
|
{
|
||||||
uint8_t j;
|
uint8_t j;
|
||||||
|
|
||||||
fix = (buffer[1] > 0) ? 1:0;
|
fix = (buffer[1] > 0) ? 0:1;
|
||||||
|
|
||||||
j = 22;
|
j = 22;
|
||||||
lattitude = join_4_bytes(&buffer[j]); // lat * 10, 000, 000
|
lattitude = join_4_bytes(&buffer[j]); // lat * 10, 000, 000
|
||||||
@ -207,6 +203,22 @@ AP_GPS_406::configure_gps(void)
|
|||||||
const uint8_t gps_ender[] = {0xB0, 0xB3};
|
const uint8_t gps_ender[] = {0xB0, 0xB3};
|
||||||
const uint8_t cero = 0x00;
|
const uint8_t cero = 0x00;
|
||||||
|
|
||||||
|
#if defined(__AVR_ATmega1280__)
|
||||||
|
for(int z = 0; z < 2; z++){
|
||||||
|
for(int x = 0; x < 5; x++){
|
||||||
|
for(int y = 0; y < 6; y++){
|
||||||
|
Serial1.print(gps_header[y]); // Prints the msg header, is the same header for all msg..
|
||||||
|
}
|
||||||
|
Serial1.print(gps_payload[x]); // Prints the payload, is not the same for every msg
|
||||||
|
for(int y = 0; y < 6; y++){
|
||||||
|
Serial1.print(cero); // Prints 6 zeros
|
||||||
|
}
|
||||||
|
Serial1.print(gps_checksum[x]); // Print the Checksum
|
||||||
|
Serial1.print(gps_ender[0]); // Print the Ender of the string, is same on all msg's.
|
||||||
|
Serial1.print(gps_ender[1]); // ender
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else
|
||||||
for(int z = 0; z < 2; z++){
|
for(int z = 0; z < 2; z++){
|
||||||
for(int x = 0; x < 5; x++){
|
for(int x = 0; x < 5; x++){
|
||||||
for(int y = 0; y < 6; y++){
|
for(int y = 0; y < 6; y++){
|
||||||
@ -221,27 +233,50 @@ AP_GPS_406::configure_gps(void)
|
|||||||
Serial.print(gps_ender[1]); // ender
|
Serial.print(gps_ender[1]); // ender
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
AP_GPS_406::change_to_sirf_protocol(void)
|
AP_GPS_406::change_to_sirf_protocol(void)
|
||||||
{
|
{
|
||||||
Serial.begin(4800); // First try in 4800
|
#if defined(__AVR_ATmega1280__)
|
||||||
|
Serial1.begin(4800); // Serial port 1 on ATMega1280 First try in 4800
|
||||||
|
delay(300);
|
||||||
|
for (byte x = 0; x <= 28; x++){
|
||||||
|
Serial1.print(buffer[x]); // Sending special bytes declared at the beginning
|
||||||
|
}
|
||||||
|
delay(300);
|
||||||
|
|
||||||
delay(300);
|
Serial1.begin(9600); // Then try in 9600
|
||||||
|
delay(300);
|
||||||
|
for (byte x = 0; x <= 28; x++){
|
||||||
|
Serial1.print(buffer[x]);
|
||||||
|
}
|
||||||
|
delay(300);
|
||||||
|
|
||||||
|
Serial1.begin(BAUD_RATE); //
|
||||||
|
delay(300);
|
||||||
|
for (byte x = 0; x <= 28; x++){
|
||||||
|
Serial1.print(buffer[x]);
|
||||||
|
}
|
||||||
|
delay(300);
|
||||||
|
|
||||||
|
#else
|
||||||
|
Serial.begin(4800); // Serial port (0) on AT168/328 First try in 4800
|
||||||
|
delay(300);
|
||||||
|
for (byte x = 0; x <= 28; x++){
|
||||||
|
Serial.print(buffer[x]); // Sending special bytes declared at the beginning
|
||||||
|
}
|
||||||
|
delay(300);
|
||||||
|
|
||||||
for (byte x = 0; x <= 28; x++){
|
Serial.begin(9600); // Then try in 9600
|
||||||
Serial.print(buffer[x]); // Sending special bytes declared at the beginning
|
delay(300);
|
||||||
}
|
for (byte x = 0; x <= 28; x++){
|
||||||
delay(300);
|
Serial.print(buffer[x]);
|
||||||
|
}
|
||||||
Serial.begin(9600); // Then try in 9600
|
|
||||||
|
Serial.begin(BAUD_RATE); // Universal Sincronus Asyncronus Receiveing Transmiting
|
||||||
delay(300);
|
|
||||||
|
#endif
|
||||||
for (byte x = 0; x <= 28; x++){
|
|
||||||
Serial.print(buffer[x]);
|
|
||||||
}
|
|
||||||
Serial.begin(BAUD_RATE); // Universal Sincronus Asyncronus Receiveing Transmiting
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -26,15 +26,15 @@ void loop()
|
|||||||
if (gps.new_data){
|
if (gps.new_data){
|
||||||
Serial.print("gps:");
|
Serial.print("gps:");
|
||||||
Serial.print(" Lat:");
|
Serial.print(" Lat:");
|
||||||
Serial.print((float)gps.lattitude / T6, DEC);
|
Serial.print((float)gps.lattitude / T7, DEC);
|
||||||
Serial.print(" Lon:");
|
Serial.print(" Lon:");
|
||||||
Serial.print((float)gps.longitude / T6, DEC);
|
Serial.print((float)gps.longitude / T7, DEC);
|
||||||
Serial.print(" Alt:");
|
Serial.print(" Alt:");
|
||||||
Serial.print((float)gps.altitude / 100.0, DEC);
|
Serial.print((float)gps.altitude / 100.0, DEC);
|
||||||
Serial.print(" GSP:");
|
Serial.print(" GSP:");
|
||||||
Serial.print(gps.ground_speed / 100.0);
|
Serial.print(gps.ground_speed / 100.0);
|
||||||
Serial.print(" COG:");
|
Serial.print(" COG:");
|
||||||
Serial.print(gps.ground_course / 1000000, DEC);
|
Serial.print(gps.ground_course / 100.0, DEC);
|
||||||
Serial.print(" SAT:");
|
Serial.print(" SAT:");
|
||||||
Serial.print(gps.num_sats, DEC);
|
Serial.print(gps.num_sats, DEC);
|
||||||
Serial.print(" FIX:");
|
Serial.print(" FIX:");
|
||||||
|
Loading…
Reference in New Issue
Block a user