Test Foro de elhacker.net SMF 2.1

Programación => Programación C/C++ => Mensaje iniciado por: abigliazzi en 18 Abril 2018, 22:34 PM

Título: Arduino HID
Publicado por: abigliazzi en 18 Abril 2018, 22:34 PM
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 !
Título: Re: Arduino HID
Publicado por: engel lex en 18 Abril 2018, 22:46 PM
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
Título: Re: Arduino HID
Publicado por: abigliazzi en 18 Abril 2018, 22:49 PM
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
Título: Re: Arduino HID
Publicado por: engel lex en 18 Abril 2018, 22:54 PM
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/
Título: Re: Arduino HID
Publicado por: abigliazzi en 18 Abril 2018, 23:11 PM


#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
Título: Re: Arduino HID
Publicado por: engel lex en 18 Abril 2018, 23:21 PM
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
Título: Re: Arduino HID
Publicado por: MAFUS en 18 Abril 2018, 23:27 PM
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