[Risolto]Problema accesso funzione esterna

Buon giorno a tutti (state sani),
da qualche ora, mi sto scontrando col problema, sembra che non posso accedere alla funzione "SWITCH".
ho messo diversi serial print per poter verificare su monitor seriale se la funzione risponde o meno.
niente, il monitor printa sempre e solo " sono in loop: " ed il compilatore compila e non segnala errori.
questo skeetch fa parte di uno piu complesso con altre funzioni che si comportano regolarmente.
probabilmente non riesco a veder gli alberi perchè coperti dal bosco........

felice di qualsiasi suggerimento.
grazie in anticipo....... buona giornata.

[ /*  Rotary encoder test ≠
  MOD WP
 */

 #define clk 3 // set variabili globali 
 #define data 2
 #define FIRE 10
byte ledStato = LOW;
byte pulsanteStato = HIGH;
#define Debounce 50
unsigned long ultimoTempoDebounce = 0;
byte ultimaLettura = LOW;
 int counter = 0; 
 bool clk_State;
 bool LastState;  
 
 void setup() { 
   pinMode (clk,INPUT); //Set pins come inputs
   pinMode (data,INPUT);
   pinMode(FIRE,INPUT);
   pinMode(LED_BUILTIN, OUTPUT); // Set pin LED_BUILTIN come OUTPUT
   digitalWrite(LED_BUILTIN, ledStato);
   Serial.begin (9600); //Set porta seriale =>Stampa sul monitor
   LastState = digitalRead(clk);   // Set val inizio CLK Encoder
 } 
 void loop() { 
  void SWITCH ();
  Serial.println("  sono in loop: ");
  delay(500);
  
 }


void SWITCH ()    // funzione SWITCH
{ //  READ ENCODER
   Serial.println("  sono in SWITCH: ");
    delay(500);
    
   clk_State = digitalRead(clk); // Legge valore "currente" CLK Encoder
   if (clk_State > LastState){ // SE val prima e "currente" CLK sono =/= => c'è stato uno step    
     if (digitalRead(data) != clk_State) { // Se DT encoder =/= CLK, => encoder senso ORARIO
       counter ++;
 Serial.print("Clockwise");
     } else {
       counter --;
 Serial.print("ANTI-Clockwise");
     }
     Serial.print("  Position: ");
     Serial.println(counter);
   } 
   LastState = clk_State; // Aggiorna previous stato del CLK con l'attuale
 //if(digitalRead(FIRE) != 1)
 //delay(100);
 //{Serial.println("FIRE");
 
  //  READ SWITCH Encoder CON DEBOUNCE
  byte lettura = digitalRead(FIRE);  // (lettura = Variabile locale) stato pulsante
  if(lettura != ultimaLettura){ // se stato pulsante è =/= ultima lettura
    ultimoTempoDebounce = millis(); // allora assegno il conteggio in millis
  }

  if((millis() - ultimoTempoDebounce) > Debounce){   // se conteggio > 50 millisec
    if(lettura != pulsanteStato and lettura == LOW){      // se Puls =/= stato del Puls e anche premuto
    ledStato = !ledStato;                                // =>cambio stato al LED_BUILTIN
     digitalWrite(LED_BUILTIN, ledStato); // Set LED interno Nano al val ledStato
    Serial.println("FIRE");
  }
   pulsanteStato = lettura; // assegno lo stato del FIRE
    }
  ultimaLettura = lettura; // assegno l`ultima lettura allo stato del pulsante
    Serial.print("Pulsante  ");
    Serial.println(pulsanteStato);
    Serial.print("ultimaLettura  ");
    Serial.println(ultimaLettura);
    delay(100); // Ritardo 100 millis
 }]

A prima vista, oltre a "sono in loop", anche "sono in SWITCH" dovrebbe stamparlo. O no?

E che ci stanno a fare le quadre all'inizio e alla fine del codice?

Ciao,
P.

anteponendo nuovamente void stai creando una funzione SWITCH locale nel loop che non ha corpo...quindi non fa nulla...prova a rimuovere il void e vedi cosa fa.

buongiorno,
grazie delle risposte.
le parentesi sono un refuso del copia incolla dello skeetch :slight_smile: :slight_smile: :slight_smile:
grazie orso. risolto, non ho preso il corona, ma ci deve essere qualcosaltro che ha colpito il lobo del discernimento cerebrale . prob anche questo nasce da copia e incolla .
grazie a tutti