alla fiera degli Array un ascensore mio padre comprò........

invece se fosse il master:

void loop()
{
    if (remotoindirizzo() == 'A')
    {
        // trasmettitore
        if (Serial.available())
        {
            char cx = Serial.read();

            switch (cx)
            {
                case 'a':
                    remotePinMode('B', 13, OUTPUT);

                    if (remotoerrore())
                    {
                        Serial.print(remotoerrore());
                        Serial.println("errore di comunicazione");
                    }

                    remoteDigitalWrite('B', 13, HIGH);

                    if (remotoerrore())
                    {
                        Serial.print(remotoerrore());
                        Serial.println("errore di comunicazione");
                    }

                    Serial.println("Accensione Led");
                    break;

                case 's':
                    remotePinMode('B', 13, OUTPUT);

                    if (remotoerrore())
                    {
                        Serial.print(remotoerrore());
                        Serial.println("errore di comunicazione");
                    }

                    remoteDigitalWrite('B', 13, LOW);

                    if (remotoerrore())
                    {
                        Serial.print(remotoerrore());
                        Serial.println("errore di comunicazione");
                    }

                    Serial.println("Spegnimento Led");
                    Serial.print("Ascensore al piano: ");
                    Serial.println(remoteByteRead('B', 0));
                    break;

                case '0':
                case '1':
                case '2':
                case '3':
                case '4':
                case '5':
                case '6':
                case '7':
                case '8':
                    Serial.print("Ascensore al piano: ");
                    Serial.println(remoteByteRead('B', 0));
                    Serial.print("prenotiamo il piano: ");
                    remoteByteWrite('B', 1, cx - '0');
                    Serial.println(remoteByteRead('B', 1));
                    break;

                case '+':
                    // avviamo l'ascensore da remoto
                    Serial.print("Ascensore al piano: ");
                    Serial.println(remoteByteRead('B', 0));
                    Serial.print("Prenotato il piano: ");
                    Serial.println(remoteByteRead('B', 1));
                    remoteByteWrite('B', 2, 1);
                    Serial.println("Ascensore avviato, prego attendere il termine della manovra");
                    break;

                case 'q':
                    remototimeout(150);
                    // chiamiamo la prima funzione
                    Serial.print("Chiamo la prima funzione remota con argomento 2 e restituisce: ");
                    Serial.println(remoteFunBCall('B', 0, 2));
                    remototimeout(80);
                    break;

                case 'w':
                    remototimeout(150);
                    // chiamiamo la II funzione
                    Serial.print("Chiamo la II funzione remota con argomento 3 e restituisce: ");
                    Serial.println(remoteFunBCall('B', 1, 3));
                    remototimeout(80);
                    break;

                case 'e':
                    remototimeout(300);
                    // chiamiamo la IIi funzione
                    Serial.print("Chiamo la III funzione remota con argomento 25 e restituisce: ");
                    Serial.println(remoteFunBCall('B', 2, 25));
                    remototimeout(80);
                    break;

                default:
                    // ntd
                    Serial.println("comando non riconosciuto");
                    break;
            }
        }
    }
    else
    {
       .
.
.
.
    }
}

abbastanza semplicemente riceve dei comandi da seriale USB e dopo averli riconosciuti li fa eseguire alla macchina slave
trucco:
la macchina slave ha vita propria: funziona bene come ascensore autonomo
basta semplicemente usare come nome delle variabili di controllo gli elementi dell'array "comandabile" dal master, e quindi, se il master scrive in quell'array la macchina controllata "crede" che siano stati premuti i pulsanti che "normalmente" la comandano scrivendo quelle variabili
lo sporco trucco è stato quello di NON cambiare il programma, ma usare delle define per "taroccare i nomi"
se andate a vedere la scensore() e la confrontate con la loop del suo programma originale vedete che sono uguali, il trucco è qui:

// per l'ascensore
//byte piano; // piano attuale dell'ascensore
#define piano vettorebyte[0]
// magata, il byte tele-comandabile viene usato come piano
//byte chiamato; // piano prenotato
#define chiamato vettorebyte[1]
//bool prenotato; // ascensore prenotato oppure no
#define prenotato vettorebyte[2]
//bool porta = 1; // 1 aperta, 0 chiusa
#define porta vettorebyte[3]

dov eio tarocco i nomi, tipicamente il piano attuale dell'ascensore, la variabile byte piano è ri-definita come il primo elemento dello array, e via così

da ultimo le funzioni remote
nulla di particolare da dire, se non che bisogna dare alla macchina remota il tempo per eseguire la funzione, evitiamo quindi funzioni bloccanti o lunghe, evitare possibilmente anche le delay (io nell'esempio ne ho messa una) e trimmare bene il tempo di timeout della libreria
nella parte di èrogramma dove uso le funzioni remote ho messo un esempio di regolazione del timeout

e con questo credo di potervi augurare buonanotte

PS sono nuovamente graditi gli applausi

o meglio le critiche costruttive