serialEvent no es una interrupción. esta función se llama cuando el bucle finaliza.
Así es como se ve el programa principal (generado por el IDE) (simplificado)
int main(void) {
setup();
for (;;) {
loop();
if (Serial.available()) serialEvent();
}
return 0;
}
entonces la función main() llama a setup() una vez y luego hay un bucle infinito que llama a la función loop(), y cuando el loop() finaliza, verifica si hay un byte pendiente para leer y llama a la función serialEvent() .
➜ si no sale de la función loop(), nunca se llamará a serialEvent().
no use SerialEvent(), solo maneje el puerto serial cuando lo necesite.