Arduino como Teclado HID: El programa se ejecuta de manera diferente en el modo Teclado/Programación.
Estoy intentando hacer un teclado HID utilizando mi Arduino Uno. Mi Arduino 1) enciende el LED rojo al configurar la conexión a la entrada (algo que simula una pulsación de tecla) y lo apaga cuando se establece la conexión; 2) enciende el LED azul cuando se activa la entrada, envía la señal de teclado emulada a través de Serial una vez y apaga el LED cuando se desactiva la entrada. Mi programa parece funcionar, encendiendo el LED rojo durante aproximadamente 0,5 segundos al iniciar, iluminando el LED azul y enviando la señal correctamente cuando se activa la entrada externa.
Sin embargo, después de cortocircuitar el Arduino para borrar el hexadecimal original y flashear el archivo hexadecimal requerido para ayudar a mi PC a identificar el Arduino como un teclado HID utilizando Freematics Builder, el programa ya no funciona como se esperaba. El LED rojo ya no se enciende al iniciar; el LED azul siempre se ilumina débilmente y no responde a las entradas externas. Probé varias versiones del archivo hexadecimal (una versión, otra versión), pero todas se comportan de la misma manera.
¿Estoy utilizando una versión incorrecta del archivo hexadecimal? ¿Estoy haciendo algo mal?
PD: Código simplificado:
// #includes
Adafruit_MPR121 cap = Adafruit_MPR121(); // entrada
/////////////////////////////////////////////////
#define KEY_1 0x59
#define KEY_2 0x5a
#define KEY_3 0x5b
#define KEY_4 0x5c
#define KEY_5 0x5d
// ... Códigos de teclas
void press_key(int key) {
uint8_t buf[8] = {0};
buf[2] = key;
Serial.write(buf, 8);
buf[2] = 0;
Serial.write(buf, 8);
}
void setup() {
pinMode(2, OUTPUT); // LED azul
pinMode(3, OUTPUT); // LED rojo
Serial.begin(9600);
while (!Serial) delay(10);
digitalWrite(3, HIGH);
if (!cap.begin(0x5A)) { // Esperar hasta establecer la conexión
while (1);
}
digitalWrite(3, LOW); // apagar LED rojo
delay(1000);
}
void loop() {
if (input_es_valido()) {
if (input_activado()) {
press_key(tecla_correspondiente);
digitalWrite(2, HIGH); // encender LED azul
} else { // input desactivado
digitalWrite(2, LOW); // apagar LED azul
}
}
delay(100);
}
davy.ai
Es posible que el problema resida en el archivo hex que se está utilizando. Es importante asegurarse de que el archivo hex sea compatible con el Arduino Uno y se descargue de una fuente confiable. Además, es importante seguir cuidadosamente las instrucciones proporcionadas por Freematics Builder para asegurarse de que el archivo hex se flashee correctamente en el Arduino.
Otra posibilidad es que el código del programa se haya visto afectado durante el proceso de flasheo. Puede ser útil volver a cargar el código del programa original y confirmar que funciona correctamente antes de intentar flashear nuevamente el archivo hex.
También puede ser valioso verificar el cableado y las conexiones del circuito para asegurarse de que no haya conexiones sueltas o defectuosas que puedan estar causando los problemas.
En general, solucionar el problema puede requerir un examen minucioso de los componentes de hardware y software involucrados en el proyecto.