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.