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

Rimane da spiegare come lavora
Prima parte, si dichiarano le funzioni da "caricare" nello array

byte funzione1(byte a)
{
    // mi limito a fare operazioni semplici ma riconoscibili
    Serial.println("E' stata chiamata la funzione 1");
    Serial.print("Che stampa il suo argomento: ");
    Serial.println(a);
    Serial.println("E restituisce il doppio");
    return a * 2;
}
byte funzione2(byte a)
{
    // mi limito a fare operazioni semplici ma riconoscibili
    Serial.println("E' stata chiamata la funzione 2");
    Serial.println("Che restituisce il numero 3");
    return 3;
}
byte funzione3(byte a)
{
    // mi limito a fare operazioni semplici ma riconoscibili
    Serial.println("E' stata chiamata la funzione 3");
    Serial.println("Che accende un led");
    pinMode(13, OUTPUT);
    digitalWrite(13, HIGH);
    Serial.println("Aspetta un decimo di secondo");
    delay(100);
    Serial.println("e lo spegne");
    digitalWrite(13, LOW);
    Serial.println("Ricordati che serve aumentare il timeout remoto,");
    Serial.println("bisogna dare alla funzione il tempo di terminare");
    return 4;
}

poi si richiamano le librerie necessarie
io ho usato la seriale software come canale di comuicazione e la scheda LED&KEY

// dichiarazione delle librerie
#include <SoftwareSerial.h>
SoftwareSerial canale(2, 3); // RX, TX
#include <TM1638lite.h>
TM1638lite tm(4, 7, 8); // strobe clock data

poi la libreria specifica di remotaggio, dichiarando prima gli array byte e funzioni

#define VETTOREBYTE 4
// per avere un vettore di byte da comandare da remoto
// se non scrivo la define non viene creato il vettore
#define VETTOREFUNZIONI 3
#include <PinRemoti.h>

nella setup, a seconda che il pin 9 sia ponticellato a massa oppure no la scheda arduino prende indirizzo A oppure B e si comporta da master o slave, pur se la libreria è simmetrica

void setup()
{
    remototimeout(80);
    porta = 1;
    Serial.begin(9600);
    canale.begin(1200);
    remotoflusso(&canale);
    pinMode(9, INPUT_PULLUP);

    if (digitalRead(9))
    {
        remotoindirizzo('B');
        Serial.print(F("Gestione pin remoti, unita': "));
        Serial.println(remotoindirizzo());
        Serial.println("ricevitore->ascensore");
        // carico lo array di funzioni
        vettorefunzioni[0] = funzione1;
        vettorefunzioni[1] = funzione2;
        vettorefunzioni[2] = funzione3;
        // notare lo scalato di uno per contare umanamente le funzioni
        // accendiamo la P
        tm.displayASCII(piano, 'P');
    }
    else
    {
        remotoindirizzo('A');
        Serial.print(F("Gestione pin remoti, unita': "));
        Serial.println(remotoindirizzo());
        Serial.println("ascensore->trasmettitore");
        // faccio accendere per un poco il led sull'altro arduino
        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");
        }

        delay(500);
        remoteDigitalWrite('B', 13, LOW);

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

il bello viene al prossimo post