Probelma con Typedef struct

Ciao a tutti;

Perchè se posso leggere e scrivere i valori richiamandoli dall'array e non posso ne leggere ne scrivere i valori sulla variabile singola?

Il serial.print nel ciclo loop è un esempio.

unsigned long Pgiro;

typedef struct {  
  const char nome[7];   // Nome del contatto
  const byte pin;       // Pin di arduino 
  boolean attuale; 
  boolean precedente; 
  boolean futuro; 
  } InOut;
// nota A0=54 A15=69
       
 InOut    Nome1  = { "Nome 1", 26 , 0 , 0 , 0 }, // 0 
          Nome2  = { "Nome 2", 27 , 0 , 0 , 0 }, // 1 
          Nome3  = { "Nome 3", 28 , 0 , 0 , 0 }, // 2 
          Nome4  = { "Nome 4", 29 , 0 , 0 , 0 }, // 3 
          Nome5  = { "Nome 5", 30 , 0 , 0 , 0 }, // 4 
          Nome6  = { "Nome 5", 31 , 0 , 0 , 0 }, // 4           
          Nome7  = { "Nome 5", 32 , 0 , 0 , 0 }, // 4           
          Nome8  = { "Nome 5", 33 , 0 , 0 , 0 }, // 4           
          Nome9  = { "Nome 5", 34 , 0 , 0 , 0 }, // 4           
          Nome10 = { "Nome 5", 35 , 0 , 0 , 0 }; // 4           
 
 
 InOut ArrayIn[]  { Nome1, Nome2, Nome3, Nome4, Nome5  };
 InOut ArrayOut[] { Nome6, Nome7, Nome8, Nome9, Nome10 };
 
void setup() { Serial.begin(115200);

for (int x=0; x<5; x++) { pinMode (ArrayIn [x].pin,  INPUT  ); // Imposto i pin come INPUT
                          
                          digitalWrite(ArrayIn[x].pin,HIGH);}  // Attivo la resistenza interna di pullup

for (int x=0; x<5; x++) { pinMode (ArrayOut[x].pin, OUTPUT  ); } // imposto i pin come OUTPUT




delay(350); } // Fine void setup





void loop(){ 
  
  unsigned long Tgiro = millis(); 

  if ( Tgiro > Pgiro+500 ) { 

    
    for (int x=0; x<5; x++) {       
      
      ArrayIn[x].attuale = digitalRead (ArrayIn[x].attuale); // Aggioro il valore di "variabile.attuale" leggendo il rispettivo "variabile.pin" 
      
      }//fine ciclo for 



    for (int x=0; x<5; x++) {   
      
      digitalWrite (ArrayOut[x].attuale , ArrayOut[x].futuro ); //Imposto l'uscita in funzione della variabile futuro
                  
      ArrayOut[x].attuale =  digitalRead (ArrayOut[x].pin); } // aggiorno il valore di "variabile.attuale" 
    
  
  
  Pgiro=Tgiro;}// fine IF


  Serial.println( ArrayIn[1].attuale ); // funziona
  
  Serial.println( Nome1.attuale ); // non funziona


} //Fine void loop

ArrayIn e Out dovrebbero essere dei puntatori alle variabili NameX ?

P.S. usa CTRL+T nell IDE che lo indenta meglio e togli quelle ennemila righe vuote che non servono

Se si, probabilmente la sintassi che hai usato non è corretta.
come hai scritto tu, ArrayIn e ArrayOut non sono puntatori alle variabili NomeX ma sono ulteriori struct inizializzati con i valori presi (copiati) dalle NomeX

Prova a dichiararle invece così:

InOut* ArrayIn[]  { &Nome1, &Nome2, &Nome3, &Nome4, &Nome5  };

Ovviamente ora ArrayIn è un vettore di puntatori e quindi NON puoi usare la sintassi con il punto per accedere agli elementi della struttura:

Serial.println( ArrayIn[1].attuale );

Ma devi usare il simbolo -> che è l'abbreviazione di (*(pointer)).membro

Serial.println( ArrayIn[1]->attuale ); 
Serial.println( Nome1.attuale );

Nota che Nome1 usa il punto perchè non è un puntatore.

Ti ringrazio moltissimo, non sai da quanto tempo ero arenato su questo errore.

E soprattutto ora il programma funziona, stavo cominciando a sognarmelo di notte.