Pessoal, que bom que se interessaram por isso!
Eu gosto de fazer programas para microcontroladores e pensar em algorítmos para resolver soluções.
Eu vou fazer o seguinte.
Eu não vejo a necessidade de enviar mais de um byte para o escravo... A não ser que seja por causa da interferência.
Mas eu vou tentar resolver assim:
Vou mandar um byte para o escravo. No caso o valor 8.
O escravo recebe este byte, manda de volta, e grava numa variável "y".
O mestre verifica se o valor que voltou foi o mesmo enviado.
Caso positivo, o mestre manda um outro valor, 16 por exemplo.
O escravo recebe este valor, manda de volta e antes de gravar na variável y, ele verifica se o valor é 16.
Caso seja negativo, ele vai mandar de volta para o mestre outro valor, que não vai ser 16. Aí o mestre volta para o começo, mandando o valor 8, para que o escravo não grave um valor errado na variável "y".
Caso positivo, o escravo entra em um laço de menu(), que vai ser onde está os comandos dos reles.
No caso, o valor 16 seria para dar um comando "pode começar" e o valor 8 seria o comando do rele.
Vou implementar isto no programa hoje, e testar.
Se der certo deste jeito, eu posso colocar vários escravos, e continuar usando 1 byte. Porque eu colocaria o valor de "pode começar" diferente para cada escravo.
Abraço!