Buduję te sekwencery muzyczne .
Tyle że to nie jest dokładnie sekwencer, to fizyczny interfejs dla sekwencera. Sekwencer to aplikacja działająca na laptopie, z którym łączy się sekwencer, ta funkcja pozwala użytkownikowi tworzyć pętle perkusyjne w locie. To całkiem zabawne, ale wymaga laptopa, ponieważ sekwencer nie jest „wbudowany”.
Chciałbym zrobić sekwencjonowanie na moim urządzeniu.
Załóżmy teraz, że wiem, jak rozwiązać problem z klasą zgodności dla połączenia USB MIDI, i załóżmy, że mogę wymyślić, jak podłączyć arduino, aby wysyłać notatki MIDI z 5-pinowego portu DIN. Najbardziej niepokoi mnie dryf tempa w czasie z powodu niespójnego timingu w minutach w każdym przebiegu pętli zdarzeń.
Niektóre rzeczy, które znam:
Nie powinieneś polegać na
delay()
kontrolowaniu pętli tempa. Opóźnienie zatrzymuje wszystkie operacje oprogramowania układowego, a to nie może działać, ponieważ muszę sondować fizyczny interfejs użytkownika pod kątem zmian, gdy sekwencja jest uruchomiona.Obliczenia oparte na
millis()
są lepsze, ponieważ oprogramowanie układowe może nadal działać i działać po upływie określonego czasu.Mimo że żadna z moich fizycznych kontroli nie wyzwala procedur przerwania, niektóre operacje mogą opóźnić uruchomienie głównego
loop()
. Jeśli zaprojektuję funkcję, która czeka na dane wejściowe użytkownika, może to oczywiście powodować problem z brakiem „terminu” działania, jeślimillis()
liczenie się skończy. Wiem, że ten problem jest moim własnym projektem ...
Pytania:
A. Czy arduino oparte na AVR jest odpowiednim mikrokontrolerem do odpytywania interfejsu użytkownika i uruchomienia pętli czasowej o znaczeniu krytycznym? Wiem, że Arduino oparte na ARM jest teraz znacznie szybsze. Czy Teensy 3.0 byłby lepszą alternatywą? Oba są płytkami 3,3 V, więc jest to kolejny zestaw problemów do pracy ... ale na razie to zignoruję.
B. Czy powinienem podzielić zadanie na dwa mikroprocesory? Jeden do obsługi odpytywania i aktualizacji interfejsu użytkownika, drugi do krytycznej pętli pomiaru czasu.
do. Coś innego?
Moim głównym celem jest wcale nie używanie komputera. Chcę też obliczyć dla swinga, ale w tym przypadku swing nie znaczy nic, jeśli nie mam zablokowanego i dokładnego tempa. Dzięki za radę!
noInterrupts();
zatrzymuje drgania, ale także zatrzymuje wszystkie poszukiwane przerwania.