Infatti la mia idea era appunto quella di programmare gli slave tramite il master, una piccola sezione di codice all'interno del master che invia l'id allo slave che ha indirizzo 0000.
Una volta scritto il nuovo indirizzo in eeprom, si riavvia lo slave, e il tutto è programmato con il nuovo indirizzo.
Alla fine oggi giorno nei vari dispositivi che necessitano di comunicazioni con vari moduli, le soluzioni sono praticamente due, o dipswitch, oppure lo stesso dispositivo che è in grado di programmare i vari moduli.
In alternativa pure un arduino nano, dei dipswitch, un pulsante, e ti sei costruito il programmatore.
Come al solito il socio mi ha anticipato.
Io farei con il pulsante per richiedere al maste un nuovo indirizzo, quindi il pulsante sarebbe usato solo come reset e richiesta di nuovo indirizzo.
Un protocollino di comunicazione che gestisca questa richiesta.
Il client senza indirizzo o da ricollocare pigiando il pulsante richiede un indirizzo al server, questo gli torna il primo buco libero o liberatosi dai fallimenti precedenti. Se vuoi che l'ottavo rimpiazzi il secondo defunto, basta che pigi reset sull'ottavo e gli verrà riassegnato il 2 dopo che il 2 è stato riconosciuto come posto vacante.
Questo approccio lo puoi estendere e complicare finchè vuoi sul master per poter associare ogni ID ad una qualche significato particolare per poter mappare fisicamente le varie zone o dispositivi specifici.
Ad es. segni sul master che ti aspetti di riassociare il 3 e il primo client su cui pigi il reset e fara richiesta, diventa il 3.
Magari il 3 lo hai battezzato come una zona ben precisa e quindi mantieni l'associazione facendo solo una sostituzione di dispositivo guasto invece di riempire solo i buchi per avere continuità di ID.
Grazie anche a te.
La soluzione del pulsante è sicuramente più elegante e flessibile, però per adesso (e anche per pigrizia) sto testando la soluzione del dip-switch.
Tutte le altre proposte le tengo nel cassetto per sviluppi futuri.