( solucionado )Novato en apuro con placa gps

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 . :confused: :confused:

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

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.

#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

#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 :

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.
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.

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

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

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

#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

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

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

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

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

Que IDE estas usando?

surbyte:
// #include “WProgram.h” y asunto terminado.

una vez mas… comenta #include “WProgram.h” usando //

utililizo el 1.6.7

lo comento en el codigo //#include "WProgram.h" y sigue con el mismo error

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

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.

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

lo que compilo todos los codigos ya sin problemas y en la placa sd cuando intento que inicie me sale el siguiente error en el serial monitor

GPSlogger BricoGeek
La inicializacion de la SD ha fallado!
Error en la SD: 1,0
error
error
error
error