visual basic y arduino

hola estoy comunicándome realizando un programa en visual basic en el cual la pantalla tiene dos botones, el primero es para prender un led durante 30 segundos y el segundo es para apagar ese led durante este activado ese led, he pensado en dos formas de realizarlo en la cual me encontrado con dos problemas en las cual espero que me puedan ayudar la primera solución es que se pueda activar algún tipo de interrupción la cual no se cual podría ser, la segunda es saber cuanto tiempo dura cada instrucción y realizar un bucle donde cuente hasta llegar a los 30 segundos, pero el problema como saber cuanto se demora cada instrucción espero que me puedan ayudar y muchas gracias de antemano

No me he enterado de nada.

soy bastante malo para explicarme :stuck_out_tongue: te explico mejor creo .... estoy realizando un proyecto con comunicación de arduino y visual basic, en el cual en el entorno visual basic realice dos botones uno de apagar y otro de encender, arduino es la parte física en el cual una salida se activa o desactiva dependiendo el dato que le entregue visual basic, cuando se presione el botón de encendido se activa la salida de arduino en este caso un diodo led por un tiempo de 30 segundos, para lo cual he pensado en un delay o un retardo, he encontrado quizás dos posibles soluciones:

  1. Se podría generar una interrupción al enviar un dato desde visual basic para poder apagar la salida en cualquier momento.
  2. Sabiendo el tiempo que se demora cada instrucción se podría generar un bucle o lazo cerrado en donde cuente hasta llegar al tiempo pero no se como saber el tiempo exacto que se demora cada instrucción.

PD: espero que se me entienda, si no lo intentare explicar nuevamente y muchas gracias por responder.

Hola,
Para controlar los 30 segundos de encendido y 30s de apagado (eso he entendido) puedes usar millis()

int tiempo_encendido, tiempo_apagado;

void setup()
{
    tiempo_encendido = millis();
    tiempo_apagado   = millis();
}

Luego en el loop() controlas los tiempos:

if( millis() - tiempo_encendido < 30000L)
   ;  // todavía no han pasado los 30s
if(millis() - tiempo_encendido > 30000L) // han pasado 30s
{
   apagar_led();
   tiempo_encendido = millis(); // se vuelve a empezar la cuenta
}