errore compilazione

Ciao a tutti,
sono un principiante,dopo essermi documentato con i vari esempi ,ho provato realizzare uno sketch da solo. Si tratta di far lampeggiare uno o più led mediante un lampeggio variabile tramite un potenziometro. La compilazione mi dice che c’è un errore e non riesco a risolverlo,l’errore è sulla riga 18 e dice questo:
Lampeggio_variabile_di_4_led:18: error: return-statement with a value, in function returning 'void' [-fpermissive]
return v; // restituisce il valore finale
exit status 1
return-statement with a value, in function returning 'void' [-fpermissive] .
spero di essere stato chiaro e vi ringrazio anticipatamente.
Guido

// Lampeggio variabile di 1 led tramite un ponteziometro  

#define led_verde 2                   // led verde collegato al pin digitale 2
#define pot       0                   // potenziometro collegato al pin analogico 0

void setup() {
 pinMode(led_verde,OUTPUT);           // inposta il pin 2 come output
 int delayVal = 0;                    // fissare un valore di ritardo da un potenziometro
 int v = 0;                           // variabile temporanea
 }
 void loop(){
 int delayVal();
 {
 int v;                               // varibile temporanea intera 
 v = analogRead(pot);                 // lettura del valore del potenziometro 
 v /= 4;                              // conversione da 0-1023 a 0-255 
 return  v;                           // restituisce il valore finale 
 }
 
  digitalWrite(led_verde,HIGH);       // accendo led verde
  delayVal;                           // ritardo
  digitalWrite(led_verde,LOW);        // spengo led verde
  delayVal;                           // ritardo
 
 }

Ciao! Carino come programma!

L'errore è che te hai inserito nel void loop questo:

int delayVal();
 {
 int v;                               // varibile temporanea intera
 v = analogRead(pot);                 // lettura del valore del potenziometro
 v /= 4;                              // conversione da 0-1023 a 0-255
 return  v;                           // restituisce il valore finale
 }

In questo punto ci sono più errori:
Prima di tutto se devi dichiarare un prototipo della funzione è vero che ci vuole il ";" ma devi posizionarlo
all'inizio del programma!
Inoltre lo sviluppo dell'intera funzione (ottima cosa per migliorare la facilità di lettura del codice) scrivilo fuori dal setup e dal loop.
Altra cosa: Se nel loop richiami il sottoprogramma delayVal; significa che non stai restituendo nulla e quindi dovresti scrivere così:

   int ritardo = delayVal();

Quello che ho scritto significa che richiamo il sottoprogramma (o funzione chiamala come preferisci),effettua la lettura dell'input analogico,a questo punto restituisce il valore al void loop che viene salvato quindi nella variabile ritardo.
Successivamente metterei il classico comando delay con dentro come parametro la variabile ritardo, in questo modo:

delay(ritardo);

Spero di essere stato chiaro e di aiuto! :slight_smile:

Grazie Coppolino
cerco di inserire quello che mi hai scritto,poi ti faccio sapere,grazie ancora.
Guido

Ciao Coppolino
Sei stato chiaro,purtroppo la mia conoscenza è limitata, la modifica l’ho interpretata così ma mi da questo errore :
Arduino:1.6.8 (Windows Vista), Scheda:"Arduino/Genuino Uno"
Lampeggio_variabile_di_4_led:8: error: expected initializer before 'int'
int ritardo = delayVal();
Lampeggio_variabile_di_4_led:9: error: expected unqualified-id before '{' token
{
C:\Users\Vista\Documents\Arduino\Lampeggio_variabile_di_4_led\Lampeggio_variabile_di_4_led.ino: In function 'void loop()':
Lampeggio_variabile_di_4_led:25: error: 'ritardo' was not declared in this scope
delay(ritardo); // ritardo
Grazie ancora rimango in attesa
Guido

// Lampeggio variabile di 1 led tramite un ponteziometro  

#define led_verde 2                   // led verde collegato al pin digitale 2
#define pot       0                   // potenziometro collegato al pin analogico 0
int delayVal 
int ritardo

int ritardo = delayVal();
 {
 int v;                               // varibile temporanea intera 
 v = analogRead(pot);                 // lettura del valore del potenziometro 
 v /= 4;                              // conversione da 0-1023 a 0-255 
 return  v;                           // restituisce il valore finale 
 }
 
void setup() {
 pinMode(led_verde,OUTPUT);           // inposta il pin 2 come output
 int ritardo = 0;                    // fissare un valore di ritardo da un potenziometro
 int v = 0;                           // variabile temporanea
 
 }
 void loop(){
 
  digitalWrite(led_verde,HIGH);       // accendo led verde
  delay(ritardo);                           // ritardo
  digitalWrite(led_verde,LOW);        // spengo led verde
  delay(ritardo);                           // ritardo
 
 }
int delayVal 
int ritardo

se dichiari una variabile ti serve il ; dopo la frase. Il compilatore non riesce a dichiarare la variabile "ritardo" perchè non capisce che è finita la dichiarazione di delayval.

La delayval però mi pare che da intenzione del programma doveva essere un function... quindi non va bene.

int ritardo = delayVal();
 {
 int v;                               // varibile temporanea intera
 v = analogRead(pot);                 // lettura del valore del potenziometro
 v /= 4;                              // conversione da 0-1023 a 0-255
 return  v;                           // restituisce il valore finale
 }

La definizione di funzione non richiede il ;
La definizione di funzione non prevede l'uso del simbolo =.
Quindi rimuovi ; e =

Ciao.