Go Down

Topic: Funzione come costante? (Read 669 times) previous topic - next topic

Aledexter

salve a tutti, è da un pò che sto cercando di rendere i miei sketch più leggibili, mi chiedevo se esiste un modo di richiamare un pezzo di sketch (in particolare devo richiamare le istruzioni per far girare uno stepper bipolare) utilizzando una costante.
ho provato con float, ma ho errori con i punti-e-virgola e, se le metto, anche con le parentesi
potete aiutarmi?

leo72

Spiegati meglio... una funzione in C si richiama con il semplice nome seguito da una coppia di parentesi, ovviamente prima devi dichiarare la funzione da qualche parte del codice. Esempio:

Code: [Select]
void loop() {
  miaFunzione();
}

void miaFunzione() {
  ...il codice
}


Se a questa funzione devi passare un parametro, devi fare in modo che la dichiarazione della funzione contenga il codice per riceverlo:

Code: [Select]
void loop() {
  miaFunzione(12.3);
}

void miaFunzione(float parametro) {
  ...il codice
}


Se poi deve restituire un valore, allora devi dichiarare che tipo di dato restituisce:

Code: [Select]
void loop() {
  int a = miaFunzione(12.3);
}

int miaFunzione(float parametro) {
  ...il codice
  return qualcosa;
}

Aledexter

#2
Jan 30, 2013, 11:11 pm Last Edit: Jan 30, 2013, 11:13 pm by Aledexter Reason: 1
Ricordavo che con void era possibile farlo, però facendo qualche prova avevo errori e ricontrollando sul sito Arduino vedevo che veniva utilizzato solo per setup e loop, quindi pensavo fosse una scelta sbagliata.
ma quindi per esempio un

void prova () {
...
}

andrebbe scritto prima del void loop se voglio utilizzarlo nel loop e/o prima di void setup se volessi richiamare le istruzioni già nel setup?

Non ho ben capito che cosa intendi per parametro, ricordo di aver letto su come si dovevano usare le parentesi tonde, che solitamente lascio vuote, quando ero agli inizi; però non me lo ricordo...

leo72

1) void indica solo che la funzione non deve restituire nulla. Se la funzione la dichiari prima del setup, tra il setup ed il loop oppure dopo il loop non cambia nulla. L'importante è che nello sketch ci sia.
2) un "parametro" è un dato passato alla funzione chiamata.

Aledexter

quindi un parametro potrebbe essere il valore di una variabile utilizzata nella funzione presa, giusto come esempio, da un pin analogico oppure da seriale? E pertanto deve essere adatto al tipo e alla grandezza del dato?

grazie comunque della risposta leo, ora vado che è tardi, domani farò delle prove
Buonanotte!

PaoloP

Ciao,
ti consiglio un lettura di questa guida --> http://www.html.it/guide/guida-c/
In particolare il capitolo 24 parla delle funzioni.

leo72


quindi un parametro potrebbe essere il valore di una variabile utilizzata nella funzione presa, giusto come esempio, da un pin analogico oppure da seriale? E pertanto deve essere adatto al tipo e alla grandezza del dato?

grazie comunque della risposta leo, ora vado che è tardi, domani farò delle prove
Buonanotte!

Un parametro è un dato che potrebbe servire alla funzione.

Immagina questo. Delay è una funzione che ferma il tuo codice per un certo lasso di tempo. Per funzionare correttamente ha bisogno di un dato, fondamentale: il tempo che deve attendere. Quel dato si chiama parametro, e glielo passi alla funzione mettendolo fra parentesi quando la chiami, ad esempio:
delay(1000)
anche analogRead è una funzione. Come la delay necessita di un parametro, il pin su cui fare la lettura analogica:
analogRead(Pin)
ma a differenza della delay essa restituisce un valore:
risultato = analogRead(pin)

Delay è perciò una funzione di tipo void, che non restituisce niente, mentre analogRead è una funzione che restituisce un valore

Go Up