/*
Tirando um som no Arduino Nano, com Dante Meira
*/
unsigned long tempo1 = 0;
unsigned long tempo2 = 0;
unsigned long long microssegundos1 = 0;
unsigned long long microssegundos2 = 0;
unsigned long long microssegundos3 = 0;
unsigned long long microssegundos4 = 0;
// frequências das notas musicais
// fonte: https://www.if.ufrgs.br/cref/ntef/som/oitavas.html
const double Do4 = 261.63;
const double Re4 = 293.66;
const double Mi4 = 329.63;
const double Fa4 = 349.23;
const double Sol4 = 391.99;
const double La4 = 440.00;
const double Si4 = 485.80;
const double Do5 = 523.25;
const double Re5 = 587.33;
const double Mi5 = 659.26;
const double Fa5 = 698.46;
const double Sol5 = 783.99;
const double La5 = 880.00;
const double Si5 = 971.60;
const double Do6 = 1046.5;
const double Re6 = 1174.7;
const double Mi6 = 1318.5;
const double Fa6 = 1396.9;
const double Sol6 = 1568.0;
const double La6 = 1760.0;
const double Si6 = 1943.2;
const double Do7 = 2093.0;
const double Re7 = 2349.3;
const double Mi7 = 2637.0;
const double Fa7 = 2793.8;
const double Sol7 = 3136.0;
const double La7 = 3520.0;
const double Si7 = 3886.4;
double hertz = 1;
double aux = 1;
unsigned long intervaloAF2 = 1;
unsigned long intervaloAF3 = 1;
boolean boolAF2 = false;
boolean boolAF3 = false;
#define AF2 2 // AF2 = autofalante conectado ao pino 2
#define AF3 3 // AF3 = autofalante conectado ao pino 3
#define VERMELHO 12
#define VERDE 11
#define AZUL 10
#define AMARELO 9
void setup() {
pinMode(AF2, OUTPUT);
pinMode(AF3, OUTPUT);
pinMode(VERMELHO, OUTPUT);
pinMode(VERDE, OUTPUT);
pinMode(AZUL, OUTPUT);
pinMode(AMARELO, OUTPUT);
}
void TocaNotas(double notaAF2, double notaAF3){
if(notaAF2 == Do5){
digitalWrite(VERMELHO, HIGH);
digitalWrite(VERDE, LOW);
digitalWrite(AZUL, LOW);
digitalWrite(AMARELO, LOW);
}
if(notaAF2 == Re5){
digitalWrite(VERMELHO, LOW);
digitalWrite(VERDE, HIGH);
digitalWrite(AZUL, LOW);
digitalWrite(AMARELO, LOW);
}
if(notaAF2 == Mi5){
digitalWrite(VERMELHO, LOW);
digitalWrite(VERDE, LOW);
digitalWrite(AZUL, HIGH);
digitalWrite(AMARELO, LOW);
}
if(notaAF2 == Fa5){
digitalWrite(VERMELHO, LOW);
digitalWrite(VERDE, LOW);
digitalWrite(AZUL, LOW);
digitalWrite(AMARELO, HIGH);
}
tempo2 = millis();
microssegundos1 = micros();
microssegundos2 = micros();
microssegundos3 = micros();
microssegundos4 = micros();
hertz = notaAF2;
aux = (1000000/hertz) ;
intervaloAF2 = round(aux);
hertz = notaAF3;
aux = (1000000/hertz) ;
intervaloAF3 = round(aux);
while(tempo1 < (tempo2 + 90)){
if( microssegundos2 < microssegundos1 + intervaloAF2){
microssegundos2 = micros();
}else{
microssegundos1 = micros();
if(boolAF2 == false){
boolAF2 = true;
digitalWrite(AF2, HIGH);
}else{
boolAF2 = false;
digitalWrite(AF2, LOW);
}
}
if( microssegundos4 < microssegundos3 + intervaloAF3){
microssegundos4 = micros();
}else{
microssegundos3 = micros();
if(boolAF3 == false){
boolAF3 = true;
digitalWrite(AF3, HIGH);
}else{
boolAF3 = false;
digitalWrite(AF3, LOW);
}
}
tempo1 = millis();
asm volatile ("nop \n\t");
}
}
void loop() {
delay(850);
TocaNotas(Si6, Si6),
delay(80);
TocaNotas(Si6, Si6),
delay(80);
TocaNotas(Si6, Si6),
delay(80);
TocaNotas(Si6, Si6),
delay(80);
TocaNotas(Re6, Re6),
delay(80);
TocaNotas(Sol6, Sol6),
delay(80);
TocaNotas(Si6, Si6),
delay(80);
TocaNotas(Re6, Re6),
delay(80);
TocaNotas(Sol6, Sol6),
delay(80);
TocaNotas(Si6, Si6),
delay(240);
TocaNotas(Re6, Re6),
delay(80);
TocaNotas(Sol6, Sol6),
delay(80);
TocaNotas(Si6, Si6),
delay(80);
TocaNotas(Re6, Re6),
delay(80);
TocaNotas(Sol6, Sol6),
delay(80);
TocaNotas(La6, La6),
delay(80);
delay(140);
TocaNotas(Re6, Re6),
delay(80);
TocaNotas(Sol6, Sol6),
delay(80);
TocaNotas(La6, La6),
delay(80);
TocaNotas(Re6, Re6),
delay(80);
TocaNotas(Sol6, Sol6),
delay(80);
TocaNotas(La6, La6),
delay(80);
delay(140);
TocaNotas(Re6, Re6),
delay(80);
TocaNotas(Sol6, Sol6),
delay(80);
TocaNotas(La6, La6),
delay(80);
TocaNotas(Re6, Re6),
delay(80);
TocaNotas(Sol6, Sol6),
delay(80);
TocaNotas(Si6, Si6),
delay(80);
delay(140);
TocaNotas(Re6, Re6),
delay(80);
TocaNotas(Sol6, Sol6),
delay(80);
TocaNotas(Si6, Si6),
delay(90);
TocaNotas(Si6, Si6),
delay(80);
TocaNotas(Si6, Si6),
delay(80);
TocaNotas(Si6, Si6),
delay(80);
TocaNotas(Si6, Si6),
delay(80);
TocaNotas(La6, La6),
delay(80);
TocaNotas(La6, La6);
}