Duda con interruptores

Buenas!

La verdad es que llevo tiempo haciendo cosas de electrónica, pero claro, en la parte de programación cojeo mucho y en cuanto me voy un poco de lo más básico voy perdidisimo.

La cosa es que he probado a montarme una caja de botones para usar con simuladores de vuelo y juegos similares, funciona todo, incluido los encoders pero me he topado con un problema que no se como solucionar.

Al margen de las teclas y los encoders tengo montados y conectados 2 interruptores e palanca de los de toda la vida, pero claro, no trata los cambios de posición como una pulsación si no la posición de ON como que mantienes pulsada una tecla hasta que lo devuelves a la posición de OFF.

Hay alguna forma de hacer que cada cambio de posicion lo trate como una pulsacion?

Gracias de antemano!

Te voy a dar dos soluciones.

por Hardware: cambia los interruptores de palanca que tienes por unos interruptores momentaneos. Hay interruptores de palanca que funcionan funcionan como un pulsador, cuando tu los activas vuelven a la posición de reposo, además con la ventaja de que tienen dos posiciones que se pueden usar.

por Software: casi todas las librerias para leer botones además del estado LOW o HIGH ,depende de la posición y como lo hayas montado, tienen otros dos estados que te indican que ha pasado de LOW a HIGH y viceversa. Tienes que tratar esos estados. Generalmente a ese proceso se le llama detección de flanco (subida o bajada).
Así cuando tu armas el interruptor detectas si hay un cambio de tensión en la entrada y actuas en consecuencia y no solo por el valor que tenga la señal en ese momento.

Tal como dice victorjam, con detección de flancos. Cuando detectas un cambio de high a low o de low a high, envías el comando correspondiente al simulador de vuelo.

Un simple código como el que te sugiero, te servir'a para llevar el control del flanco resuelve lo que necesitas.

bool estado, estadoAnt = false;
const byte pinBoton = 2;

void setup() {
      Serial.begin(9600);

}

void loop() {

     estado  = digitalRead(pinBoton);
     if (estado && estadoAnt) {
        // tu codigo para flanco 0 a 1
        Serial.println(" Flanco ascendente 0 a 1");
    }
    if (!estado && estadoAnt) {
        // tu codigo para flanco 1 a 0
          Serial.println(" Flanco descendente 1 a 0");
    }
    estadoAnt = estado;
}