Pràctiques de «Tecnologia i digitalització» amb Wemos D1 R32 i Arduino IDE
Melodies amb un altaveu
Si volem fer melodies més complexes ens cal un brunzidor passiu o altaveu.
Fes el muntatge aquest:

I ara prova el programa simplificat aquest.
int altaveu = 14; // connecta l'altaveu al pin 14
void setup(){
pinMode(altaveu, OUTPUT);
}
void loop(){
tone(altaveu,261, 333); // interpreta la nota Do usant la seua freqüència
delay(333); //fem un silenci de 333 ms
tone(altaveu,294, 333); // interpreta la nota Re usant la seua freqüència
delay(333); //fem un silenci de 333 ms
tone(altaveu,329, 333); // interpreta la nota Mi usant la seua freqüència
delay(333); //fem un silenci de 333 ms
tone(altaveu,349, 333); // interpreta la nota Fa usant la seua freqüència
delay(333); //fem un silenci de 333 ms
tone(altaveu,392, 333); // interpreta la nota Sol usant la seua freqüència
delay(333); //fem un silenci de 333 ms
tone(altaveu,440, 333); // interpreta la nota La usant la seua freqüència
delay(333); //fem un silenci de 333 ms
tone(altaveu,493, 333); // interpreta la nota Si usant la seua freqüència
delay(4000); //fem un silenci de 4000 ms
}//Final de programa
Aquest programa fa ús de l'ordre tone (pinAltaveu, freqüència de la nota, duració en ms de la nota);
Els aparells electrònics que usen l'ordre «tone» no poden emetre freqüències inferiors a 31 Hz, com
mostra la pàgina de documentació anterior. Això impedeix executar les notes de la octava primera, però si pots
reproduir les notes de les altres sis octaves.
Mira la pàgina de «ciudad del pentagrama» per veure les freqüències de cada nota per a cada octava.
Podem provar una altre programa que mostra duna forma més eficient com escriure la melodia d'una partitura
per reproduir les notes.
//Copyleft(2011)= Michael Margolis //Modificat: C.Ferrando // int altaveu = 14; // connecta l'altaveu al pin 4 char nomNotes[] ={'Do','Re','Mi','Fa','Sol','La','Si'}; unsigned int frequencies[] = {261,294,329,349,392,440,493}; const byte comptaNotes = sizeof(nomNotes); // el nom de les notes (7 en aquest exemple)// un espai entre notes representa un silenci char partitura[] = "Do,Re,Mi,Fa,Sol,La,Si, ,Do,Re,Mi,Fa,Sol,La,Si, ,Do,Re,Mi,Fa,Sol,La,Si"; const byte longitudPartitura = sizeof(partitura); // el nombre de notes en la partitura void setup(){ pinMode(altaveu, OUTPUT); }// Final setup void loop(){ for (int i = 0; i < longitudPartitura; i++){ int duracio = 333; // cada nota dura la tercera part d'un segon interpretaNota(partitura[i], duracio); // interpreta la nota }//final loop delay(8000); // espera huit segons abans de repetir la melodia }// Final loop void interpretaNota(char nota, int duracio){// interpreta el to que correspon a la nota for (int i = 0; i < comptaNotes; i++){// cerca la nota al catàleg de notes if (nomNotes[i] == nota) // troba la nota a la colecció de nomNotes tone(altaveu, frequencies[i], duracio); // interpreta la nota usant la seua freqüència }// final for delay(100);// Temps d'espera entre dues notes (no pot ser cero) }//final funció interpretaNota
Aquest programa s'ha provat en un Arduino 2.2.1 sempre problemes.![]()
També pots entrar a la pàgina «Freqüències del piano» per veure les freqüències
en Hz de les notes usant dos notacions la Franco/Belga i la Anglosaxona.
Ara ja sols et falta cercar una partitura, i modificar aquest darrer programa
posant-hi les notes amb la seua freqüència i les notes de la partitura amb el silencis.
Llicenciat sota la Llicència Creative Commons Reconeixement CompartirIgual 4.0