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.
// 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);
}