Pages: [1]   Go Down
Author Topic: Problema con transmisión inalámbrica de datos GPS  (Read 1180 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muy buenas,

Estoy comunicando dos arduinos (Mega y Duemilanove) mediante RF, utilizando emisor y receptor de 433MHz (los de Sparkfun). El arduino Mega lo tengo como receptor de datos, y el arduino Duemila como emisor.

Todo va bien hasta que hago pequeñas modificaciones en el montaje, por ejemplo, que en vez de enviar siempre la cadena "Hola", envíe un dato obtenido por un puerto serie cualquiera (en mi caso una trama GGA), concretamente rx es el pin 9 y el tx es el pin 8, para lo que utilizo la librería softwareserial. Como veréis abajo en el código, todavía no quiero enviar esta trama, sino que quiero verla por pantalla y enviar la cadena "Hola", pero no sale nada, es que como si la librería softwareserial y la librería virtualwire fueran incompatibles.

Alguien me puede echar una mano?

Este es mi código.
Code:
// Inclusión de la librería SoftwareSerial
#include <SoftwareSerial.h>

#include <VirtualWire.h>  // Inclusión librería VirtualWire
#undef int
#undef abs
#undef double
#undef float
#undef round

// Constantes
#define rxPin 9      //Conexión de GPS a rx pin (recibe datos serie)
#define txPin 8      //Conexión de GPS a tx pin (transmite datos serie)

// Creación del objeto 'gps' del tipo SoftwareSerial.
SoftwareSerial gps = SoftwareSerial(rxPin, txPin);

// Variables
byte byteGPS = 0;
int i = 0;
int h = 0;

// Inicialización de los buffers
char inBuffer[300] = "";
char GPS_RMC[100]="";
char GPS_GGA[100]="";

void setup()
{
  // Inicializar IO y ISR
  vw_set_ptt_inverted(true);    // Requerido para el módulo RF Link
  vw_setup(8000);               // Velocidad en baudios
  vw_set_tx_pin(3);             // Usamos el pin 3 como transmisor de datos Tx

  //Inicialización del puerto serie 'gps'. Puerto serie creado.
  pinMode(rxPin, INPUT);
  pinMode(txPin, OUTPUT);
  gps.begin(4800);    // Configuración de velocidad para comunicación serie. Utilizar valores superiores a 9600 baudios dará lugar a comunicaciones fallidas.

  //Inicialización del puerto serie para la comunicación con el ordenador.
  Serial.begin(4800);
 
  delay(100);
}
void loop(){
 
  // Leer trama GGA del GPS
  byteGPS = 0;
  byteGPS = gps.read();
 
  while(byteGPS != 'A'){
    byteGPS = gps.read();
  }
 
  GPS_GGA[0]='$';
  GPS_GGA[1]='G';
  GPS_GGA[2]='P';   
  GPS_GGA[3]='G';
  GPS_GGA[4]='G';
  GPS_GGA[5]='A';
 
  i = 6;
 
  while(byteGPS != '*'){                 
    byteGPS = gps.read();         
    inBuffer[i]=byteGPS;
    GPS_GGA[i]=byteGPS;
    i++;                     
  }
   
  // Imprimir trama GGA por USB
  Serial.print("GGA sentence: ");
  h = 0;
 
  while(GPS_GGA[h] != 42){
    Serial.print(GPS_GGA[h],BYTE);
    h++;
  }
 
  Serial.println("  Fin de trama GGA");
  delay(500);
 
  const char *msg = "Hola";               //Mensaje que queremos enviar

  vw_send((uint8_t *)msg, strlen(msg));
  vw_wait_tx();                           // Esperar a que termine el mensaje

  delay(50);
}
Logged

0
Offline Offline
Jr. Member
**
Karma: 1
Posts: 92
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

A mi me pasó algo parecido y concluí lo mismo que tú...deben usar algún timer común o algo parecido.
Lo solucioné utilizando directamente la lectura del buffer con "serial.read()", sin utilizar softwareserial.
La verdad es que venía muy bien porque funciona por interrupción y podías en cada momento ver si te había llegado la trama que necesitas. Al final puse a leer el buffer en en loop sólo cuando había recibido los datos de GPS (más de 135 bytes en mi caso). Luego los parseaba para obtener la información que necesitaba.
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 17
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Muchas gracias por la info. En mi caso sólo quiero recibir la trama GGA (creo que son 62 bytes). Probaré con lo que me dices, a ver si hay suerte.

Sería interesante tener una solucion de nivel general para enviar y recibir de forma inalámbrica los datos obtenidos por uno o varios puertos serie. En cuanto tenga algún resultado lo comento por aquí. Revisaré también las librerías.

Si alguien más puede dar algún tipo de información, se agradecería mucho.

De antemano, gracias!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Alguno puede pasarme el código? yo lo he intentado por todos los medios y soy incapaz de echarlo a andar.

Gracias de antemano.
Logged

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
La verdad es que venía muy bien porque funciona por interrupción y podías en cada momento ver si te había llegado la trama que necesitas.

A que te refieres @javilolo
Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

Pages: [1]   Go Up
Jump to: