Arduo Memory Reminder Medicine

:slight_smile:

Tra il reinventare la ruota ad ogni sketch ed utilizzare quasi soltanto librerie bisogna trovare un punto di equilibrio.
Dipende da molti fattori... In definitiva è una scelta personale, anche legata al particolare progetto o momento.
Talvolta trovo più semplice / veloce / divertente / formativo scrivere codice mio per fare una cosa comune piuttosto che andarmi a cercare una libreria già fatta e capire se fa al caso mio.
Altre volte è meglio o più conveniente affidarsi a codice già pronto, per evitare di perdere tempo in dettagli importanti ma non direttamente legati al progetto in corso.

C'è poi il discorso di base: l'uso di librerie (nel caso di Arduino parliamo di solito di classi C++) rende il codice dello sketch più pulito e leggibile (ovvero meno probabilità di bachi e maggior facilità di modifiche).

Esempio: scrivo un programma che fa lampeggiare un led. Il lampeggio può essere avviato o fermato premendo un pulsante. Posso mettere tutto nello sketch principale e la cosa rimane comprensibile, manoto che già in un esempio così semplice vado a "mescolare" nel sorgente variabili legate esclusivamente alla gestione dello stato del led e altre variabili che entrano solo nel calcolo dello stato del pulsante. Inoltre il codice del led deve rimanere separato da quello del pulsante, per evitare il caos.
Ecco che introduco allora delle funzioni per raggruppare pezzetti di logica dentro un'unica chiamata dal nome intuitivo. Tipo isButtonPressed(), oppure activateLedBlink().
Nel passo successivo noto che posso raggruppare questse funzioni e le variabili di stato su cui operano in una classe, portando il tutto in file separati. Ecco che nascono ad esempio la classe Button e la classe BlinkingLed. E nel contesto di Arduino queste sono già due librerie. Che posso mettere in sketchbook/libraries e riutilizzare in altri progetti più o meno semplici.
Non solo: posso ora utilizzare più led e più pulsanti indipendenti nello stesso programma in modo estremamente semplice (e in certa misura elegante), senza aggiungere per questo decine di righe di codice.

Discorso analogo vale ad esempio per la temporizzazione degli eventi: l'esempio blink without delay mostra la tecnica di base. Per sketch banali la si può anche usare nuda e cruda (con la variabile _prevMillis usata direttamente) ma all'aumentare dellal complessità diventa molto comodo (e talvolta indispensabile) usare librerie già pronte che la incorporano. Anche perché spesso hanno funzionalità aggiuntive che un'implementazione "nuda e cruda" porta a trascurare.

La risposta breve è: se una cosa la devi fare, il codice lo devi mettere. Che sia scritto direttamente nello sketch o già presente in una funzione di libreria, cosa cambia ?

Più in dettaglio...
In generale è vero il contrario. Usando le funzioni di una libreria al posto della ripetizione del codice "nudo e crudo" si risparmia sulla dimensione del programma. Inoltre il compilatore è abbastanza intelligente da includere nell'eseguibile finale solo le funzioni effettivamente utilizzate di una libreria. Può capitare tuttavia che il "peso" di una libreria sia maggiore rispetto ad un eventuale codice specifico scritto ad hoc, ad esempio perché la funzione di libreria tenta di risolvere il problema in termini più generali, quindi include codice che in quel particolare progetto a noi non serve.
Anche qui non esiste una ricetta valida per tutte le occasioni: bisogna valutare caso per caso, magari provare diverse librerie o, se necessario, (ri)scrivere alcune funzionalità da zero in modo dedicato al particolare problema.

Il mio consiglio è di passare alla 1.0.2, comunque proverò a compilare lo sketch anche sotto l'ultima versione pre-1.0 (mi pare sia la 0023).
Eventualmente ti mando un zip con il codice delle librerie che ho sul mio pc. Può essere che abbia fatto qualche modifica in più che non ricordo...
Dal punto di vista del PC non credo ci siano problemi nel passare dalla 22 alla 1.0.2. Le richieste di sistema sono circa uguali.