Criando controladoras MIDI — parte 2
Nessa segunda parte vamos aprender a usar botões para disparar mensagens MIDI com o Arduino. Se você não viu a parte um veja ela aqui.
O Circuito básico


Ligamos o botão no Arduino na porta 8, colocamos também um resistor entre essa porta e o terra, isso para garantir que quando o botão não esta sendo apertando nos lemos o valor 0, se não colocarmos esse resistor (chamado nesse caso de pull down) vamos ler valores aleatórios, e possivelmente entender erroneamente que o botão tenha sido apertado.
Agora no Arduino vamos colocar o código para ler o botão.
void setup(){
pinMode(8, INPUT); // declaramos o pino 8 como entrada
pinMode(13, OUTPUT); // o pino 13, ligado ao led é saida}void loop() {
bool apertado = digitalRead(8); // lemos o valor do botão
if(apertado){
digitalWrite(13, HIGH); // por enquanto vamos só colocar esse valor no led. Voce deve ver o led piscando quando aperta o botão.
}else {
digitalWrite(13, LOW);
}}
Mandando MIDI
Agora que ja lemos o valor do nosso botão, vamos mandar de fato uma mensagem MIDI quando o botão for apertado. Esse pedaço continua o que vimos na parte 1.
Uma ideia para fazer isso é simplesmente mandar a mensagem se o botão esta apertado, mas desse jeito, como o Arduino é muito rápido, quando apertarmos o botão ele vai mandar muitas mensagens para o computador. Então a gente quer mandar só quando o botão trocar de solto para apertado.
bool estadoAnterior = false; // vamos lembrar qual era a posição do botão antesvoid setup(){
Serial.begin(112500); // inicia o serial
pinMode(8, INPUT); // declaramos o pino 8 como entrada
pinMode(13, OUTPUT); // o pino 13, ligado ao led é saida
}void loop() {
bool apertado = digitalRead(8); // lemos o valor do botão
if(apertado != estadoAnterior){ // se a pos do
if(apertado) mandaNoteOn(36, 127);
else mandaNoteOn(36, 0);
estadoAnterior = apertado;
}
}void mandaNoteOn(byte nota, byte velocidade){
Serial.write(144);
Serial.write(nota);
Serial.write(velocidade);
}