Go Down

Topic: ( solucionado )Novato en apuro con placa gps (Read 2673 times) previous topic - next topic

liantony01

Jan 06, 2016, 08:43 pm Last Edit: Jan 17, 2016, 02:41 am by liantony01
Hola soy nuevo en el uso de arduino , y estoy haciendo un Gps logger , mi problema es  las librerías que son tinygps y NewSoftSerial , cuando copio estas carpetas en librerías de arduino cuando habro el código de ejemplo y intento verificar el código para subirlo en la placa de arduino  me dice error de compilación  e buscado por internet y lo que encuentro es que repita los pasos pero nada sigue igual con este error . :smiley-confuse:  :smiley-confuse:

surbyte

mira como se instala una librería. EN documentación o en cualquier libro que enseñe lo básico esta como hacerlo o bien búscalo por Internet.

La librería debe estar en el mismo directorio de Arduino y dentro en su carpeta libraries.
Yo tengo win7 x64 y esta en 
C:\Program Files (x86)\Arduino\libraries
y aca ves mis librerías, por cada nombre de carpeta, dentro encuentras el mismo nombre .cpp y .h
Asi que ahi tienes tu comprobación 


liantony01

ya busque las formas de instalar una libreria lo hice como se indica y me sale el mismo error las libreria que quiero utilizar son tinygps y NewSoftSerial.

Los codigos son :


Tinygps.

Code: [Select]
#include <NewSoftSerial.h>
#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of NewSoftSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 2(rx) and 3(tx).
*/

TinyGPS gps;
NewSoftSerial nss(2, 3);

void gpsdump(TinyGPS &gps);
bool feedgps();
void printFloat(double f, int digits = 2);

void setup()
{
  Serial.begin(115200);
  nss.begin(4800);
 
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = "); Serial.println(sizeof(TinyGPS));
  Serial.println();
}

void loop()
{
  bool newdata = false;
  unsigned long start = millis();

  // Every 5 seconds we print an update
  while (millis() - start < 5000)
  {
    if (feedgps())
      newdata = true;
  }
 
  if (newdata)
  {
    Serial.println("Acquired Data");
    Serial.println("-------------");
    gpsdump(gps);
    Serial.println("-------------");
    Serial.println();
  }
}

void printFloat(double number, int digits)
{
  // Handle negative numbers
  if (number < 0.0)
  {
     Serial.print('-');
     number = -number;
  }

  // Round correctly so that print(1.999, 2) prints as "2.00"
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i)
    rounding /= 10.0;
 
  number += rounding;

  // Extract the integer part of the number and print it
  unsigned long int_part = (unsigned long)number;
  double remainder = number - (double)int_part;
  Serial.print(int_part);

  // Print the decimal point, but only if there are digits beyond
  if (digits > 0)
    Serial.print(".");

  // Extract digits from the remainder one at a time
  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    Serial.print(toPrint);
    remainder -= toPrint;
  }
}

void gpsdump(TinyGPS &gps)
{
  long lat, lon;
  float flat, flon;
  unsigned long age, date, time, chars;
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned short sentences, failed;

  gps.get_position(&lat, &lon, &age);
  Serial.print("Lat/Long(10^-5 deg): "); Serial.print(lat); Serial.print(", "); Serial.print(lon);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");
 
  feedgps(); // If we don't feed the gps during this long routine, we may drop characters and get checksum errors

  gps.f_get_position(&flat, &flon, &age);
  Serial.print("Lat/Long(float): "); printFloat(flat, 5); Serial.print(", "); printFloat(flon, 5);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  feedgps();

  gps.get_datetime(&date, &time, &age);
  Serial.print("Date(ddmmyy): "); Serial.print(date); Serial.print(" Time(hhmmsscc): "); Serial.print(time);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  feedgps();

  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  Serial.print("Date: "); Serial.print(static_cast<int>(month)); Serial.print("/"); Serial.print(static_cast<int>(day)); Serial.print("/"); Serial.print(year);
  Serial.print("  Time: "); Serial.print(static_cast<int>(hour)); Serial.print(":"); Serial.print(static_cast<int>(minute)); Serial.print(":"); Serial.print(static_cast<int>(second)); Serial.print("."); Serial.print(static_cast<int>(hundredths));
  Serial.print("  Fix age: ");  Serial.print(age); Serial.println("ms.");
 
  feedgps();

  Serial.print("Alt(cm): "); Serial.print(gps.altitude()); Serial.print(" Course(10^-2 deg): "); Serial.print(gps.course()); Serial.print(" Speed(10^-2 knots): "); Serial.println(gps.speed());
  Serial.print("Alt(float): "); printFloat(gps.f_altitude()); Serial.print(" Course(float): "); printFloat(gps.f_course()); Serial.println();
  Serial.print("Speed(knots): "); printFloat(gps.f_speed_knots()); Serial.print(" (mph): ");  printFloat(gps.f_speed_mph());
  Serial.print(" (mps): "); printFloat(gps.f_speed_mps()); Serial.print(" (kmph): "); printFloat(gps.f_speed_kmph()); Serial.println();

  feedgps();

  gps.stats(&chars, &sentences, &failed);
  Serial.print("Stats: characters: "); Serial.print(chars); Serial.print(" sentences: "); Serial.print(sentences); Serial.print(" failed checksum: "); Serial.println(failed);
}
 
bool feedgps()
{
  while (nss.available())
  {
    if (gps.encode(nss.read()))
      return true;
  }
  return false;
}


NewSoftSerial

Code: [Select]
#include <NewSoftSerial.h>

NewSoftSerial mySerial(2, 3);

void setup() 
{
  Serial.begin(57600);
  Serial.println("Goodnight moon!");

  // set the data rate for the NewSoftSerial port
  mySerial.begin(4800);
  mySerial.println("Hello, world?");
}

void loop()                     // run over and over again
{

  if (mySerial.available()) {
      Serial.print((char)mySerial.read());
  }
  if (Serial.available()) {
      mySerial.print((char)Serial.read());
  }
}



El error que muestra es el siguiente :

Code: [Select]



In file included from test_with_gps_device.pde:2:0:
C:\Program Files (x86)\Arduino\libraries\TinyGPS/TinyGPS.h:24:22: fatal error: WProgram.h: No such file or directory
 #include "WProgram.h"
                      ^
compilation terminated.
Error compiling.


Code: [Select]

C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Print.h:48:20: error:   overriding 'virtual size_t Print::write(uint8_t)'
     virtual size_t write(uint8_t) = 0;
                    ^
Error compiling.

GO_zalo

ya no hay que hacer todo eso desde el IDE puedes buscar las librerías: Programa>Incluir librería y luego Gestionar librerías

Si allí no sale la que buscas puedes hacer click en añadir librería .zip y te aseguras que la librería va a parar a donde corresponde

liantony01

El problema no es añadir la libreria , es cuando intento compilar no me deja el código me sale error

jjpd00

He compilado los dos códigos que envías y a mí me los compila sin errores (ver 1.6.7), con alguna modificación ya que NewSoftSerial ya está incluído en el Core y se debe utilizar SoftwareSerial.

Este es el código que he compilado

Code: [Select]

#include <SoftwareSerial.h>
#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
   It requires the use of NewSoftSerial, and assumes that you have a
   4800-baud serial GPS device hooked up on pins 2(rx) and 3(tx).
*/

TinyGPS gps;
SoftwareSerial nss(2, 3);
 
void gpsdump(TinyGPS &gps);
bool feedgps();
void printFloat(double f, int digits = 2);

void setup()
{

  Serial.begin(115200);
  nss.begin(4800);
 
  Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
  Serial.println("by Mikal Hart");
  Serial.println();
  Serial.print("Sizeof(gpsobject) = "); Serial.println(sizeof(TinyGPS));
  Serial.println();
}

void loop()
{
  bool newdata = false;
  unsigned long start = millis();

  // Every 5 seconds we print an update
  while (millis() - start < 5000)
  {
    if (feedgps())
      newdata = true;
  }
 
  if (newdata)
  {
    Serial.println("Acquired Data");
    Serial.println("-------------");
    gpsdump(gps);
    Serial.println("-------------");
    Serial.println();
  }
}

void printFloat(double number, int digits)
{
  // Handle negative numbers
  if (number < 0.0)
  {
     Serial.print('-');
     number = -number;
  }

  // Round correctly so that print(1.999, 2) prints as "2.00"
  double rounding = 0.5;
  for (uint8_t i=0; i<digits; ++i)
    rounding /= 10.0;
 
  number += rounding;

  // Extract the integer part of the number and print it
  unsigned long int_part = (unsigned long)number;
  double remainder = number - (double)int_part;
  Serial.print(int_part);

  // Print the decimal point, but only if there are digits beyond
  if (digits > 0)
    Serial.print(".");

  // Extract digits from the remainder one at a time
  while (digits-- > 0)
  {
    remainder *= 10.0;
    int toPrint = int(remainder);
    Serial.print(toPrint);
    remainder -= toPrint;
  }
}

void gpsdump(TinyGPS &gps)
{
  long lat, lon;
  float flat, flon;
  unsigned long age, date, time, chars;
  int year;
  byte month, day, hour, minute, second, hundredths;
  unsigned short sentences, failed;

  gps.get_position(&lat, &lon, &age);
  Serial.print("Lat/Long(10^-5 deg): "); Serial.print(lat); Serial.print(", "); Serial.print(lon);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");
 
  feedgps(); // If we don't feed the gps during this long routine, we may drop characters and get checksum errors

  gps.f_get_position(&flat, &flon, &age);
  Serial.print("Lat/Long(float): "); printFloat(flat, 5); Serial.print(", "); printFloat(flon, 5);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  feedgps();

  gps.get_datetime(&date, &time, &age);
  Serial.print("Date(ddmmyy): "); Serial.print(date); Serial.print(" Time(hhmmsscc): "); Serial.print(time);
  Serial.print(" Fix age: "); Serial.print(age); Serial.println("ms.");

  feedgps();

  gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
  Serial.print("Date: "); Serial.print(static_cast<int>(month)); Serial.print("/"); Serial.print(static_cast<int>(day)); Serial.print("/"); Serial.print(year);
  Serial.print("  Time: "); Serial.print(static_cast<int>(hour)); Serial.print(":"); Serial.print(static_cast<int>(minute)); Serial.print(":"); Serial.print(static_cast<int>(second)); Serial.print("."); Serial.print(static_cast<int>(hundredths));
  Serial.print("  Fix age: ");  Serial.print(age); Serial.println("ms.");
 
  feedgps();

  Serial.print("Alt(cm): "); Serial.print(gps.altitude()); Serial.print(" Course(10^-2 deg): "); Serial.print(gps.course()); Serial.print(" Speed(10^-2 knots): "); Serial.println(gps.speed());
  Serial.print("Alt(float): "); printFloat(gps.f_altitude()); Serial.print(" Course(float): "); printFloat(gps.f_course()); Serial.println();
  Serial.print("Speed(knots): "); printFloat(gps.f_speed_knots()); Serial.print(" (mph): ");  printFloat(gps.f_speed_mph());
  Serial.print(" (mps): "); printFloat(gps.f_speed_mps()); Serial.print(" (kmph): "); printFloat(gps.f_speed_kmph()); Serial.println();

  feedgps();

  gps.stats(&chars, &sentences, &failed);
  Serial.print("Stats: characters: "); Serial.print(chars); Serial.print(" sentences: "); Serial.print(sentences); Serial.print(" failed checksum: "); Serial.println(failed);
}
 
bool feedgps()
{
  while (nss.available())
  {
    if (gps.encode(nss.read()))
      return true;
  }
  return false;
}



Para el error que te da el tinygps.h C:\Program Files (x86)\Arduino\libraries\TinyGPS/TinyGPS.h:24:22: fatal error: WProgram.h: No such file or directory
 #include "WProgram.h"

prueba modificando en el fichero C:\Program Files (x86)\Arduino\libraries\TinyGPS/TinyGPS.h esto

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "WProgram.h"
#endif

por esto otro

#if defined(ARDUINO) && ARDUINO >= 100
#include "Arduino.h"
#else
#include "Arduino.h"
#endif


Saludos,

Juanjo

surbyte

Jeje muy elegante forma de ponerle // #include "WProgram.h" y asunto terminado.

liantony01

funciono despues tuve que cambiar el el archivo .pp para poder compilar .. gracias por la ayuda

lo que tengo otro error parecido


 este es el error que sale

Code: [Select]




In file included from BricoGeek_SdFatGPS_CSVSensorLogger.pde:17:0:
C:\Users\liantony\Documents\Arduino\libraries\SdFat/SdFatUtil.h:27:22: fatal error: WProgram.h: No such file or directory
 #include <WProgram.h>
                      ^
compilation terminated.
Error compiling.

 es el mismo error pasado pero no veo como hacer el mismo proceso con esta libreria

liantony01


ese es el codigo que estoy usando , no lo escribi porque no me dejaba en la pagina

https://drive.google.com/file/d/0BwlGiFQVwtsARkJENGxicmpiVEU/view?usp=sharing

surbyte

Que IDE estas usando?
// #include "WProgram.h" y asunto terminado.
una vez mas.. comenta #include "WProgram.h" usando //

liantony01


liantony01

lo comento en el codigo
Code: [Select]
//#include "WProgram.h" y sigue con el mismo error

jjpd00

liantony... busca arduino.h en la carpeta dónde tengas instalado el IDE de Arduino y haces una copia de arduino.h con el nombre WProgram.h

En mi PC lo tengo en la carpeta C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino

Con esto nunca más te debería dar ese error.

P.D.:Surbyte... muy elegante no es...pero eficaz!! jejeje

Saludos,

Juanjo

surbyte

bueno ya lo resolvimos. Creemos que el problema general era duplicidad de librerias, pero cambiamos el IDE por 1.6.0 de www.arduino.cc y ademas instalamos librerías actualizadas tinyGPS y SDfat.
Salió andando.

liantony01

si con lo el cambio de ide y eliminando el duplicado todo salio perfecto en lo que es la compilacion de los codigos

Go Up