// Projeto: Piano acionado por chave táctil com LED
// Autor: André Luis Silveira
// Data: 05/11/2021
// --------- Música Harry Potter ----- //
int musica[] = {
0,494,659,831,740,659,988,880,740,659,831,740,622,698,494,
0,494,659,831,740,659,988,1175,1109,1047,831,1047,988,932,466,831,659,
0,831,988,831,988,831,1047,988,932,740,831,932,988,466,494,988,0,
0,831,988,831,988,831,1175,1109,1047,831,1047,932,988,466,831,659
};
int duracao[] = {
600,300,450,150,300,600,300,900,900,450,150,300,600,300,900,
600,300,450,150,300,600,300,600,300,600,300,450,150,300,600,
300,900,600,300,600,300,600,300,600,300,600,300,450,150,300,
600,300,600,300,600,300,600,300,600,300,600,300,600,300,450,
150,300,600,300,900
};
int elementos = sizeof(musica)/sizeof(int); // Número de notas da música
// --------- Define notas musicais ----- //
#define DO 262
#define RE 294
#define MI 330
#define FA 349
#define SOL 392
#define LA 440
#define SI 494
#define DO_2 523
// ----- Carrega matriz com ordem da escala de notas do teclado ----- //
int melodia[] = {DO,RE,MI,FA,SOL,LA,SI,DO_2};
int teclas = sizeof(melodia)/sizeof(int); // Número de teclas do piano (melodia)
// ----- Carrega matrizes com relação de pinos usados no arduino (botões e Leds) ----- //
int botao[] = {12,11,10,9,8,7,6,5};
int led[] = {A0,A1,A2,A3,A4,A5,3,2};
int buzzer = 13; // Pino do alto-falante
int botao_toca = 4; // Pino do botão que dispara musica
void setup() {
Serial.begin(9600);
pinMode(buzzer,OUTPUT); // Configura pino buzzer como saída
pinMode(botao_toca,INPUT_PULLUP); // Configura botão toca música como entrada
// ---- Inicializa Botões ----- //
for(int i=0;i<teclas;i++){
pinMode(botao[i],INPUT_PULLUP); // Configura botões do teclado como entradas
}
// ---- Inicializa leds ----- //
for(int i=0;i<teclas;i++){
pinMode(led[i],OUTPUT); // Configura leds como saídas
}
}
void loop() {
// ---- Verifica tecla apertada para disparar Música Harry Potter ---- //
if (digitalRead(botao_toca) == LOW) { // Botão toca música foi acionado?
playSom();
}
// ---- Verifica tecla apertada no piano ---- //
for(int i=0;i<teclas;i++) {
if (digitalRead(botao[i]) == LOW) { // Botões do teclado foram acionados?
digitalWrite(led[i],HIGH);
tone(buzzer,melodia[i],100);
i=99;
}
digitalWrite(led[i],LOW);
}
delay(10);
}
// ---- Toca Música Harry Potter ---- //
void playSom() {
for(int i=0;i<elementos;i++){
tone(buzzer,musica[i],duracao[i]);
EstadoLed (i,1);
delay(duracao[i]);
EstadoLed (i,0);
}
}
// ---- Liga ou desliga Led segundo a melodia da Música Harry Potter ---- //
void EstadoLed (int n, int estado) {
// ---- n = nota tocada
// ---- estado = 0 (desliga) ou 1 (Liga) led
int nota = map(musica[n],0,1175,DO,DO_2); // --- Reduz intervalo de notas para escala do teclado
for(int i=0;i<=teclas;i++){
if (nota<=melodia[i]){
digitalWrite(led[i],estado);
i = 99;
}
}
} |