Construyo estos secuenciadores musicales .
Sólo que no es exactamente un secuenciador, sino una interfaz física para un secuenciador. El secuenciador es una aplicación que se ejecuta en un ordenador portátil al que se conecta el secuenciador, esta cosa permite al usuario hacer loops de batería sobre la marcha. Es bastante divertido, pero requiere un portátil porque el secuenciador no está 'a bordo'.
Lo que me gustaría es hacer la secuenciación a bordo de mi dispositivo.
Ahora vamos a suponer que sé cómo resolver el cumplimiento de la clase para la conectividad MIDI USB, y también vamos a suponer que puedo averiguar cómo cablear un arduino para enviar notas MIDI desde un puerto DIN de 5 pines. Lo que más me preocupa es la deriva del tempo en el tiempo debido a la inconsistencia de la sincronización en cantidades diminutas en cada ejecución del bucle de eventos.
Algunas cosas que sé:
-
No debe confiar en
delay()
para controlar el bucle de tempo. El retardo detiene todo el funcionamiento del firmware, y eso no puede funcionar porque necesito sondear la interfaz de usuario física para los cambios mientras la secuencia se está ejecutando. -
Cálculos basados en
millis()
son mejores porque el firmware puede seguir operando y actuando cuando ha transcurrido un determinado recuento. -
Aunque ninguno de mis controles físicos está desencadenando rutinas de interrupción, algunas operaciones pueden retrasar el
loop()
de correr. Si diseño una función que espera la entrada del usuario, eso puede causar obviamente un problema de pérdida de un "plazo" para actuar si elmillis()
el recuento está muy por encima. Sé que este problema es de mi propio diseño...
Preguntas:
A. ¿Es el arduino basado en AVR un microcontrolador apropiado para sondear una interfaz de usuario y ejecutar un bucle de sincronización de misión crítica? Sé que ahora hay un Arduino basado en ARM que es mucho más rápido. ¿Sería un Teensy 3.0 una mejor alternativa? Ambos son placas de 3,3V, así que eso es otro conjunto de problemas con los que trabajar... pero lo ignoraré por ahora.
B. ¿Debo dividir la tarea en dos microprocesadores? Uno para manejar el sondeo y la actualización de la interfaz de usuario y otro para el bucle de sincronización de misión crítica.
c. ¿Algo más?
Mi principal objetivo es no tener que utilizar el ordenador para nada. También quiero calcular para el swing, pero en este caso, el swing no significa nada si no tengo un tempo cerrado y preciso. ¡Gracias por tus consejos!