Ho la tentazione di infierire, anzi infierisco proprio.
Ma insomma le vogliamo imparare ad usare ste struct e ste funzioni.
Certo tempo permettendo, ma è cosa di mezza giornata, perché già il concetto di sezione ti è familiare, se disegni
una centralina che ha 7 led di segnalazione tu non li spargi per il disegno ma li metti tutti in fila, nomini ogni terminale e fai lo stesso lato MCU. Con il codice si procede allo stesso modo, ma capisco che non è facile.
Comunque tu quindi if(code == 11) lo hai ripetuto n volte quanti sono i contatti?
Terribile, lungo, noioso.
Come procederei io:
Proprio dove leggi i dati, cioè dove c'è il read di I2c collezionerei tutti i dati inerenti i contatti in una variabile struct.
Es di struct
typedef struct {
uint8_t id; // il numero del contatto, cioè quello che arriva
uint8_t alarmCode; // Il tipo di alarm, da 0 255
uint8_t section; // a quale gruppo o sezione di macchine
} IDContact;
IDContatct *idContatctList[N_MAX_CONTATCT ];
mmm.. mi mancano altre info per continuare.
La versione semplice:
Serve una variabile lastHighPriorityCode dichiarata da qualche parte in modo simile a:
#define N_MAX_CONTATCT 50
typedef uint8_t PriorityCode;
PriorityCode lastHighPriority = N_MAX_CONTACT
if (code < lastHighPriority)
lastHighPriority = code;
prima di stampare
if (oldPriorityCode != lastHighPriority)
show();
dopo aver stampato
oldPriorityCode = lastHighPriority;
Prova a vedere se è sufficiente.
Ciao.