Programa Arduíno para controlar um ultrassom e enviar notas midi - pronto e bom
// Definindo os pinos Echo (recepção do ultrassom) e Trigger (gatilho, disparo do ultrassom)
#define echoPin 13 //Pino 13 recebe o pulso do echo
#define trigPin 12 //Pino 12 envia o pulso para gerar o echo
// Liga e desliga as notas midi
const byte noteOffCommand = 0;
const byte noteOnCommand = 1;
// Tempo de duração das notas (em milissegundos)
int tempodasnotas = 160;
// Tempo de intervalo entre as notas (em milissegundos)
int tempoentrenotas = 30;
// Tempo de espera se a distância for maior que 50cm (em milissegundos)
int tempodeespera = 30;
// Notas midi
int nota1 = 36; // Nota C (Dó)
int nota2 = 38; // Nota D (Ré)
int nota3 = 40; // Nota E (Mi)
int nota4 = 41; // Nota F (Fá)
int nota5 = 43; // Nota G (Sol)
int nota6 = 45; // Nota A (Lá)
int nota7 = 47; // Nota B (Si)
int nota8 = 48; // Nota C (Dó)
int nota9 = 50; // Nota D (Ré)
int nota10 = 52; // Nota E (Mi)
//fim das notas midi
byte channel = 0; // Channel 1 (0-15 selects channel 1-16)
//byte pitchByte = 69; // A4 = Middle A = 440 Hz (Piano keyboard runs from 21/A0 to 108/C8)
//byte velocityByte = 127; // Medium Velocity/Volume (value from 0 to 127)
// Configuração do Setup
void setup()
{
Serial.begin(115200); //inicia a porta serial (115200 para o HairLess, pode ser modificada no Hairless)
pinMode(echoPin, INPUT); // define o pino 13 como entrada (recebe)
pinMode(trigPin, OUTPUT); // define o pino 12 como saida (envia)
}
// Inicia o loop de verificações de distâncias e emissão de notas midi
void loop()
{
//seta o pino 12 com um pulso baixo "LOW" ou desligado ou ainda 0
digitalWrite(trigPin, LOW);
// delay de 2 microssegundos
delayMicroseconds(2);
//seta o pino 12 com pulso alto "HIGH" ou ligado ou ainda 1
digitalWrite(trigPin, HIGH);
//delay de 10 microssegundos
delayMicroseconds(10);
//seta o pino 12 com pulso baixo novamente
digitalWrite(trigPin, LOW);
//pulseInt lê o tempo entre a chamada e o pino entrar em high
long duration = pulseIn(echoPin,HIGH);
//Esse calculo é baseado em s = v . t, lembrando que o tempo vem dobrado
//porque é o tempo de ida e volta do ultrassom
long distancia = duration /29 / 2 ;
if (distancia > 50){ // distância máxima de captação limitada em 50cm
delay(tempodeespera); // Tempo de espera para checar a distância até o ultrassom novamente
}
else if (distancia <= 5){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(nota1));
Serial.write(byte(127));
delay(tempodasnotas); // Duração da nota
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(nota1));
Serial.write(byte(0));
delay(tempoentrenotas); // intervalo entre notas
}
else if ((distancia > 5) && (distancia <= 10)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(nota2));
Serial.write(byte(127));
delay(tempodasnotas); // Duração da nota
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(nota2));
Serial.write(byte(0));
delay(tempoentrenotas); // intervalo entre notas
}
else if ((distancia > 10) && (distancia <= 15)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(nota3));
Serial.write(byte(127));
delay(tempodasnotas); // Duração da nota
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(nota3));
Serial.write(byte(0));
delay(tempoentrenotas); // intervalo entre notas
}
else if ((distancia > 15) && (distancia <= 20)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(nota4));
Serial.write(byte(127));
delay(tempodasnotas); // Duração da nota
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(nota4));
Serial.write(byte(0));
delay(tempoentrenotas); // intervalo entre notas
}
else if ((distancia > 20) && (distancia <= 25)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(nota5));
Serial.write(byte(127));
delay(tempodasnotas); // Duração da nota
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(nota5));
Serial.write(byte(0));
delay(tempoentrenotas); // intervalo entre notas
}
else if ((distancia > 25) && (distancia < 30)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(nota6));
Serial.write(byte(127));
delay(tempodasnotas); // Duração da nota
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(nota6));
Serial.write(byte(0));
delay(tempoentrenotas); // intervalo entre notas
}
else if ((distancia > 30) && (distancia <= 35)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(nota7));
Serial.write(byte(127));
delay(tempodasnotas); // Duração da nota
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(nota7));
Serial.write(byte(0));
delay(tempoentrenotas); // intervalo entre notas
}
else if ((distancia > 35) && (distancia <= 40)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(nota8));
Serial.write(byte(127));
delay(tempodasnotas); // Duração da nota
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(nota8));
Serial.write(byte(0));
delay(tempoentrenotas); // intervalo entre notas
}
else if ((distancia > 40) && (distancia <= 45)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(nota9));
Serial.write(byte(127));
delay(tempodasnotas); // Duração da nota
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(nota9));
Serial.write(byte(0));
delay(tempoentrenotas); // intervalo entre notas
}
else if ((distancia > 45) && (distancia <= 50)){
Serial.write(0x80 + (noteOnCommand << 4) + (byte(channel)));
Serial.write(byte(nota10));
Serial.write(byte(127));
delay(tempodasnotas); // Duração da nota
Serial.write(0x80 + (noteOffCommand << 4) + (byte(channel)));
Serial.write(byte(nota10));
Serial.write(byte(0));
delay(tempoentrenotas); // intervalo entre notas
}
//final do programa
}
Lucas T R Freitas
Ave Maria, cheia de graça, o Senhor é convosco, bendita sois vós entre as mulheres e bendito é o fruto do vosso ventre, Jesus. Santa Maria, Mãe de Deus, rogai por nós pecadores, agora e na hora da nossa morte. Amém.
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário