Arduino Uno: SoftSerial para dos dispositivos (em406a GPS y DS18B20 Temp Probe) No del todo bien

0

Estoy trabajando en un prototipo que requiere el uso de un Arduino Uno, un sensor de humedad digital, un monitor de ritmo cardíaco, una sonda de temperatura y una unidad de GPS. Mi problema, creo que es con tratar de implementar los dos dispositivos serie (GPS y Temperatura) con la biblioteca de serie del software. He leído en otras publicaciones que tales problemas pueden surgir si el código intenta comunicarse con ambos dispositivos a la vez. No creo que esté haciendo eso, pero podría estar equivocado.

Estoy logrando una salida de sensor viable, pero la salida de Temperatura y las lecturas del GPS son inconsistentes. Específicamente, las lecturas de GPS se muestran con la frecuencia suficiente pero no con regularidad y, aunque los datos de temperatura son en general buenos, esporádicamente el código imprimirá -1000. Puedo filtrar estos datos sin sentido, pero prefiero resolver el problema. ¿Alguna idea?

Main Code Loop:

 void loop(void) {

  //Read the serial port to see if GPS data is available
   while(uart_gps.available()){
     byte c = uart_gps.read();

   //If incoming data is GPS data, process it
     if(gps.encode(c)){
       Serial.println(F("Reading"));
       getgps(gps);
     }
   }

  int heartRate = getHeartRate();
  float temperature = getTemp();
  float hum_temp = getTemperature();
  float humidity = getHumidity(); 

  // ... print statements
    
pregunta user24824

2 respuestas

2

Probablemente tienes interrupciones de conflicto.

Si bien no hay ninguna razón para que esto no funcione, tendrá que volcar el entorno arduino y, probablemente, dedicar un tiempo a refinar y modificar las ISR (rutinas de servicio de interrupción) en las distintas bibliotecas.

Básicamente, las cosas de arduino le permiten a las bibliotecas hacer un lote de trabajo de configuración que efectivamente está oculto para usted. Desafortunadamente, algunas de las bibliotecas están pisando unas con otras.
La única solución para esto es entender realmente qué hacen las bibliotecas en realidad y modificar una o ambas para evitar que tengan conflictos con los recursos del AVR.

    
respondido por el Connor Wolf
0

¿Está utilizando el sensor de pulso de enlace o algo similar? Si es así, entonces el problema se debe probablemente a que las interrupciones del sensor de pulso ocurren cada milisegundo. Tuve una situación similar a la tuya, con entrada / salida distorsionada del GPS. Lamentablemente no pude encontrar una buena solución. Considere usar un Arduino separado solo para el sensor de pulso.

    
respondido por el Erion

Lea otras preguntas en las etiquetas