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