[Algoritmo] Mutua esclusione multipla. Non ci riesco...

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.