es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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);
}
Tags:  , ,

Answer

  1. Avatar for 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.

Comments are closed.