A/1
Activitat 1
- Fer sonar l'Arduino i regular el volum.
En aquesta activitat, farem que al girar el potenciòmetre soni una nota o una altra segons la posició.
Veurem primer com llegir el valor analògic del potenciòmetre i veure’l el seu valor des de l’IDE d’Arduino.
En segon lloc veurem com transformem el valor del potenciòmetre en un so.
En tercer lloc descobrirem la funció map() que transforma un rang de valors en un altre.
I per últim farem que soni a cada posició del potenciòmetre la nota que escollim.
1 Arduino UNO
1 Protoboard
1 Altaveu piezoelèctric
3 Potenciòmetres
2 Díodes emissors de llum o díodes LED
1 Resistència elèctrica de 230 Ohms
1 Connector jack de 3.5mm per a protoboard
Diversos cables (mascle – mascle)
// Manual Instròniks // A2.11 Un potenciòmetre per modificar el tempo // NOTA: Només es comenten els canvis que no s'havien vist fins aquest codi int tempo = 200; // Variable de tipus enter pote1 on desar el valor que marqui el potenciòmetre int pote1 = 0; void setup() { pinMode(3, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); // Indicar que el pin A0 serà d'entrada d'informació pinMode(A0, INPUT); // Activa la comunicació pel port sèrie a 9600bps Serial.begin(9600); } void loop() { // Llegir el valor de l'entrada A0 i la guarda a la variable pote1 pote1 = analogRead(A0); // Escriu pel port sèrie el valor que té la variable pote1 Serial.println(pote1); digitalWrite(13, HIGH); digitalWrite(12, LOW); tone(3, 400, 20); // El valor que tingui pote1 és el valor que esperem delay(pote1); digitalWrite(12, HIGH); digitalWrite(13, LOW); tone(3, 4000, 20); // El valor que tingui pote1 és el valor que esperem delay(pote1); }
// Manual Instròniks // A2.12 Un potenciòmetre per modificar la nota // NOTA: Només es comenten els canvis que no s'havien vist fins aquest codi int tempo = 200; // Variable de tipus enter pote1 on desar el valor que marqui el potenciòmetre int pote1 = 0; void setup() { pinMode(3, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); // Indicar que el pin A0 serà d'entrada d'informació pinMode(A0, INPUT); // Activa la comunicació pel port sèrie a 9600bps Serial.begin(9600); } void loop() { // Llegir el valor de l'entrada A0 i la guarda a la variable pote1 pote1 = analogRead(A0); // Escriu pel port sèrie el valor que té la variable pote1 Serial.println(pote1); digitalWrite(13, HIGH); digitalWrite(12, LOW); tone(3, 400, 20); delay(tempo); digitalWrite(12, HIGH); digitalWrite(13, LOW); // El valor que tingui pote1 serà el valor de la freqüència de la nota tone(3, pote1, 20); delay(tempo); }
// Manual Instròniks // A2.2 Mapejar un valor // NOTA: Només es comenten els canvis que no s'havien vist fins aquest codi int tempo = 200; int pote1 = 0; // Variable per desar el valor del mapeig del potenciòmetre int valor = 0; // Variable per assignar una nota depenent del que valgui valor int nota = 0; // Variables de tipus enter per desar el valor de la freqüència de cada nota int do4 = 264; int re4 = 297; int mi4 = 330; int fa4 = 352; int sl4 = 396; int la4 = 440; int si4 = 495; int do5 = 528; void setup() { pinMode(3, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(A0, INPUT); Serial.begin(9600); } void loop() { pote1 = analogRead(A0); // El valor de pote1 que es rep, s'indica que va entre 0 i 1023 // i que es vol transformara a un valor entre 0 i 3 valor = map(pote1, 0, 1023, 0, 3); Serial.println(valor); // Condicional que segons la condició que hi ha dins dels () fa el codi que hi ha dins {} // Si el valor es 0 if(valor == 0) { nota = do4; } else if(valor == 1) { nota = mi4; } else if(valor == 2) { nota = sl4; } else if(valor == 3) { nota = do5; } // si no es cap dels valors anteriors else { nota = re4; } digitalWrite(13, HIGH); digitalWrite(12, LOW); // Es fa sonar la freqüència de la variable do4 tone(3, do4, 20); delay(tempo); digitalWrite(12, HIGH); digitalWrite(13, LOW); // Es fa sonara la freqüència de la nota calculaadaa tone(3, nota, 20); //el nou valor de la nota delay(tempo); }
// Manual Instròniks // A2.3 Dos potenciòmetres // NOTA: Només es comenten els canvis que no s'havien vist fins aquest codi int tempo = 200; int pote1 = 0; //valor del nou potenciòmetre(A1) int pote2 = 0; int valor = 0; int nota = 0; int do4 = 264; int re4 = 297; int mi4 = 330; int fa4 = 352; int sl4 = 396; int la4 = 440; int si4 = 495; int do5 = 528; void setup() { pinMode(3, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(A0, INPUT); // Indicar que el pin A1 serà d'entrada d'informació pinMode(A1, INPUT); Serial.begin(9600); } void loop() { pote1 = analogRead(A0); // Llegir el valor de l'entrada A1 i la guarda a la variable pote2 pote2 = analogRead(A1); valor = map(pote1, 0, 1023, 0, 3); Serial.println(valor); if(valor = = 0) { nota = do4; } else if(valor == 1) { nota = mi4; } else if(valor == 2) { nota = sl4; } else if(valor == 3) { nota = do5; } else { nota = re4; } digitalWrite(13, HIGH); digitalWrite(12, LOW); tone(3, do4, 20); // Esperar el temps del valor pote2 + 10 milisegons delay(pote2+10); digitalWrite(12, HIGH); digitalWrite(13, LOW); tone(3, nota, 20); //el nou valor de la nota // Esperra el temps del valor pote2 + 10 milisegons delay(pote2+10); }
// Manual Instròniks // A2.4 Treballar amb llistes. // NOTA: Només es comenten els canvis que no s'havien vist fins aquest codi int tempo = 200; int pote1 = 0; //valor del nou potenciòmetre(A1) int pote2 = 0; int p = 0; int nota = 0; // Es fa servir un array o llista per desar les notes // Posicio 0 1 2 3 4 5 6 7 // Nota do4 re4 mi4 fa4 sl4 la4 si4 do5 int notes[] = {264, 297, 330, 352, 396, 440, 495, 528} void setup() { pinMode(3, OUTPUT); pinMode(12, OUTPUT); pinMode(13, OUTPUT); pinMode(A0, INPUT); pinMode(A1, INPUT); Serial.begin(9600); } void loop() { pote1 = analogRead(A0); pote2 = analogRead(A1); p = map(pote1, 0, 1023, 0, 3); Serial.println(posicio); // Es posa com a nota la freqüència que hi ha dins de la posicio p dins de notes // Per exemple si p hagués estat 2 a nota s'hi hagués posat un 330 nota = notes[p]; Serial.println(nota); digitalWrite(13, HIGH); digitalWrite(12, LOW); tone(3, do4, 20); delay(pote2+10); digitalWrite(12, HIGH); digitalWrite(13, LOW); tone(3, nota, 20); delay(pote2+10); }
A. Sabries posar un tercer potenciòmetre?
B. Sabries fer que la llista només tingues les notes de l’escala pentatònica en DO?
Comparteix que has fet aquesta activitat a twitter. La teva opinió es mostrarà dins d’aquesta activitat.
NOTA: Si tens resposta a alguna d’aquestes preguntes, o alguna observació, la pots compartir per Twitter.
Etiqueta la resposta amb el hashtag: #instroniks_a2 i @instroniks
Així la podrem veure dins d’aquesta activitat.