Buenas gente.
Hice una prueba con Arduino Leonardo, en la cual hago que al accionar un interruptor de palanca, este no detecte todo el tiempo en "ON", sino que sólo haga un pulso, como si se tratase de un pulsador común. Lo mismo para cuando se vuelve al interruptor en posición "OFF", que lo detecte como un pulsador común. La duración de "ON" como la de "OFF" la establecí en 60 ms.
Hay 2 códigos, uno proporcionado por ChatGPT el cual funciona y tiene "if" anidados (es el que está comentado como "//CON ESTE CÓDIGO SI FUNCIONA OK:" y ese mismo código lo edité para que no queden los "if" anidados, el cual está comentado como "//CON ESTE CÓDIGO FUNCIONA MAL, CAUSA MUCHO RETRASO AL PRESIONAR EL "BOTÓN_1":"
PROBLEMA: cuando ejecuto el código editado por mi, al pulsar el boton_1 (el cual es un pulsador común) éste detecta la pulsación con retraso (un poco más de un segundo).
¿A qué se debe el retraso del boton_1 cuando ejecuto mi código?
NOTA: en el código proporcionado se pueden ver los 2 códigos para la correcta visualización, pero no está de más aclarar que cuando ejecuto uno, comento el otro.
Acá el código:
#include <Joystick.h>
//Constantes para definir los pines de Arduino:
#define BOTON_1 4
#define PALANCA_1 9 //Interruptor de palanca
bool estadoAnteriorInterruptor = HIGH; //Estado inicial del interruptor (Apagado) PULL_UP
Joystick_ Joystick; //Instancia del objeto Joystick
void setup() {
pinMode(BOTON_1, INPUT_PULLUP); //Entradas con resistencias internas de PullUp
pinMode(PALANCA_1, INPUT_PULLUP);
Joystick.begin(); //Inicialización del objeto Jostick
}
void loop() {
bool estadoActualInterruptor = digitalRead(PALANCA_1) == LOW;
//BOTONES:
if (digitalRead(BOTON_1) == LOW) {
Joystick.setButton(0, 1); //Primer parámetro es el botón virtual, segundo parámetro su estado 1=ON
}
else {
Joystick.setButton(0, 0); //Botón virtual apagado.
}
//CON ESTE CÓDIGO FUNCIONA MAL, CAUSA MUCHO RETRASO AL PRESIONAR EL "BOTÓN_1":
if (estadoActualInterruptor != estadoAnteriorInterruptor && estadoActualInterruptor) {
// El interruptor pasó a ON
Joystick.setButton(5, 1); // Pulsar botón Nº 6 en joystick
delay(60); // Esperar breve periodo
Joystick.setButton(5, 0); // Soltar botón
// Actualizar estado anterior del interruptor
estadoAnteriorInterruptor = estadoActualInterruptor; //Pone el "estadoAnteriorInterruptor" en modo LOW y FALSE
}
else if(estadoActualInterruptor != estadoAnteriorInterruptor) {
// El interruptor pasó a OFF
Joystick.setButton(5, 1); // Pulsar botón Nº 6 en joystick
delay(60); // Esperar breve periodo
Joystick.setButton(5, 0); // Soltar botón
// Actualizar estado anterior del interruptor
estadoAnteriorInterruptor = estadoActualInterruptor;
}
//CON ESTE CÓDIGO SI FUNCIONA OK:
if (estadoActualInterruptor != estadoAnteriorInterruptor) {
// Si hubo un cambio de estado:
if (estadoActualInterruptor) {
// El interruptor pasó a ON
Joystick.setButton(5, 1); // Pulsar botón en joystick
delay(60); // Esperar breve periodo
Joystick.setButton(5, 0); // Soltar botón
} else {
// El interruptor pasó a OFF
Joystick.setButton(5, 1); // Pulsar otro botón en joystick
delay(60); // Esperar breve periodo
Joystick.setButton(5, 0); // Soltar botón
}
// Actualizar estado anterior del interruptor
estadoAnteriorInterruptor = estadoActualInterruptor;
}
}
Probé el código de los if anidados y funciona bien. Pero el editado por mi, si bien la palanca funciona bien, el pulsador boton_1 funciona con retraso.