Hola, este es mi primera incursión en este foro...
les cuento, tengo conectados un GPS PMB 688 y un LCD 4x20 a un Arduino Leonardo, utilizando las librerías TinyGPS y SoftwareSerial, lo cual es alimentado con una batería de 9v (transformada en 5V).
El gps utiliza el pin rx del leonardo y el lcd el pin 3.
TinyGPS gps;
int byteGPS=0; //lee gps
long lat,lon; //def. longitud y latitud
void setup()
{
mySerial.begin(9600);
delay(100);
Serial1.begin(4800);
while (!Serial) {}
}
void loop(){
while(Serial1.available()) // check for gps data
{
byteGPS=Serial1.read();
if (gps.encode(byteGPS))
{
gps.get_position(&lat,&lon); // get latitude and longitude
// display position
mySerial.write(12); // Clear
mySerial.write(17); // Turn backlight on
mySerial.print("Coordenadas: ");
mySerial.write(13); // Form feed
mySerial.print("lat: ");
mySerial.print(-lat);
mySerial.print(" S");
mySerial.write(13); // Form feed
mySerial.print("lon: ");
mySerial.print(-lon); // print longitude
mySerial.print(" O");
mySerial.write(13); // Form feed
mySerial.print("Num. sat: ");
mySerial.print(gps.satellites());
mySerial.write(13); // Form feed
}
}
}
y funciona bien, el problema que tengo es al desconectar la alimentación y volver a cargarlo, situación en la cual no arranca el sketch (no muestra nada en el lcd), metiendo mano, observe que activando el monitor serial arrancaba el sketch y aparecen los datos en el lcd.
El while (!Serial) creo que es necesario en el leonardo.
Lo que no acabo de entender es lo de
SoftwareSerial mySerial = SoftwareSerial(255,3);
255,3???
Ni tampoco el delay en el setup
Tampoco entiendo lo de transformar los 9v a 5V. Puedes meter los 9 V directamente por el pin Vin. Si metes 5V por Vin, tendrás problemas.
Otra cosa que no entiendo, es que con ese código, no es posible que se muestre nada por uh LCD.
Pues tienes razón en que los parámetros del softwareSerial son extraños. Por otro lado, ¿leonardo no tiene otro Serial hardware?
Lo del while (!Serial) lo decía porque según la referencia, va a estar en bucle mientras Serial no esté preparado (lo que no sé es si por preparado se entiende sólo que el puerto serial del arduino esté listo, o también incluye que haya otro dispositivo conectado al otro extremo). Por eso decía que probara a quitar esa línea. Si esa fuera la causa, habría que poner un timeout en ese while.
Confirmado. el while es necesario en el leonardo. El Serial es el puerto serie para consola, que va por el puerto USB, y el Serial1 es el TTL de los pines 0 y 1.
Revisando el código, entiendo que la LCD debe ser serie, y va por el softwareSerial, pero, ¿qué pin es el 255?
Hola gracias por sus sugerencias, el codigo si funciona, y puedo visualizar en el lcd, lo del pin 255, es para el lcd (serial), esto para asignar un pin que no interfiera (por eso utilizar uno ficticio) ya que no deseo enviar informacion del lcd a la placa.
Lo del while (!Serial) es necesario en el leonardo.
¿Porqué no arraca mi sketch al encender o reiniciar la placa Arduino?
Lo más probable es que alguna aplicación esté enviando datos en serie a tu placa al arrancar. Durante los primeros segundos, el bootloader (que viene pregrabado en tu placa) escucha la llegada de datos desde el ordenador. Después de unos segundos sin comunicación, el bootloader inicia el sketch que ya está en la placa. Si continúa el envío de datos hacia el bootloader, nunca se determinará el final de ejecución del bootloader y tu sketch no arrancará. Tendrás que encontrar una manera de cesar el envío de datos serie a la placa durante el tiempo que esta necesita para arrancar o grabar tu sketch en la placa con un programador externo, que sustituya al bootloader.
noter.... tiener razon!!!... quite while (!Serial) {} y ahora si funciona bien al reencender la placa... y yo pensando que ese codigo era necesario en arduino leonardo.... muchas gracias por sus sugerencias... para ser mi primer post he quedado muy contento con su ayuda.