Interrupción para una rutina de tareas en serie

Hola! Muy buen día para todos.

Hoy vengo con una duda de un programa usando un buzzer, un motor DC y un servo, cada uno debe ejecutarse en serie y por un tiempo determinado que se le puede ir modificando. Estoy usando el Arduino UNO.

Por ejemplo:
1. Buzzer sonar 3 segundos
2. Buzzer se para
3. Motor DC gira 1 segundo
4. Motor DC para
5. Servomotor gira 45° grados

Cada paso debe ejecutarse de manera consecutiva. Pensaba si una interrupción me sirviría una para el buzzer y otra para el motor, donde si se detecta el flaco de bajada, inmediatamente se active el siguiente paso.


attachInterrupt(digitalPinToInterrupt(2), Buzzer, FALLING); //Conversión de interrupción 0 del microcontrolador Atmega328P a pin 2 en Arduino UNO
donde la función Buzzer lo único que hará es prender y apargar el buzz usando la función: tone(buzzer, Hz) y noTone(buzzer).

Agradezco sus comentarios!
 
Soy un poco repetitivo con esto (y no quiero resultar molesto), pero para cosas que requieren acciones secuenciales, lo mejor es usar máquinas de estados.

Deberías tener algo así como esto:

- Estado Reposo: en espera de que se active el Buzzer.
- Estado Buzzer ON: en espera de 3 segundos, esperando por ej. un flag en la interrupción del timer. Al finalizar, se pasa al estado Buzzer OFF.
- Estado Buzzer OFF: se apaga el buzzer pasado 3 seg. y se activa el Motor DC. Al finalizar, se pasa al estado Motor DC ON.
- Estado Motor DC ON: en espera de 1 segundo, esperando por ej. un flag en la interrupción del timer. Al finalizar, se pasa al estado Motor DC OFF.
- Estado Motor DC OFF: en espera de 1 segundo, esperando por ej. un flag en la interrupción del timer. Al finalizar, se pasa al estado Servomotor.
- Estado Servomotor: se gira el servomotor 45º. Una vez finalizado, se pasa al estado Reposo.

Toda esa secuencia la podés hacer con un único timer.
 
Soy un poco repetitivo con esto (y no quiero resultar molesto), pero para cosas que requieren acciones secuenciales, lo mejor es usar máquinas de estados.

Deberías tener algo así como esto:

- Estado Reposo: en espera de que se active el Buzzer.
- Estado Buzzer ON: en espera de 3 segundos, esperando por ej. un flag en la interrupción del timer. Al finalizar, se pasa al estado Buzzer OFF.
- Estado Buzzer OFF: se apaga el buzzer pasado 3 seg. y se activa el Motor DC. Al finalizar, se pasa al estado Motor DC ON.
- Estado Motor DC ON: en espera de 1 segundo, esperando por ej. un flag en la interrupción del timer. Al finalizar, se pasa al estado Motor DC OFF.
- Estado Motor DC OFF: en espera de 1 segundo, esperando por ej. un flag en la interrupción del timer. Al finalizar, se pasa al estado Servomotor.
- Estado Servomotor: se gira el servomotor 45º. Una vez finalizado, se pasa al estado Reposo.

Toda esa secuencia la podés hacer con un único timer.
Perfecto, gracias por las ideas, sobretodo se saber qué son las máquinas de estado.
Suena repetitivo pues es básicamente hacer lo mismo en los tres casos. Algo que se me pasó comentar es que pasa el servo a 45°se reinicia el programa.

Te agradezco
 
Atrás
Arriba