Eu construo esses seqüenciadores de música .
Só que não é exatamente um sequenciador, é uma interface física para um sequenciador. O sequenciador é um aplicativo que roda em um laptop ao qual o sequenciador se conecta, permitindo que o usuário faça loops de bateria em tempo real. É bem divertido, mas requer um laptop porque o seqüenciador não está 'on-board'.
O que eu adoraria é fazer o seqüenciamento a bordo do meu dispositivo.
Agora, vamos supor que eu sei como resolver a conformidade de classe para a conectividade USB MIDI, e também vamos supor que eu possa descobrir como conectar um arduino para enviar notas MIDI a partir de uma porta DIN de 5 pinos. O que mais me preocupa é o desvio do tempo ao longo do tempo devido ao tempo inconsistente em quantidades mínimas em cada execução do loop de eventos.
Algumas coisas que eu sei:
Você não deve confiar
delay()
para controlar o loop de tempo. O atraso interrompe toda a operação do firmware, e isso não pode funcionar, porque eu preciso pesquisar na interface do usuário física se há alterações enquanto a sequência está em execução.Os cálculos baseados em
millis()
são melhores porque o firmware pode continuar a operar e agir quando uma certa contagem tiver decorrido.Embora nenhum dos meus controles físicos esteja acionando rotinas de interrupção, algumas operações podem atrasar a
loop()
execução do principal . Se eu projetar uma função que aguarda a entrada do usuário, isso obviamente pode causar o problema de perder um "prazo" para agir se amillis()
contagem terminar. Eu sei que esse problema é do meu próprio projeto ...
Questões:
A. O arduino baseado no AVR é um microcontrolador apropriado para pesquisar uma interface do usuário e executar um loop de tempo de missão crítica? Eu sei que há um Arduino baseado em ARM agora muito mais rápido. Um Teensy 3.0 seria uma alternativa melhor? Ambas são placas de 3,3V, então esse é outro conjunto de questões para trabalhar ... mas vou ignorar isso por enquanto.
B. Devo dividir a tarefa em dois microprocessadores? Um para lidar com pesquisas e atualização da interface do usuário e outro para o loop de temporização de missão crítica.
c. Algo mais?
Meu principal objetivo é não precisar usar um computador. Também quero calcular o balanço, mas, nesse caso, o balanço não significa nada se eu não tiver um tempo preciso e bloqueado. Obrigada pelo Conselho!
noInterrupts();
interrompe a instabilidade, mas também interrompe todas as interrupções desejadas.