Si ho visto il tuo messaggio, e mi dispiace, non lo faccio per essere cattivo ma questo è un forum, e i problemi vanno analizzati in pubblico e non via MP. Per primo perché cosi si crea un precedente documentato che può servire a qualcuno in futuro e per secondo perché cosi si da la possibilità a chiunque di aiutare. Io stanotte lavoro, posso scrivere qualche post ma non ho tempo per mettermi li a risolvere il tuo problema in solitaria. Ripeto non voglio essere cattivo, ma questo sul forum non è il mio lavoro, per risolvere problemi informatici vengo pagano, qui faccio come tutti, supporto chi per passione si diletta nello sviluppo di dispositivi embedded.
Con questo non dico che non ti aiuterò, ma lo farò solo attraverso il forum.
Detto questo possiamo tornare al problema.
Non posterò il tuo codice perché è una tua creazione e solo tu ne puoi gestire la pubblicazione, ma ti darò qualche dritta per risolvere e ottimizzare il codice, quindi spero mi concederai qualche frammento di codice.
-Uso ed organizzazione della memoria.
Dichiari una "marea" di variabili, questo è veramente poco comodo e sopratutto usi i tipi a sproposito, un int utilizza due byte di memoria, non ha senso dichiarare una variabile a due stati come tale, usa il tipo bool, o se vuoi buttarti in un ottimizzazione piu spinta raggruppa gli ingressi e le uscite a gruppi di 8 e usa un byte per contenere gli 8 stati delle porte, esattamente come fa il microcontrollore per le sue porte. Dichiari una variabile per ogni pin, usa invece le definizioni del preprocessore cosi da impiegare meno memoria o raggruppa tutto in degli array cosi da avere una gestione delle variabili più intelligente, oppure ancora potresti creare un enumeratone.
-Operazioni logiche ridondanti
if(Rele22) {digitalWrite(USCITA22,HIGH);}
if(!Rele22) {digitalWrite(USCITA22,LOW);}
Questo è uno spreco di capacità computazionale, esegui una verifica su una variabile e poi la riesegui sul suo coniugato.
digitalWrite(USCITA22, Rele22);
Questo è piu che sufficiente e fa la stessa identica operazione.
-Spregiudicato uso del core
Ok, di questo non te ne posso assolutamente fare una colpa, chi usa Arduino sa che per dichiarare un pin in uscita o in entrata è necessario usare la funzione pinMode, nel tuo caso i pin da configurare sono uno sproposito e per ognuno usi una variabile che ne contenga il numero. E se ti dicessi che questo
pinMode(22, OUTPUT);
pinMode(23, OUTPUT);
pinMode(24, OUTPUT);
pinMode(25, OUTPUT);
pinMode(26, OUTPUT);
pinMode(27, OUTPUT);
pinMode(28, OUTPUT);
pinMode(29, OUTPUT);
Si può riscrivere con un solo
DDRA=0xFF;
Va beh queste sono ottimizzazioni che si rifanno all'architettura del AVR bypassando il core Arduino, non sono un priorità ma a progetto finito non farebbero male essere implementate.
-Protocollo di comunicazione
Arriviamo al tasto dolente, il protocollo di comunicazione (se mi dessero un euro ogni volta che scrivo un post su questo argomento ora sarei piu ricco di almeno una cinquantina d'euro XD)
Io e te usiamo per comunicare un protocollo di alto livello, molto articolato pieno di ridondanza e fronzoli, una macchina non ha bisogno di 50 parole per dire neve, basta l'informazione minima contenuta nella parola, se tu scrivi "PULSANTE11" la macchina si troverà ad analizzare dei dati che per lei sono inutili un semplice "p=11" passato come parametro GET è già grasso che cola. Evita di usare un linguaggio umano se non strettamente necessario, questo quasi.. anzi tolgo il quasi, sempre rallenterà la macchina e qualche volta creerà dei problemi che potevano essere evitati adottando un linguaggio piu consono. In questa situazione tu ti trovi gia limitato, non puoi adoperare informazione direttamente binaria, ti devi rifare sui char, ma con un po di codice scritto come si deve potresti implementare un tuo protocollo che preso in analisi un singolo paramento GET questo possa contenere tutte le informazioni necessarie per una corretta comunicazione tra Arduino e server. "?h=ab4ds" potrebbe gia contenere molte piu informazioni di quante ne contenga il tuo "?azione=###&Evento=###"
Per lo specifico problema che hai segnalato, non mi viene in mente nulla di immediato, andrebbero svolti dei test su cosa contiene Azione al verificarsi dell'errore perché cosi non ci dovrebbero essere problemi, rimuovi in ogni caso le parentesi che con le stringhe non vanno molto bene.
Edit:
Non esegui i debounce degli ingressi, questo ti creerà non pochi problemi!