KeyPad 4x4 I2C AddEventListner e Iterrupt

Salve a tutti volevo chiedervi delle infor su come risolvere un problema che i si sta presentando.

Ho una scheda arduino mega con un display TFT 3.95'' un modulo BlueThoot connesso ad un modulo OBD e una KeyPad 4x4 connessa alla scheda arduino attraverso I2C con un modulo basato su PCF8574.

Il mio display visualizza le informazioni provenieti dal modulo sul mio display. Per porter gestire il menu ho fatto un giro su internet ed ho notato la funzione AddEventListner della libreria KeyPadI2C che poi è la stessa della libreria KeyPad.

Ora sarà la mia scarsa comprensine dell'inglese ma dai vari siti e tutorial che ho visto utilizzando AddEventListner è come se si creasse un Interrupt in cui alla pressione di un tasto della tastiera viene eseguinto il codice contenuto nel metodo creato.

Ho fatto questo sul mio progetto è in parte funziona solo che non lavora proprio come un interrupt in quanto per visualizzare il menu o cambiare voce devo premere il tasto in un dato momento di esecuzione del codice... altrimenti la pressione del pulsante sulla keypad non viene recpita. Mi potreste dire come poter risolvere il problema? Vi sono grato del vostro aiuto

Vi posto parte del codice

void setup() {

...
    Wire.begin( );
    kpd.begin(makeKeymap(keys) );
    kpd.addEventListener(keypadEvent); //add an event listener for this keypad
    
    modo=1;
    vocemenu=1;
    KeyPadMode=0;
....
}


void loop() {

  key = kpd.getKey();

  switch (KeyPadMode){
    case 0:
      ImpostaPage(modo);
    break;
    case 1:
      ImpostaMenu(vocemenu);
    break;
  }

}


void keypadEvent(KeypadEvent key){
  switch (kpd.getState()){
    case PRESSED: 
    // Modalita di visualizzazione Informazioni OBD
    if (KeyPadMode==0){
      switch(key){
        case 'D': //dalla finestra che mostra le info premo il tasto D e lui mi visualizza il menu
          ClearScr(); 
          KeyPadMode=1; // passo alla modalità mostra menu
          ImpostaMenu(modo);
        break;
        case 'B': // Cambia l'info mostrata aumentado di 1
          if (modo==10) {
            modo=1;
            ImpostaPage(modo);
          }
          else {
            modo=modo-1;
            ImpostaPage(modo);
          }
        break;
        case 'C': // Cambia l'info mostrata diminuendo di 1
          if (modo==1) {
            modo=10;
            ImpostaPage(modo);
          }
          else {
            modo=modo+1;
            ImpostaPage(modo);
          }
         break;
      }
    } // Con questo termina l'IF del modo 0 cioè Visualizzazione Info
    // Modalità mostra Menu per la selezione dell'info
    if (KeyPadMode==1){
      switch (key){
        case 'A': //dalla finestra che mostra le info premo il tasto D e lui mi visualizza il menu
          ClearScr(); 
          KeyPadMode=0; // passo alla modalità mostra menu
        break;
        case 'B': // Cambia l'info mostrata aumentado di 1
          if (vocemenu==1) {
            vocemenu=10;
          }
          else {
            vocemenu=vocemenu-1;
          }
        break;
        case 'C': // Cambia l'info mostrata diminuendo di 1
          if (vocemenu==10) {
            vocemenu=1;
          }
          else {
            vocemenu=vocemenu+1;
          }
         break;
      }      
    } // Con questo termina l'IF del modo 1 cioè Voce del Menu
    break;
  }
}

Avete qualche consiglio da darmi in merito? il modulo basato sul PCF8574 è dotato anche di un pin utilizabile per generare un interrupt ma non saprei come utilizzarlo nel mio contesto

Sarei infinitamente grato se potreste darmi qualche suggerimento in merito.

Vi ringrazio.