Omet navegació

Melodies amb un altaveu

Si volem fer melodies més complexes ens cal un brunzidor passiu o altaveu.

Fes el muntatge aquest:

Altaveu + Wemos

 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.
Melodia
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.

Creat amb eXeLearning (Finestra nova)