Arduino deja de funcionar a las horas

Hola buenas, tengo conectado un Arduino Leonardo a una tablet con la idea de hacer un contador, de manera que cada vez que recibe señal, simulo la tecla F2 en la tablet y hago que se incremente el contador en una webapp. El Arduino se comunica con la tablet con una cable USB, que es el mismo con el que lo alimento y está conectado con un circuito pull_up con el siguiente código:

#define BUTTON_PIN 3 
#include <Bounce2.h>
#include <Keyboard.h>
Bounce2::Button button = Bounce2::Button();

void setup() {


  button.attach( BUTTON_PIN ,  INPUT_PULLUP ); 
  button.interval(200); 
  button.setPressedState(LOW); 

}

void loop() {

  button.update();

  if ( button.pressed() ) {
     Serial.println("Encendido");
     Keyboard.press(KEY_F2);
     Keyboard.releaseAll();
  }
}

El tema es que al rato el arduino deja de funcionar, no entiendo por que, ¿alguien ha experimentado algo parecido? ¿alguna posible solución?

Un saludo.

¿Cómo sabes que el Arduino deja de funcionar?

¿Está alimentando el Arduino desde la propia tableta? ¿Es posible que después de un tiempo la tableta apague el USB?

Entiendo que no, ya que la luz del arduino permanece encendida. En caso de que fuera eso ¿que podría hacer?

prueba este código. parpadeará el LED incorporado para que sepa si el loop() aún se está ejecutando.

#define BUTTON_PIN 3
#include <Bounce2.h>
#include <Keyboard.h>
Bounce2::Button button = Bounce2::Button();

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  button.attach( BUTTON_PIN ,  INPUT_PULLUP );
  button.interval(200);
  button.setPressedState(LOW);
}

void loop() {
  static uint32_t chrono;

  button.update();
  if ( button.pressed() ) {
    Serial.println("Encendido");
    Keyboard.press(KEY_F2);
    delay(100);
    Keyboard.releaseAll();
  }

  if (millis() - chrono >= 500) {
    digitalWrite(LED_BUILTIN, digitalRead(LED_BUILTIN) == HIGH ? LOW : HIGH);
    chrono =  millis();
  }
}

Agregué la llamada a "Keyboard .begin()" (y puede usar el diseño de teclado en español, vea el comentario) y una pausa de 100 ms para que su computadora tenga la oportunidad de captar la pulsación de tecla

No veo donde está el keyboard.begin(), ¿iría en el setup?

sí lo siento

#define BUTTON_PIN 3
#include <Bounce2.h>
#include <Keyboard.h>
Bounce2::Button button = Bounce2::Button();

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
  button.attach( BUTTON_PIN ,  INPUT_PULLUP );
  button.interval(200);
  button.setPressedState(LOW);
  Keyboard.begin(); // Keyboard.begin(KeyboardLayout_es_ES);
}

void loop() {
  static uint32_t chrono;

  button.update();
  if ( button.pressed() ) {
    Serial.println("Encendido");
    Keyboard.press(KEY_F2);
    delay(100);
    Keyboard.releaseAll();
  }

  if (millis() - chrono >= 1000) {
    digitalWrite(LED_BUILTIN, digitalRead(LED_BUILTIN) == HIGH ? LOW : HIGH);
    chrono +=  1000;
  }
}

Después de hacer la prueba con el código de ejemplo veo que el loop efectivamente se detiene, sin embargo la placa arduino esta enchufada, ¿es realmente extraño no?, ¿cuál podría ser la solución?

si quitas el codigo manejando el teclado y solo mantienes el led parpadeante, que pasa? si deja de parpadear también, probablemente significa que las fuentes de alimentación están bajas.

void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  static uint32_t chrono;

  if (millis() - chrono >= 500) {
    digitalWrite(LED_BUILTIN, digitalRead(LED_BUILTIN) == HIGH ? LOW : HIGH);
    chrono +=  500;
  }
}

Pues parece ser que de esa manera sigue funcionando... ¿entonces que puede estar pasando?

Finalmente también deja de funcionar cuándo cargo el programa de solo el led parpadeando, ¿debería entonces de conectarle además un cargador externo?

normalmente no

USB es más que suficiente para el LED interno

¿Entonces alguna solución? ¿que puede estar ocurriendo?

¿Probaste con otro puerto USB de tu PC? o con una fuente de alimentación diferente?
Tu arduino podría estar defectuoso

He probado en otro puerto y nada... Me pasa en mas de una maquina luego el arduino defectuoso no creo que este. No se me ocurre nada...

Cuando ves que el loop se ha detenido ¿si le das al reset vuelve a funcionar?
¿Has probado con un sketch vacio?
Comprueba con el dedo si algunos de los chips está excesivamente caliente, ojo que podrias quemarte el dedo.
imagen

Ya probé otros puertos USB y nada, al Arduino le llega corriente por que la luz esta encendida, pero el loop no se ejecuta. No he podido probar aun el reset, a ver si se vuelve a detener para probarlo.

Tampoco esta sobrecalentado.

Después de varios días probando parece que la otra vez se paró por que el USB no estaba bien conectado por que con el programa de encender y apagar el led el arduino trabaja con normalidad, sin embargo con el programa que uso de contador se para, y hay que reiniciarlo.

si tiene una conexión USB inestable, es posible que la biblioteca del teclado se esté comportando de manera extraña.

¿no podría ser un problema de memoria?