Código
USA_ANTHEM_Updated.ino Arduino
O Star Spangled Banner com LEDs, carga, tom, todas as funções. Basta copiar e colar. / * Star Spangled Banner with LEDsCreated by Ryan Aebi Junho de 2018Estrutura de código - Loop básico para fazer referência a outras funções - Botões de pressão fazem Star Spangled Banner ou carrega sons com lightsStar Spangled Banner Notas - Função tem nota atribuída por número inteiro para frequência (Hz) e duração (tempo em n) -LED é escolhido por mim de forma semi-aleatória ao escrever a função -A função é construída para aumentar a afinação a cada execução (redefine a afinação normal na inicialização / redefinição de hardware) -Pitch calculado é 1/12 de um todo ou 0,06 Design de botão / fiação - 3 conjuntos de LEDs de vermelho, azul e verde em cada canal, incluindo 2 de cada em paralelo. - Botão de reinicialização externo - botão iniciar para interromper música para carregar * /// ************************************************ *************** Inteiros declarados const int ChargeButton =3; // (Nano D3) uno pino 2 deve ser um pino de interrupção const int StartButton =5; // (Nano D5) uno pino 4 const int BuzzerPin =9; // (Nano D9) uno pino 9 const int RedLED =6; // (Nano D6) uno pino 6 const int WhiteLED =7; // (Nano D7) uno pino 7 const int BlueLED =8; // (Nano D8) uno pino 8 int n =1000; // declarando o inteiro, este valor mudará com cada música int DurationOn =n; // declamar o inteiro para mais tarde será usado nos cálculos do stacatto int DurationRest =n; // declamar o inteiro para mais tarde será usado em cálculos stacatto // soma de x e y deve ser 1 Tenho mais notas sobre isso mais tarde em float x =.66; // declarando float para tempo em float y =.34; // declarando float para tempo desligado // taxa na qual as luzes piscam aleatoriamente enquanto espera o botão input int Twinkle_Rate =250; // observe que, se aumentados drasticamente, os botões podem não responder 100% do tempo // menor taxa de cintilação melhora a resposta ao pressionar o botão // define números inteiros para os estados do botão int StartButtonState; int ChargeButtonState; // observe que o dó central é 4C (B bemol e mi bemol) int Note1 =233; // 3Bb 233Hz int Note2 =294; // 4D 294Hz int Note3 =330; // 4E 330Hz int Note4 =349; // 4F 349Hz int Note5 =392; // 4G 392Hz int Note6 =440; // 4A 440Hz int Note7 =466; // 4Bb 466Hz int Note8 =523; // 5C 523Hz int Note9 =587; // 5D 587Hz int Note10 =622; // 5Eb 622Hz int Note11 =698; // 5F 698Hz // ******************************************** ****************** Função de carga / Carga Songvoid () {n =600; // taxa em que a música progride // Formato:escrever pino (s) ligado (s), tom em frequência específica (dessa forma não está sujeito a // mudanças no final do Hino Nacional, mais sobre isso mais tarde), retardo para o mesmo tempo que tom para sincronizar música, // escreve o (s) pino (s) que estava (m) ligado (s) e atrasa para uma pausa digitalWrite (RedLED, HIGH); tom (BuzzerPin, 392, n / 3); atraso (n / 3); digitalWrite (RedLED, LOW); atraso (70); digitalWrite (WhiteLED, HIGH); tom (BuzzerPin, 523, n / 3); atraso (n / 3); digitalWrite (WhiteLED, LOW); atraso (70); digitalWrite (BlueLED, HIGH); tom (BuzzerPin, 659, n / 3); atraso (n / 3); digitalWrite (BlueLED, LOW); atraso (70); digitalWrite (RedLED, HIGH); digitalWrite (WhiteLED, HIGH); digitalWrite (BlueLED, HIGH); tom (BuzzerPin, 784, n * 3/4); atraso (n * 3/4); digitalWrite (BlueLED, LOW); digitalWrite (RedLED, LOW); digitalWrite (WhiteLED, LOW); atraso (70); digitalWrite (BlueLED, HIGH); tom (BuzzerPin, 659, n / 4); atraso (n / 4); digitalWrite (BlueLED, LOW); atraso (70); digitalWrite (RedLED, HIGH); digitalWrite (WhiteLED, HIGH); digitalWrite (BlueLED, HIGH); tom (BuzzerPin, 784, n * 2); atraso (n * 2); digitalWrite (BlueLED, LOW); digitalWrite (RedLED, LOW); digitalWrite (WhiteLED, LOW); delay (70);} // ****************************************** ******************** SingleDW functionvoid SingleDWwithNote (int HZ, int TurnOn, int Duration, int Staccato) {// Hertz em que a nota está (referências Note #) / / ligar =pino (LED vermelho / branco / azul) que será ajustado // a duração é por quanto tempo // Staccato 1 =sim, 0 =não resulta em nota ligeiramente encurtada ou um valor int x alto como apenas um pausa breve if (Staccato ==1) {DurationOn =Duration * x;} // por quanto tempo o tom e as luzes estão ligados é DurationShort else if (Staccato ==0) {DurationOn =Duration;} digitalWrite (TurnOn, HIGH); tom (BuzzerPin, HZ, DurationOn); atraso (DurationOn); digitalWrite (TurnOn, LOW); if (Staccato ==1) {DurationRest =Duração * y; atraso (DurationRest); }} // ********************************************* **************** Função do Hino Nacional dos EUA / Songvoid USNationalAnthem () {n =577; // taxa na qual o som é reproduzido calculado a partir de:60.000 (ms / fator BPM) / 104 BPM =577 ms / * valor de semínima é n valor de semínima em n * 2 colcheias n / 2 notas colcheias pontilhadas é n * 3 / 4 * / // x e y inteiros são para staccato / adição de pausa após uma nota // observe que x + y deve =1 ou o int. a taxa n será diminuída // diminui xe aumenta y para tornar as notas mais pronunciadas e salientes / otimistas x =0,92; // stacatio verdadeiro é cerca de 1/2 ou 2/3 do valor, então o valor de x está em torno de 0,5 a 0,7 para um staccato verdadeiro y =0,08; //1,00-,92(x value) =0,08 // barras 1-5, linhas 1 SingleDWwithNote (Nota4, RedLED, n * 3/4, 1); SingleDWwithNote (Nota2, WhiteLED, n / 4, 1); SingleDWwithNote (Nota1, RedLED, n, 1); SingleDWwithNote (Nota2, WhiteLED, n, 1); SingleDWwithNote (Nota4, RedLED, n, 1); SingleDWwithNote (Nota7, WhiteLED, n * 2, 1); SingleDWwithNote (Nota9, BlueLED, n * 3/4, 1); SingleDWwithNote (Nota8, WhiteLED, n / 4, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota2, WhiteLED, n, 1); SingleDWwithNote (Nota3, BlueLED, n, 1); SingleDWwithNote (Nota4, RedLED, n * 2, 1); SingleDWwithNote (Nota4, RedLED, n / 2, 1); SingleDWwithNote (Nota4, RedLED, n / 2, 1); // bar6-9 linha 2 SingleDWwithNote (Note9, BlueLED, n * 3/2, 1); SingleDWwithNote (Nota8, WhiteLED, n / 2, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota6, BlueLED, n * 2, 1); SingleDWwithNote (Nota 5, WhiteLED, n / 2, 1); SingleDWwithNote (Nota6, BlueLED, n / 2, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota4, BlueLED, n, 1); SingleDWwithNote (Nota2, WhiteLED, n, 1); SingleDWwithNote (Nota1, BlueLED, n, 1); SingleDWwithNote (Nota4, RedLED, n * 3/4, 1); SingleDWwithNote (Nota2, WhiteLED, n / 4, 1); // barras 10-13 linha 3 SingleDWwithNote (Note1, RedLED, n, 1); SingleDWwithNote (Nota2, WhiteLED, n, 1); SingleDWwithNote (Nota4, RedLED, n, 1); SingleDWwithNote (Nota7, WhiteLED, n * 2, 1); SingleDWwithNote (Nota9, BlueLED, n * 3/4, 1); SingleDWwithNote (Nota8, WhiteLED, n / 4, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota2, WhiteLED, n, 1); SingleDWwithNote (Nota3, BlueLED, n, 1); SingleDWwithNote (Nota4, RedLED, n * 2, 1); SingleDWwithNote (Nota4, RedLED, n / 2, 1); SingleDWwithNote (Nota4, RedLED, n / 2, 1); // barra 14-17, linha 4, fim da página 1 SingleDWwithNote (Nota9, BlueLED, n * 3/2, 1); SingleDWwithNote (Nota8, WhiteLED, n / 2, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota6, BlueLED, n * 2, 1); SingleDWwithNote (Nota 5, WhiteLED, n / 2, 1); SingleDWwithNote (Nota6, BlueLED, n / 2, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota4, BlueLED, n, 1); SingleDWwithNote (Nota2, WhiteLED, n, 1); SingleDWwithNote (Nota1, RedLED, n, 1); SingleDWwithNote (Nota 9, BlueLED, n / 2, 1); SingleDWwithNote (Nota 9, BlueLED, n / 2, 1); // barras 18-21, linha 5, início da página 2 SingleDWwithNote (Nota9, BlueLED, n, 1); SingleDWwithNote (Nota10, RedLED, n, 1); SingleDWwithNote (Nota11, WhiteLED, n, 1); SingleDWwithNote (Nota11, WhiteLED, n * 2, 1); SingleDWwithNote (Nota10, RedLED, n / 2, 1); SingleDWwithNote (Nota 9, BlueLED, n / 2, 1); SingleDWwithNote (Nota8, WhiteLED, n, 1); SingleDWwithNote (Nota9, BlueLED, n, 1); SingleDWwithNote (Nota10, RedLED, n, 1); SingleDWwithNote (Nota10, RedLED, n * 2, 1); SingleDWwithNote (Nota10, RedLED, n, 1); // barras 22-25, linha 6 SingleDWwithNote (Note9, WhiteLED, n * 3/2, 1); SingleDWwithNote (Nota 8, BlueLED, n / 2, 1); SingleDWwithNote (Nota7, WhiteLED, n, 1); SingleDWwithNote (Nota6, RedLED, n * 2, 1); SingleDWwithNote (Nota 5, BlueLED, n / 2, 1); SingleDWwithNote (Nota6, RedLED, n / 2, 1); SingleDWwithNote (Nota7, WhiteLED, n, 1); SingleDWwithNote (Nota2, BlueLED, n, 1); SingleDWwithNote (Nota3, RedLED, n, 1); SingleDWwithNote (Nota4, WhiteLED, n * 2, 1); SingleDWwithNote (Nota4, RedLED, n, 1); n =n * 1,08; // 60.000 / 96 bpm =625 ms; apenas um ligeiro atraso // barras 26-28, linha 7 SingleDWwithNote (Nota7, WhiteLED, n, 1); SingleDWwithNote (Nota7, WhiteLED, n, 1); SingleDWwithNote (Nota7, WhiteLED, n / 2, 1); SingleDWwithNote (Nota6, BlueLED, n / 2, 1); SingleDWwithNote (Nota 5, RedLED, n, 1); SingleDWwithNote (Nota 5, RedLED, n, 1); SingleDWwithNote (Nota 5, RedLED, n, 1); SingleDWwithNote (Nota8, WhiteLED, n, 1); SingleDWwithNote (Nota10, RedLED, n / 2, 1); SingleDWwithNote (Nota 9, BlueLED, n / 2, 1); SingleDWwithNote (Nota8, WhiteLED, n / 2, 1); SingleDWwithNote (Nota7, RedLED, n / 2, 1); // barras 29-30 SingleDWwithNote (Nota7, RedLED, n, 1); SingleDWwithNote (Nota6, BlueLED, n * 2, 1); // 2x para manter SingleDWwithNote (Nota4, RedLED, n / 2, 1); SingleDWwithNote (Nota4, RedLED, n / 2, 1); SingleDWwithNote (Nota7, BlueLED, n * 3/2, 1); SingleDWwithNote (Nota8, WhiteLED, n / 2, 1); SingleDWwithNote (Nota 9, BlueLED, n / 2, 1); SingleDWwithNote (Nota10, RedLED, n / 2, 1); n =n * 1,2; // grande retardo // compassos 31-34 no final da música SingleDWwithNote (Note11, WhiteLED, n * 2, 1); // retenção extra no SingleDWwithNote livre (Nota7, RedLED, n / 2, 1); SingleDWwithNote (Nota8, WhiteLED, n / 2, 1); SingleDWwithNote (Nota9, BlueLED, n * 3/2, 1); SingleDWwithNote (Nota10, RedLED, n / 2, 1); SingleDWwithNote (Nota8, WhiteLED, n, 1); SingleDWwithNote (Nota7, RedLED, n * 3, 1); // mantendo apenas 3 valores // rasie todas as notas em 3 etapas //1.06 derivadas da teoria musical. Faça uma nota em hertz e, em seguida, divida pela // nota abaixo dela (sustenidos e bemóis contam como uma nota) ao redor de 1,06 // Você pode deletar este próximo parágrafo para evitar mudanças de frequência ou aumentá-lo se quiser Nota1 =Nota1 * 1,06 * 1,06 * 1,06; Nota2 =Nota2 * 1,06 * 1,06 * 1,06; Nota3 =Nota3 * 1,06 * 1,06 * 1,06; Nota4 =Nota4 * 1,06 * 1,06 * 1,06; Nota5 =Nota5 * 1,06 * 1,06 * 1,06; Nota6 =Nota6 * 1,06 * 1,06 * 1,06; Nota7 =Nota7 * 1,06 * 1,06 * 1,06; Nota8 =Nota8 * 1,06 * 1,06 * 1,06; Nota9 =Nota9 * 1,06 * 1,06 * 1,06; Nota10 =Nota10 * 1,06 * 1,06 * 1,06; Note11 =Note11 * 1.06 * 1.06 * 1.06;} // ************************************** ************************* Twinkle void Twinkle (int Twinkle_Time) // Coloque um número entre () mostra por quanto tempo o brilho ocorre {// construído esta função para outro uso, portanto, tem um cálculo inicial estranho e bizarro // muda o tempo e a taxa para um número inteiro menor, observe que a extremidade da frente gira Twinkle_Time =Twinkle_Time / Twinkle_Rate; // neste caso, Tiwkle Time é =para Twinkle Rate, então o valor é 1 para (Twinkle_Time; Twinkle_Time> 0; Twinkle_Time--) // visto que o valor é 1 apenas processa uma vez {int B =random (1,4); // inteiro aleatório de 1, 2 ou 3 int C =random (1,4); // inteiro aleatório de 1, 2 ou 3 // sem problemas se os dois inteiros forem iguais, apenas um LED acende, adiciona a aleatoriedade // avalia cada número inteiro para rodar em um LED de cor específica se (B ==1) { digitalWrite (RedLED, HIGH);} if (B ==2) {digitalWrite (WhiteLED, HIGH);} if (B ==3) {digitalWrite (BlueLED, HIGH);} if (C ==1) {digitalWrite ( RedLED, HIGH);} if (C ==2) {digitalWrite (WhiteLED, HIGH);} if (C ==3) {digitalWrite (BlueLED, HIGH);} delay (Twinkle_Rate); // mantém o LED aceso por um definir o período de tempo // e então escreveremos os LEDs correspondentes baixos. frio possivelmente simplificar e apenas escrever todos os 3 baixos pode acelerar o tempo se (B ==1) {digitalWrite (RedLED, LOW);} if (B ==2) {digitalWrite (WhiteLED, LOW);} if (B ==3) {digitalWrite (BlueLED, LOW);} if (C ==1) {digitalWrite (RedLED, LOW);} if (C ==2) {digitalWrite (WhiteLED, LOW);} if (C ==3) {digitalWrite (BlueLED, LOW);}}} // ************************************** ************************* Setupvoid setup () {pinMode (ChargeButton, INPUT_PULLUP); // coloca como entrada e habilita o resistor pull up interno para o botão pinMode (StartButton, INPUT_PULLUP); // coloca como entrada e ativa o resistor pull up interno para o botão pinMode (RedLED, OUTPUT); // LED configurado como saída pinMode (WhiteLED, OUTPUT); // LED configurado como saída pinMode (BlueLED, OUTPUT); // LED configurado como saída pinMode (BuzzerPin, OUTPUT); // Buzzer configurado como saída // digitalWrite (ChargeButton, HIGH); não é necessário, pois está habilitado como pullup, é apenas redundante // digitalWrite (StartButton, HIGH); não é necessário, pois está habilitado como pullup, é apenas redundante // define todos os LEDs para BAIXO para evitar erros. Para meu deisgn HIGH =ON, LOW =OFF digitalWrite (RedLED, LOW); digitalWrite (WhiteLED, LOW); digitalWrite (BlueLED, LOW); } // *********************************************** *************** Loopvoid loop principal () {// lê os estados do botão, os pinos foram conectados ao resistor interno configurado como alto // os pinos serão baixos quando pressionados StartButtonState =digitalRead (StartButton); // baixo =pressionado ChargeButtonState =digitalRead (ChargeButton); // baixo =pressionado // avalia contra inteiros para fazer o primeiro pino de função que foi resistered como baixa // taxa de amostragem para botões de leitura é o int twinkle_rate (0,25 segundos) if (StartButtonState ==LOW) {USNationalAnthem ();} else if (ChargeButtonState ==LOW) {Charge ();} else {Twinkle (Twinkle_Rate);} // se nenhum pino pressionado, então pisca! de novo ... e de novo ... e de novo ...}