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