Problema lectura GPS. y radio. [SOLUCIONADO]

Que tal Foro, espero se encuentren todos bien...

El motivo de este post es para preguntarles si alguien ha tenido problema con la lectura de GPS al trabajar un sensor extra al mismo tiempo, a ver, cómo me explico:

Estoy utilizando un Arduino NANO.
GPS NEO6M
nrf24l01.

El problema que tengo, es que al intentar trabajar los dos dispositivos al mismo tiempo, el GPS no me da lectura en el serial, pero si intento sólo iniciar el GPS, muestra los datos sin ningún problema.

Utilicé la libreria SoftwareSerial, pero estuve leyendo que es algo lenta y no es muy eficiente, entonces cambié al NeoSWSerial ya que éste permite cambiar entre los distintos puertos que tenga pero básicamente, no cambió en nada.

Les muestro:

#include <SoftwareSerial.h>

#include <Arduino.h>

#include <SPI.h>
#include <String.h>
#include <EEPROM.h>
#include <RF24.h>
#include <nRF24L01.h>

SoftwareSerial gps(3,4);
RF24 radio(9,10);


void setup() {


  Serial.begin(9600);
  gps.begin(9600); 
  radio.begin();
  radio.enableAckPayload();

  radio.startListening();
}

void loop() {

 gps.listen();
 gpsPos(); 
 
 if(gps.read()){

    switchRadio();
 }

}



void gpsPos(){

if(gps.available()) {
      if(nmea_parser(gps.read())) {
        Serial.println("Posición NMEA decodificada:");
        Serial.print("Latitude: ");
        Serial.println(String(latitude));
        Serial.print("Longitude: ");
        Serial.println(String(longitude));
      }
      
    }
}

Lo que quiero mostrar con esto es la condición que hice en mi loop para verificar si hay o no una lectura del gps, lo cuál, la condición muestra que es verdadero y ejecuta el switchRadio(); la situación es que, si hay una lectura del GPS, porqué no la muestra en el serial?

------------------------------------------------------
11:03:54.881 -> Leyendo add1: 
11:03:55.051 -> Leyendo add2: 
11:03:55.185 -> Leyendo add3:                                                   Esto es el SwitchRadio();
11:03:55.354 -> Leyendo add4: 
11:03:55.525 -> Leyendo add5: 
11:03:55.694 -> Leyendo add6: 
11:03:56.102 -> Leyendo add7: 
11:03:56.740 -> Leyendo add8: 
11:03:56.876 -> ------------------------------------------------------
11:03:56.909 -> 
11:03:56.909 -> 
11:03:56.909 -> 
11:03:56.909 -> 
11:03:56.942 -> 
11:03:56.942 -> 
11:03:56.942 -> 
11:03:56.942 ->                                                                          Esto también...
11:03:56.942 -> 
11:03:56.942 -> 
11:03:56.942 -> 
11:03:56.942 -> 
11:03:56.942 -> 
11:03:56.942 -> 
11:03:56.942 -> 
11:03:56.942 -> 
11:03:56.942 -> ------------------------------------------------------
                                     JUSTO DEBAJO DE ESTA LÍNEA DEBE APARECER LA LECTURA DEL GPS PERO REPITE LO DE ARRIBA NUEVAMENTE, SALTANDO GPS...

La cosa es que:

-- El GPS funciona, ya que lo probé sólo.
-- El arduino no parece estar dañado.
-- El GPS, sabemos que empieza a dar su posición al estar en Lock, o cuando titila el LED, lo cuál lo compruebo antes de cualquier prueba.

-- Estoy casi seguro de que es problema del Serial o de la sincronía de los sensores que se usan.

Quiero aclarar que diseñé un código pequeño el cuál me tira los datos de latitud y longitud, por si se preguntan que demonios puse en el void GPSPOS(). (funciona sin problemas) por ahí no va el asunto.

Estaría muy agradecido a quién pueda apoyarme.

Saludos y excelente inicio de semana a todos.

Hi,
Que pasa cuando usas el nrf24l01 solo sin el GPS conectado. Te puedes comunicar con nrf24l01 sin problemas. Segun el nrf24l01se comunica usando el SPI y GPS usando TX/RX.

Hola Tauro:

Agradezco tu pronta respuesta, si, probando cualquiera de los dos sensores (GPS O RADIO) solos, funcionan sin problema, la cosa es que al hacer trabajarlos en conjunto, no hay lectura del gps, pero si del radio.

Hi,
Seria una buena idea de como tienes ambos sensores alambrados al NANO.

Por supuesto que sí:


RADIO NRF24L01:

PIN 9 CE
PIN 10 CS
PIN 11 MOSI
PIN 12 MISO
PIN 13 SCK

VCC A EXTERNO CON CONVERSOR DE 5 A 3.3

GND DE EXTERNO UNIDO AL GND DE ARDUINO Y AL RADIO.


GPS:

PIN GND A GND DE UNIÓN ARDUINO/ EXTERNO.
PIN VCC A 3.3V ARDUINO. (Probé con alimentación externa, también trabajó sin problemas, pero cambié la configuración ya que no era el voltaje que el GPS requería, aún así, probé por separado el GPS y sigue dando sus valores exactos).

RX A PIN 3.
TX A PIN 4.

Hi,
Ahora una vez que tu lees el GPS que haces con la infiomacion. Unas vez que tines la informaciona a donde la envias usando el nRF24L01.

Sólo lo mando a una estación pero, como no da lectura, no lo puedo hacer jaja.

Hi,
Entonces haz una prueba. Olvidate de la informacion del GPS. Conectas los dos y simula mandadole la informacion del GPS y mira ver si la puedes enviarla con los dos conectados. Ahora en el sketch donde tu le envias la informacion al remote. Este es el sketch completo que usa par el projecto o es para hacer pruebas. Yo no veo donde le envias la informacion al remoto.
Adjunto un link de una tutoria que explica como comunicarse entre dos nRF24L01.

link:https://howtomechatronics.com/tutorials/arduino/arduino-wireless-communication-nrf24l01-tutorial/

Que tal

Nuevamente agradezco muchísimo tu apoyo; tengo un sketch de un compañero pero no me permite publicarlo, espero me disculpes. Su sketch trabaja sin problemas y creo que haré lo que me dices ya que no he probado si manda la posición.. ya mismo lo pruebo.

Que tal:

Al intentar enviar, manda un simbolo, sólo una ":spades:".

Es todo lo que recibe.

Saludos y gracias nuevamente

Hi,
Porque no haces una prueba y usas el sketch de la tutoria que te adjunte y mira a ver si te manda y recibes el mesaje de "hello world". Que usas de remoto para recibri la informacion. Usas otro nRF24L01?

Que tal:

Gracias por tu respuesta.

Es correcto, utilizo otro nrf24l01 para la recepción.

He probado lo que me mandaste y si funciona sin problemas.

Hi,
Entonces quire decir que no tienes problemas de hardware. Todo parece indicar que es el software que usa cuando corre los dos modulos. Podris hacer una cosa es de leer el GPS y usa esa rutina para mandar la informacion al remote y mira haber si te trabaja.

A ver conestas modificaciones al código?

#include <SoftwareSerial.h>

#include <Arduino.h>

#include <SPI.h>
#include <String.h>
#include <EEPROM.h>
#include <RF24.h>
#include <nRF24L01.h>

SoftwareSerial gps(3,4);
RF24 radio(9,10);
bool flag = false;

void setup() {
  Serial.begin(9600);
  gps.begin(9600); 
  radio.begin();
  radio.enableAckPayload();
  radio.startListening();
}

void loop() {

 //gps.listen();
 gpsPos(); 
 
 if (flag){
    switchRadio();
    flag = false;
 }
}

void gpsPos(){
  if (gps.available()) {
      if (nmea_parser(gps.read())) {
          Serial.println("Posición NMEA decodificada:");
          Serial.print("Latitude: ");
          Serial.println(String(latitude));
          Serial.print("Longitude: ");
          Serial.println(String(longitude));
          flag = true;
      }
  }
}

Hola Surbyte:

Gracias por tu respuesta querido Admin, jaja, es bueno saber que siempre se cuenta con usted.

Que crees que ya intenté poner anteriormente un Switch condicional, tal cuál como lo estás haciendo y su resultado sigue siendo el mismo, es decir, aplico un bool false y al realizar la condición le digo que lo haga true, después de eso la condición if al bool y si es verdadera, que haga la siguiente tarea.

Lo extraño es que efectivamente, hace todo como si nada, es decir, si pasa el bool a true, y si pasa la condición if, para seguir realizando la siguiente tarea, pero aún así no muestra nada del GPS en el serial, podes creer?..

Mira, ahora estoy verificando amperajes de entrada para confirmar que no se está yendo todo para otro lado porque a veces pasa que algo empieza a consumir y mata de hambre a los demás sensores, entonces estoy con eso a ver si no está por ahí el asunto.

Un placer, como siempre discutir del tema con usted admin!

Los mantengo al tanto.

Tauro:

si te refieres a meter todo en un solo VOID, tambiéeen lo intenté, da lo mismo, sigue sin dar lectura, ¿Que loco, no?

Cómo le comentaba a Surbyte, estoy verificando alimentación, posiblemente por ahí vaya el problema ya que intenté todo en el código, me creerás si te digo que fácil tengo cómo unos 20 códigos de prueba y error para esto mismo?

RADIO_GPS1
RADIO_GPS_AHORASIQUEDA
RADIO_GPS_AHORASIQUEDA2
.....

Y LA LISTA SIGUE.... Jajaja.

De todos modos no uses listen, eso es para cuando tienes 2 SoftwareSerial y controlas cual vas a usar.

Olvide que switchRadio no esta y por lo tanto no podemos evaluar que has hecho.

Disculpen, no me permiten mostrarlo pero prácticamente no hay un problema en el switchRadio porque básicamente está funcionando sin problema, lo único que está pasando es que se salta la línea del GPS.

Ahora, con respecto a lo que comentas del SoftwareSerial, estuve leyendo y softwareSerial requiere switchear lo que se requiere leer en ese momento, entonces, prácticamente si necesito aplicar el listen porque tengo dos sensores, el GPS y el Radio.

Estoy en dos posibles situaciones que podrían afectar al tema en curso:

-- algún tipo desaturación de Buffer.
-- problemas de alimentación.

Que opinan?

No te permiten mostrar algo que sale de una librería? Por favor!!

Bueno, suerte entonces y pídele ayuda a tu amigo, entiende la ironía de lo que te comento, pero estas en una situación simple. Lo que no se ve, no se entiende.
Es una simple rutina de envio de datos.. que puede tener. Yo he publicado 200 rutinas en este foro.

Para mi tu rutina de radio se queda enviando datos siempre.

Y además no te ayudé antes con esas rutinas o me parece?

Listo, gracias.