Ich baue diese Musiksequenzer .
Nur ist es nicht gerade ein Sequenzer, es ist eine physische Schnittstelle für einen Sequenzer. Der Sequenzer ist eine Anwendung, die auf einem Laptop ausgeführt wird, mit dem der Sequenzer verbunden ist. Auf diese Weise kann der Benutzer Drum-Loops im laufenden Betrieb erstellen. Es macht ziemlich viel Spaß, erfordert aber einen Laptop, da der Sequenzer nicht an Bord ist.
Am liebsten würde ich die Sequenzierung an Bord meines Geräts durchführen.
Nehmen wir nun an, ich weiß, wie man die Klassenkonformität für USB-MIDI-Konnektivität löst, und nehmen wir an, ich kann herausfinden, wie ein Arduino verkabelt wird, um MIDI-Noten von einem 5-poligen DIN-Port zu senden. Was mich am meisten beunruhigt, ist die zeitliche Verschiebung des Tempos aufgrund des inkonsistenten Timings in Minutenbeträgen über jeden Lauf der Ereignisschleife.
Einige Dinge, die ich weiß:
Sie sollten sich nicht darauf verlassen
delay()
, die Tempo-Schleife zu steuern. Verzögerung stoppt den gesamten Betrieb der Firmware, und das kann nicht funktionieren, da ich die physische Benutzeroberfläche nach Änderungen abfragen muss, während die Sequenz ausgeführt wird.Berechnungen basierend auf
millis()
sind besser, da die Firmware nach Ablauf einer bestimmten Anzahl weiterarbeiten und funktionieren kann.Obwohl keine meiner physischen Steuerungen Interrupt-Routinen auslöst, können einige Vorgänge die
loop()
Ausführung der Hauptsteuerung verzögern . Wenn ich eine Funktion entwerfe, die auf Benutzereingaben wartet, kann dies offensichtlich dazu führen, dass eine "Frist" verpasst wird, wenn diemillis()
Anzahl weit überschritten ist. Ich weiß, dass dieses Problem von mir selbst verursacht wurde ...
Fragen:
A. Ist das AVR-basierte Arduino ein geeigneter Mikrocontroller, um eine Benutzeroberfläche abzufragen und eine geschäftskritische Zeitschleife auszuführen? Ich weiß, dass es jetzt ein ARM-basiertes Arduino gibt, das viel schneller ist. Wäre ein Teensy 3.0 eine bessere Alternative? Beide sind 3,3-V-Karten, das ist also eine weitere Reihe von Problemen, mit denen man arbeiten muss ... aber das werde ich vorerst ignorieren.
B. Soll ich die Aufgabe in zwei Mikroprozessoren aufteilen? Eine für das Abrufen und Aktualisieren der Benutzeroberfläche und eine für die geschäftskritische Zeitschleife.
c. Etwas anderes?
Mein Hauptziel ist es, überhaupt keinen Computer benutzen zu müssen. Ich möchte auch den Swing berechnen, aber in diesem Fall bedeutet Swing nichts, wenn ich kein gesperrtes und zeitgenaues Tempo habe. Danke für deinen Rat!
noInterrupts();
stoppt den Jitter, stoppt aber auch alle gewünschten Interrupts.