Funzioni Serial compilano senza Serial.begin?

Ciao, sto lavorando ad un progetto complicatuccio; quando arduino è collegato al PC ricevo molti dati per analizzare i valori di alcuni sensori, e li veicolo tutti tramite Serial. Vorrei evitare che quando Arduino è scollegato dal PC perda tempo con le funzioni Serial (punto all'ottimizzazione massima...) Dunque mi sono chiesto: è sufficiente cancellare (con qualche #ifdef) il serial.begin perché le altre funzioni basate sulla Serial non vengano elaborate, oppure no? Non so se mi sono spiegato, spero di si... Ciao, e grazie!

Mi pare che se non c'è Serial.begin() comunque le Serial.print() non "falliscono". Però comunque le chiamate alla print() ci sono e consumano tempo. Non saprei se meno tempo, perchè viene verificato che la seriale non è apertà. Non semplice da verificare. La print() del serial è ereditata da classe Stream

Non credo Nid, quando la Serial.begin() non c'è, eventuali chiamate Serial.print() danno errore nel compilatore poiché l'oggetto Serial non è stato inizializzato.

Ne ero quasi certo. Ti confermo che il compilatore se manca la Serial.begin() compila lo stesso.

cyberhs commetti un grave errore di concetto, la Serial.begin() non inizializza l'oggetto ma prepara i registri necessari per la trasmissione. Corre una differenza tra l'inizializzare l'oggetto che viene fatto con la sola scrittura di Serial; come variabile globale. Quindi l'oggetto non necessità inizializzazione, ma necessita invece del metodo begin che prepara il micro a livello di registri, la chiamata a print quindi non comporta alcun errore in tempo di compilazione e in tempo di esecuzione non avrebbe senso perdere tempo a verificare che la seriale sia stata inizializzata, quindi si puo presumere che la print completi la procedura anche se non è stato invocato il begin.

Si impara sempre, grazie a Nid e Roberto.

Yaxit: Vorrei evitare che quando Arduino è scollegato dal PC perda tempo con le funzioni Serial (punto all'ottimizzazione massima...) Dunque mi sono chiesto: è sufficiente cancellare (con qualche #ifdef)

Il #ifdef viene eseguito dal preprocessore prima della compliazione percui non finisce nel sketch compilato. Percui dovresti avere 2 versioni dello sketch e caricarli a necessitá.

Quanto mi dice a mia sfera di cristallo non é questo che vuoi.

Ciao Uwe

Come lo farei io.

Metti tutti i serial print in una funzione. Metti un interruttore che leggerai da una I/O. Se l'interruttore è ON allora richiama la funzione per stampare.

Così hai lo stesso programma che va a fare i print solo se l'interruttore è on.