Manipolare dati seriale


salve raga, sto utilizzando per la prima volta la seriale (tramite xbee) e sto "creando" un protocollo di comunicazione tra tx ed rx. detto questo e facendo alcune prove, inizializzando anche la seriale sul pc per vedere dati ricevuti dall'rx, ho notato che in caso il segnale tra 2 xbee non sia eccellente, la seriale riporta caratteri "strausi" (lasciatemi passare il termine  :smiley-lol:  ).
il protocollo che vorrei utilizzare è semplicissimo ed è del tipo:
"num1,num2,num3,num4,....ecc...., numn" e va capo
cosa succede: siccome ricevuti dati in seriale poi li manipolo con substring (utilizzo le virgole che delimitano tutti valori) avevo bisogno di una funzione che in vb richiamavo con un semplice comando, adesso spiego meglio:
(esempio in vb)
code: [select]

dim ciao string = 3
if ciao.isnumber() = true .......

non faceva altro che verificare se il valore memorizzato in una variabile di tipo string era effettivamente anche un numero e quindi poteva essere usato con tutte le sue proprietà di number (ad esempio per cicli for/while)
questo perchè:
se dovessi avere problemi di comunicazione (e quindi ricevere non dei numeri, ma dei caratteri del tipo èy&%%%%\\_°) questo dato ricevuto non deve essere preso in considerazione e ne tanto meno bloccare la comunicazione/esecuzione del programma sull'rx.
code: [select]

string lettura

void setup() {
  serial.begin(9600);
  sxbee.begin(9600);
}

void loop() {
  if (sxbee.available()) {
    char c = sxbee.read();
    if (c != '\n') {
      lettura += c;
    }
    else
    {
      //qui passo al vaglio le substring
    }
  }
}

quindi le substring loro volta verranno memorizzate in int (il problema è che non ho la certezza di aver ricevuto un numero)...
chi mi suggerisce una buona guida (ita/eng) per poter raggiungere il mio risultato?

credo che in c la cosa più vicina alla funzione isnumber che utilizzi in vb sia la isdigit, che però lavora su un carattere alla volta, quindi dovrai ciclare sulle varie sotto stringhe, una cosa del tipo:
code: [select]
char *token;
const char sep[2] = ",";
token = strtok(lettura, sep);
while( token != null )
{
  byte length = strlen (token);
  byte idx = 0;
  bool bisdigit = true;
  whil(bisdigit && idx <lenght)
  {
   bisdigit = isdigit(token[idx]);
   idx++;
  }
  if(bisdigit)
  {
  }
  token = strtok(null, sep);
}




Arduino Forum > International > Italiano > Software (Moderator: leo72) > Manipolare dati seriale


arduino

Comments

Popular posts from this blog

Error compiling for board Arduino/Genuino Uno.

Installation database is corrupt

esp8266 (nodemcu 0.9) client.write très lent ???