Go Down

Topic: Inserire le credenziali per la connessione wifi dal monitor seriale (Read 284 times) previous topic - next topic

Federico66

... ma perché...

perché usare un loop infinito e poi verificare una condizione, quando può semplicemente usare
Code: [Select]
while (Serial.available())

perché adesso escludi solo /r, devi escludere anche /n, altrimenti devi ricordarti di configurare correttamente il monitor seriale

perché scomodare un goto, se scrivi correttamente il ciclo, non serve

infine, visto che invii da monitor, aggiungi un controllo sulla lunghezza, come ti ha consigliato @fabpollli

Federico

gpb01

perché usare un loop infinito e poi verificare una condizione, quando può semplicemente usare
Code: [Select]
while (Serial.available())
.... occhio che questo richiede una certa attenzione ... spesso la Serial.available() è più veloce della ricezione stessa e ... si esce da quel loop prima che effettivamente sia terminata la trasmissione (cosa provata e verificata). Sempre meglio utilizzare o il riconoscimento di un terminatore o un timeout, ma NON così come suggerisci.

Guglielmo
Search is Your friend ... or I am Your enemy !

gpb01

E se tu inizializzando gli array di char prima di scriverli sarebbero anche già correttamente terminati senza bisogno che lo facessi tu apposta ....
SE non conosce la lunghezza esatta di ciò che riceverà, o SE deve ricevere cose di lunghezza variabile, NON si può inizializzare solo 'ultimo elemento, ma si può, allo stesso modo, riempire l'intero array di 0x00 così, dovunque si arrivi, comunque dopo c'è il terminatore ;)

Guglielmo
Search is Your friend ... or I am Your enemy !

C1P8

Se scrive il primo zero tutti gli altri sono automatici


Ho studiato elettronica, non informatica, è vero

Ma il reference del linguaggio lo so leggere
„Quando il sole della cultura è basso, i nani hanno l'aspetto di giganti"

gpb01

Ma il reference del linguaggio lo so leggere
:) ... Hai ragione, ma ... la cosa NON è sempre quella corretta, come, ad esempio, spiegato QUI.

Guglielmo

P.S.: Comunque il mio post era derivato da una mia cattiva lettura del tuo, NON avevo visto che era in fase di dichiarazione dell'array, ma mi era sembrata l'assegnazione al 20esimo carattere ;)
Search is Your friend ... or I am Your enemy !

Federico66

... spesso la Serial.available() è più veloce della ricezione stessa e ...
Cioè available() potrebbe tornare false tra un byte ricevuto e il successivo!?
La mia esperienza è alquanto limitata, ma sono perplesso!

Federico

gpb01

Cioè available() potrebbe tornare false tra un byte ricevuto e il successivo!?
La mia esperienza è alquanto limitata, ma sono perplesso!
SI, e capita anche spesso, specie se la trasmissione seriale non è delle più veloci ...

... basta che calcoli il tempo che impiega un carattere ad arrivare (... a 9600 bps impiega cira 1 mSec che ... è un'eternità :D) ed il tempo di esecuzione del while() ... se il secondo è inferiore del primo, tu vai a fare il controllo quando il carattere NON è ancora arrivato e quindi available() ti da, giustamente, 0 (... nessun carattere disponibile).

Guglielmo
Search is Your friend ... or I am Your enemy !

Federico66

SI, e capita anche spesso, specie se la trasmissione seriale non è delle più veloci ...
Non posso che accettarlo come atto di fede :)

Federico

gpb01

Non posso che accettarlo come atto di fede :)
Assolutamente NO, ragiona su quello che fai nel while() e a quante decine di µSec dura, dopo pensa che per ricevere un solo carattere a 9600 impieghi 1 mSec ... ti rendi conto che fino a quando il carattere non è completamente ricevuto e spostato nel buffer di ricezione (che è quello che la available() ti da) ... tu NON hai nulla e quindi, giustamente, available() ritorna 0.

Ovvio che se hai un ciclo while() la cui durata è talmente lunga da superare il tempo di ricezione del singolo carattere più il tempo del suo spostamento nel buffer di ricezione ... allora funziona ... ma è un caso :D

Guglielmo
Search is Your friend ... or I am Your enemy !

Federico66

Assolutamente NO, ragiona ...
era una battuta, avevo già capito al tuo primo post :)
ma finora non mi è capitato di riscontrare il problema, forse proprio per il seguente motivo:

Ovvio che se hai un ciclo while() la cui durata è talmente lunga da superare il tempo di ricezione del singolo carattere più il tempo del suo spostamento nel buffer di ricezione ... allora funziona ... ma è un caso :D
Comunque al prossimo progetto ci farò attenzione.

Grazie

Federico

gpb01

era una battuta, avevo già capito al tuo primo post :)


Guglielmo
Search is Your friend ... or I am Your enemy !

Tripla-M

Ringrazio Guglielmo per le dritte che mi ha dato e corro subito a mettere apposto il codice. Poi vado a studiarmi un po gli array visto che questo è il primo progetto che faccio dove sono costretto ad usarli.

Grazie a tutti

Go Up