Arduino HID

Iniciado por abigliazzi, 18 Abril 2018, 22:34 PM

0 Miembros y 2 Visitantes están viendo este tema.

abigliazzi

Hola, configure mi arduino Mega 2560 para que funcionara como un puerto HID para utilizarlo como macro de teclado, hice algunas pruebas de codigo como

Citar

#include "Keyboard.h"
#include "HID.h"

void setup() {

  Keyboard.begin();
}


void loop() {
delay (1000);
  Keyboard.write(65);


}



Funciono, cada 1 segundo me escribía la letra "A"..

Hasta acá todo bien, ahora lo que quiero hacer es que cuando apriete un botón en cualquier pin de la placa que arranque el loop ej, Key_F1 (cada 1 segundo) Key_F2(cada 20 segundos) Key_F3(cada 5 segundos) es decir, en 1 minuto se pulso 60 veces "F1" 3 veces "F2" y 12 veces "F3" sin detenerse

y finalmente que cuando vuelva a apretar el botón se detenga la cadena... me explico ?

estoy medio trabado con el codigo, me tira errores cuando quiero agregar mas de 1 tecla y también me tira error cuando pongo el pinmode.

Me ayudaría mucho que me pongan un ejemplo de varias teclas distintas con Keyboard.write y delay , ya que 1 sola pude hacerlo andar pero los errores comienzan cuando pongo mas de 1..

espero su  ayuda

Desde ya muchas gracias !

engel lex

en este caso no deberías usar delay sino contar el tiempo y llevar el tiempo de cada cosa para saber cuantos segundos han pasado
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

abigliazzi

Claro, pero es por tiempo indefinido, quiero finalizar el loop cuando vuelva a presionar el interruptor, porque lo que necesito es el F1 se presione cada 1 segundo y que el F2 cada 20 por ejemplo

engel lex

explica en detalle los errores de los pines...

para tener el tiempo esta funcion te sirve
https://www.arduino.cc/reference/en/language/functions/time/millis/
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

abigliazzi



#include "Keyboard.h"
#include "HID.h"

void setup() {

  Keyboard.begin();
}


void loop() {

currentMillis = millis();
    while (millis() - currentMillis < 1000) {

  Keyboard.write(Key_F1);


}




Algo así seria ? disculpa si estoy poniendo alguna burrada soy medio nuevo en arduino  :-X

engel lex

CitarAlgo así seria ? disculpa si estoy poniendo alguna burrada soy medio nuevo en arduino  :-X

piensa en la algoritmia...


unsigned long time_F1;
unsigned long time_F2;


void setup() {
 time_F1 = 0;
 time_F2 = 0;

}


void loop() {

 if(boton_presionado()){
   time_F1 = millis() + 5000; // tiempo + 5 segundos
   time_F2 = millis() + 20000; // tiempo + 20 segundos
 }

 if(time_F1 && time_F1 < millis()){ // si time_F1 no es 0 y el tiempo ya pasó
   time_F1 = 0; //lo volvemos a 0 para "apagarlo"
   
   //aquí tu proceso

 }

 if(time_F2 && time_F2 < millis()){ // si time_F2 no es 0 y el tiempo ya pasó
   time_F2 = 0; //lo volvemos a 0 para "apagarlo"
   
   //aquí tu proceso

 }

}


si no eres flojo como yo XD y usas array, puedes de una sola pasada activar y desactivar secuencias :P
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

MAFUS

No he trabajado mucho en Arduino, así que voy a dar unas ideas generales.

Crea una variable tipo bool para saber si debe correr el temporizador.
Crea una variable tipo entero para saber qué pin ha sido el último en activarse.
Crea una variable tipo unsigned que marque el tiempo de marca del temporizador.

Cuando actives un pin:
  Cambias la mara de tiempo a la referente a ese pin
  Observa si el temporizador estaba en marcha
     Si lo estaba y el pin es igual al ultimo pin
        Detienes el temporizador
     Si estaba parado
        Pones en marcha el temporizador

Si el temporizador está en marcha
   Si el tiempo ha llegado a la marca
     Envías el carácter por el teclado virtual
     Reinicia el temporizador a 0