lettura da seriale non avviene

Ciao a tutti,

ho un problema sulla lettura da seriale. Partendo da questo esempio funzionante:

#include <SoftwareSerial.h>
 
static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;
 
// The serial connection to the GPS device
SoftwareSerial ss(RXPin, TXPin);
 
void setup()
{
  Serial.begin(115200);
  ss.begin(GPSBaud);
}
 
void loop()
{
  // Output raw GPS data to the serial monitor
  while (ss.available() > 0){
    Serial.println(ss.readStringUntil("/n"));
  }
}

io ho bisogno, dopo che sono state stampate le informazioni su seriale, di svolgere altre operazioni... pensavo ad un gioco di variabili switch come:

void loop()
{
  if (a == 0){
        while (ss.available() > 0){
    Serial.println(ss.readStringUntil("/n"));
  }
  a= 1;}
  else {
ISTRUZIONI
a=0;}
}

ma cosi esegue solo le istruzioni raccolte in else... sulla seriale non stampa nulla.. Come potrei risolvere?
Ringrazio in anticipo

Senza nessun if, la readStringUntil() è bloccante, infatti basta una if e non while()

  while (ss.available() > 0){
    Serial.println(ss.readStringUntil("/n"));
  }
  ISTRUZIONI

Anche così purtroppo non funziona...

Le informazioni seriali arrivano da un modulo gps neo-6m-0-001... forse sono lente?

sicuro dal modulo la stringa arriva con alla fine un /n ?
"readStringUntil() reads characters from the serial buffer into a string. The function terminates if the terminator character is detected or it times out (see setTimeout())."
E' bloccante finché non arriva quel carattere o passa un timeout. Passato il timeout non stampi nulla.

max95:
... forse sono lente?

La velocità di trasmissione la devi conoscere per leggere una seriale, non c'é storia. Nota quella puoi calcolare un tempo accettabile di time out.

max95:
ho un problema sulla lettura da seriale. Partendo da questo esempio funzionante:

include <SoftwareSerial.h>

static const int RXPin = 4, TXPin = 3;
static const uint32_t GPSBaud = 9600;

// The serial connection to the GPS device
  while (ss.available() > 0){
    Serial.println(ss.readStringUntil("/n"));
  }

Non sarebbe meglio una gestione carattere per carattere? Così facendo sei in grado di far continuare l'azione del codice senza dover aspettare l'arrivo di un carattere che forse mai verrà inviato.

Ho trovato mezza soluzione utilizzando la libreria tinygps++
http://arduiniana.org/libraries/tinygpsplus/

#include "TinyGPS++.h"
TinyGPSPlus gps;
 while (ss.available() > 0)
  gps.encode(ss.read());
Serial.print("LAT=");  Serial.println(gps.location.lat(), 6);
Serial.print("LONG="); Serial.println(gps.location.lng(), 6);
Serial.print("ALT=");  Serial.println(gps.altitude.meters());

ma cosi facendo, improvvisamente non mi funziona più il modulo sd che ho collegato tramite MISO/MOSI/SCK/CS
sui pin 12/11/13/10 (non apre più il file) :o

max95:
ma cosi facendo, improvvisamente non mi funziona più il modulo sd che ho collegato tramite MISO/MOSI/SCK/CS
sui pin 12/11/13/10 (non apre più il file) :o

e le altre cose ? come sono collegate ?

Credo sia necessario, perché noi possiamo aiutarti, che tu ci mandi tutto il codice, o almeno cosa deve fare l'intero progetto, perché alcune soluzioni sono migliori di altre a seconda della circostanza.
Per esempio mi sarebbe inutile renderti più veloce trasformandoti in una gazzella, se tutti i giorni devi relazionarti con leoni...