Ottengo valori strani. :~ . Come posso risolvere questo problema? Dato che successivamente li vorrei memorizzare su una sd e leggerli da remoto tramite l'ethernet shield.
Ho provato, invece il gateway collegato al PC (cioè senza atmega 328),
|----------| |------------| |----------|
| NODO | | || GATEWAY |----- USB -----| PC |
|----------| |------------| |----------|
con il seguente programma in linguaggio c che mando dal pc:
Grazie per la dritta, ho provato ma non è un problema di baud rate.
Penso che forse il problema sia dovuto alla sincronizzazione dei moduli xbee.
Attualmente sono messi in AT mode, dovrei metterli in modalità API?
Questo e' l'output che vedo con minicom dal gw (sto acquisendo dati di temperatura, umidita' e luminosita'):
Stringa: [1,0.74,40.6[1,0.76,40.64,24.
Stringa: 54]
Nella prima stringa il buffer non legge nulla anche se il nodo invia dati, e poi nell'ultima che ho postato perdo un dato che poi viene ristampato in una stringa successiva.
Se utilizzo la modalità API devo comunque fare il controllo con un programma in C che gira sul microcontrollore del GW, o la sincronizzazione avviene semplicemente con le API?
C'e' qualche esempio on line? Io non sono riuscito a trovare nulla...
Grazie e scusate se mi sono dilungato troppo.
a parte che non vedo cosa serva porre la stringa a '\0' DOPO la print: semmai devi farlo PRIMA!
stai dando a stringa l'indirizzo di '\0', una stringa creata apposta all'interno di un IF, quindi appena termina l'if il '\0' "muore" e il tuo puntatore stringa, oltre a non puntare più all'array di dimensione MAX, ma a una singola cella contenetente '\0' nell'if, a fine if punterà ad una zona di memoria in cui probabilmente c'è ancora \0, mo potrebbe essere anche utilizzata per altro. E dato che tu usi quel puntatore come array, inutile sottolineare che le probabilità che i dati contenuti vengano riscritti da qualche altra variabile, o vadano a riscrivere qualche altra variabile, aumenta.
for(x=0;x<j;x++){
stringa[j]='\0'; //mette lo \0 o al posto dello \n o al posto dell'ultimo carattere, che viene quindi perso
Serial.print(stringa);
delay(500);
}
fondamentalmente è errato anche il =""; nella dichiarazione dell'array; non sono sicuro che vada a popolare il tuo array, quanto piuttosto crearne uno di dimensione apposita ed assegnarlo, infatti
char stringa []="asd";
è una scrittura corretta, perchè stringa punterà ad un array di 3 elementi, e può anche essere scritto come:
ascolta, non va bene
stringa[j]='\n';
ci vuole lo stesso il
stringa[j]='\0';
perchè indica proprio il carattere di fine stringa che è obbligatorio. Magari ti funziona bene adesso ma poi può andarti in casino (anzi dovrebbe farlo nel momento in cui riceve una stringa più corta della precedente)
tanto poi lo \n vene già aggiunto dalla
Serial.println("\r");
non capisco perchè metti lo \r, è uno standard windows che però non dovrebbe incidere