Je construis ces séquenceurs musicaux .
Seulement ce n'est pas exactement un séquenceur, c'est une interface physique pour un séquenceur. Le séquenceur est une application qui s'exécute sur un ordinateur portable auquel le séquenceur se connecte, cette chose permet à l'utilisateur de faire des boucles de batterie à la volée. C'est assez amusant, mais cela nécessite un ordinateur portable car le séquenceur n'est pas «embarqué».
Ce que j'aimerais, c'est faire le séquençage à bord de mon appareil.
Supposons maintenant que je sais comment résoudre la conformité de classe pour la connectivité USB MIDI, et supposons également que je peux comprendre comment câbler un arduino pour envoyer des notes MIDI à partir d'un port DIN à 5 broches. Ce qui m'inquiète le plus, c'est la dérive du tempo dans le temps en raison d'un timing incohérent en nombre de minutes à chaque exécution de la boucle d'événement.
Certaines choses que je sais:
Vous ne devriez pas vous fier
delay()
à contrôler la boucle de tempo. Le retard arrête toutes les opérations du micrologiciel, et cela ne peut pas fonctionner car j'ai besoin d'interroger l'interface utilisateur physique pour les modifications pendant l'exécution de la séquence.Les calculs basés sur
millis()
sont meilleurs car le firmware peut continuer à fonctionner et à agir lorsqu'un certain décompte s'est écoulé.Même si aucun de mes contrôles physiques ne déclenche des routines d'interruption, certaines opérations peuvent retarder l'
loop()
exécution du principal . Si je conçois une fonction qui attend la saisie de l'utilisateur, cela peut évidemment causer un problème de manque de «délai» pour agir si lemillis()
nombre est bien dépassé. Je sais que ce problème est de ma propre conception ...
Des questions:
A. L'arduino basé sur AVR est-il un microcontrôleur approprié pour interroger une interface utilisateur et exécuter une boucle de synchronisation critique pour la mission? Je sais qu'il y a maintenant un Arduino basé sur ARM qui est beaucoup plus rapide. Un Teensy 3.0 serait-il une meilleure alternative? Les deux sont des cartes 3,3 V, c'est donc un autre ensemble de problèmes avec lesquels travailler ... mais je l'ignorerai pour l'instant.
B. Dois-je diviser la tâche en deux microprocesseurs? Un pour gérer l'interrogation et la mise à jour de l'interface utilisateur et un pour la boucle de synchronisation critique pour la mission.
c. Autre chose?
Mon objectif principal est de ne pas avoir à utiliser d'ordinateur du tout. Je veux également calculer le swing, mais dans ce cas, le swing ne veut rien dire si je n'ai pas un tempo verrouillé et précis. Merci pour vos conseils!
noInterrupts();
arrête la gigue, mais arrête également toutes les interruptions souhaitées.