Come lavora la include?

Ok, scusate la rottura, ma qui dove lavoro. Ops mi danno lo stipendio, mi si è appena sciopato un cicloconvertitore, puzza e fumo come se fai corto con arduino, ma di più, un capannone di più.
Intanto che aspetto che passi il fumo e gli ingannieri capiscano quale cappella abbiamo appena scoperto, penso.
Pensare è sconsigliato per chi non è abituato
E mi domando. Io ho delle idiosincrasie, che vuol dire che per compiti simili adotto strategie simili. E questo mi porta ad usare più o meno sempre gli stessi nomi di variabile, lo stesso tipo di cicli, le stesse forme di chiusura dei cicli.
Sarebbe possibile mettere in un file punto acca non una classe, non alcune funzioni, ma solo lo scheletro di un ciclo da includere, scheletro che poi rimpolpero nel programma vero e proprio?
Ok scusate, passato fumo arrivati ingannieri. Ricomincio a fare il serio

No, se intendi una specie di "scheletro/modello", non puoi.
Dovrebbe essere un editor ad avere dei "modelli" eventualmente modificabili a farlo. Un pò come i modelli di Microsoft Word. Ma l'IDE di Arduino non li ha.

... pero', forse, nulla ti impedisce di scrivertene uno, salvarlo come "default", o un nome a tua scelta, e poi caricarlo e modificarlo (salvando di nuovo con nomi diversi) ogni volta che ti serve, suppongo ... :wink:

la sparo...e se creasse appunto un funzioniBase.h con le funzioni che gli interessano, ovviamente da includere nel nuovo sketch, e poi andasse a definire (#define) delle costanti per richiamare le funzioni presenti nel .h come fossero macro?

Avere delle macro dentro a un file .h che usa come se fosse una "libreria" secondo me è un'altra cosa.
Quello lo può fare.
Diverso è avere uno sketch "di default" un pò come i modelli di Word.

Per l'IDE di Arduino, quello delle ultime versioni, quando fai nuovo ti da già la setup() e la loop() vuote,
si era parlato di poter modificare quel "template" ma mi pare ci dissero che per ora è "fisso".

@nid69ita: si effettivamente rileggendo con calma quanto chiesto le macro non centrano granchè.

Ok, ingannieri fuggiti, troppa fatica lavorare.
Si vede che mi ero espresso male, quello che suggerisce orso è più o meno quello che pensavo. So per certo che il template vuoto si può modificare, non ricordo in che cartella. Ma è tra gli esempi, una cosa del tipo bare minimum, o simile. Io lo ho trovato facendo cercare per contenuto.

Cosa c'entra ?
BareMinimum.ino tra gli esempi contiene questo:

void setup() {
  // put your setup code here, to run once:
}

void loop() {
  // put your main code here, to run repeatedly:
}

Se modifichi quello quando fai nuovo hai questo contenuto modificato ? Non credo proprio.

Bravo. Vinta bambolina

Vero, modificato quel BareMinumum.ino fai nuovo e ottieni esattamente quel codice !! :o
Non ci avrei mai pensato. Inoltre era stato chiesto a chi sviluppa l'IDE dove era quel templete e ci dissero che era fisso.

C'e' un pò un difetto della cosa, essendo tra gli examples, quando scarichi una nuova versione IDE ti ritrovi con quel "template" di nuovo come quello postato sopra.

Si vede che gli ingannieri non sono tutti da me

Prima legge di Nelson. Che sono io.
Le leggi di Nelson sono sempre la prima legge di Nelson, quelle vecchie cambiano numero.
Prima legge di Nelson, se un inganniere ti dice che non è possibile è perché non lo sa fare, non ne ha voglia, oppure è stato bocciato a quell'esame.
Prima legge di Nelson, che sono io. Se un inganniere ti dice che è possibile, lascia stare, lui si sbaglia, e tu sbaglieresti a crederci.

nid69ita:
Vero, modificato quel BareMinumum.ino fai nuovo e ottieni esattamente quel codice !! ...

Bella questa ... così uno si può fare il suo template iniziale come diavolo gli pare.

Ok, bisogna salvarselo altrimenti, alla nuova release, addio ... ma non è un grande sforzo :slight_smile:

Guglielmo

Edit: ... comunque ho scoperto che ... era cosa nota fin dal 2016 ... :frowning: :frowning: :frowning:

... magari è un po' off-topic, ma ... realtivamente al "programma minimo" Arduino, QUI un'interessante analisi sull'occupazione delle varie "parti" componenti il minimo :wink:

Guglielmo

... e, sempre restando un po' off-topic, è utile segnalare (... dato che magari qualcuno non lo sa) che volendo, si può eliminare tutta la parte di inizializzazione che fa il core di Arduno (... ma poi tocca ovviamente fare tutto da soli scrivendo ciò che occorre) mettendo nella finestra del IDE:

int main(void) {
   // qui il vostro codice

}

Se si compila, per Arduino UNO, il classico setup() e loop() vuoti, si ha un'occupazione di 444 bytes, se si compila SOLO il main() vuoto, eliminando così TUTTO ciò che inizializzazione Arduino, si hanno 138 bytes :wink:

Guglielmo

vabbe, adesso pappa fatta, lavoro finito e puzza di gremo tolta dai setti nasali; riapro i giochi.
Gugliaelmo (che poi mi viene sempre di chiamarlo Gilberto, mi sa che un giorno mi scappa)
dicevo, Guglielmo, ma tu lo sai dov'è che lo IDE cerca la librerie?io nei file di configurazione non lo ho trovato, non dovrebbe esserci un percorso di ricerca multi-directory? o ricordo male? Prima legge di Nelson sulle libreire: NON MESCOALRE LE TUE CON LE altre!

Ok, risolvuto
allora, directry delle librerie anche in sketcbook (o come diavolo si scrive) sotto-directory libreries
creata sotto-directory Nelson (che sono io)
aggiunto due file puntoH, un aspettaunpopuntoacca e un aspettadipiupuntoacca
uno contiene una sola riga delay(500);
l'altro delay(1500);

// di Nelson "StandardOil"
// Idea da sviluppare: prova delle libreire
void setup(void) {
pinMode(13,OUTPUT);
}

void loop(void) {
digitalWrite(13, !digitalRead(13));
#include <aspettadipiu.h>
}

semplice semplice, cambiare la libreria citata cambia il tempo di attesa ovvio direte voi, meno ovvio penso io mai fatto questo prima, io COLLAUDO sistemi a microprocessore, mica li PROGRAMMO
OK, cosa abbiamo ttenuto?
che con due include semplici semplici metto un intera caterva di cose che alla fine della fiera mi capita sempre di copiare da un programma all'altro (char nome[]= filename.txt, if !open(filename) serial.print"errore" e cose così, le immaginate certamente meglio di me)
rispario un badile di codice ripetitivo
grazie a tutti per la pazienza e i consigli

e aggiungo, accetta anche spazi nel nome del file puntoacca, porcavacca una libidine
e per caso ho trovato come far lampeggiare un led in una sola riga, mi è servito per provare un po' di funzioni e vaccatine per la include, se si fa così:

for (byte i=0; i<10; digitalWrite(13,(i++%2)), delay(50));

in una sola riga si fa lampeggiare il led, vaccatina inutile e di soprammercato, ma magari serve de spunto a qualcuno
Se poi la si mette nel file lampeggiopuntoacca basta un semplice include quando serve,

... giusto un dubbio venuto su cosi al volo, a tradimento ... come stai ad occupazione di memoria, usando i comandi scritti normalmente nel void ed usando invece quell'include ?

Stasera provo e ti dico, ma non dovrebbe cambiare nulla