page13
tempo di andata e ritorno dell’eco).
L’unica vera novità sta nell’utilizzo della funzione map(): a riga 30 viene infatti impiegata
per trasformare una misura di distanza (la posizione dell’ostacolo al cammino degli ultrasuoni) in un indice che ci servirà per suonare una nota (pensando alle posizioni delle note nel vettore scala[ ] definito a riga 8, il primo DO corrisponde allo 0, il RE all’1, … e così via fino al DO più alto che corrisponde al 7).
Dobbiamo quindi capire come scegliere i numeri che -nello script- sono per ora fissati a 5 e 55: corrispondono proprio alle posizione del primo e dell’ultimo tasto e dipendono chiaramente da come prepariamo la nostra tastiera.
Dobbiamo quindi tarare il programma, lanciandolo così com’è ed ignorando per ora i suoni che risulteranno; apriamo il Monitor seriale (vedi figura  a pagina 2), posizioniamo la nostra mano sopra al primo DO e prendiamo nota della distanza in centimetri che il sensore misura (potremmo anche usare un righello per vedere la distanza dalla mano al sensore, ma … perché rubare il lavoro al sensore stesso?): scriviamo questo numero al posto del 5 di riga 30.
Ripetiamo poi l’operazione di misura mettendo la mano sopra l’ultimo tasto (il DO più acuto): la distanza in centimetri rilevata dal sensore andrà a sostituire il numero 55 di riga 30. Se ora compiliamo e carichiamo lo sketch, dovremmo riuscire a suonare tutte le note: le due estreme, ma anche quelle intermedie.
La funzione map() infatti, fa proprio questo: trasforma il primo numero (il 5, nel caso dello sketch di pagina 12) nel numero 0 ed il secondo numero (il 55) nel numero 7 ed in proporzione le distanze intermedie sono tradotte nei numeri da 1 a 6.
Per capire poi come lo sketch scelga le note, basta leggere le righe da 35 a 45: se il numero calcolato da map() sta fra 0 e 7 la nostra mano è sopra la tastiera, quindi il programma prende la nota dal vettore scala[ ] e la suona per una durata pari ad un quarto di battuta (vedi riga 37). Contemporaneamente stampa sulla seriale la misura rilevata e la nota calcolata, ed accende il LED on board. Viceversa (righe 42-44) se siamo fuori dai tasti “suonabili”, spegne il LED, zittisce il buzzer e scrive “fuori scala” sulla seriale.
Ora che la pianola è accordata, suona pure tutti i brani che vuoi (purché stiano in una sola ottava e non contengano semitoni…). :-p
Sfida: riguardando quello che è stato fatto per il theremin a luce (vedi lo sketch di pagina 5) riesci ad automatizzare la procedura di taratura? Riesci cioè a scrivere il programma in modo che le posizioni del primo e dell’ultimo tasto vengano acquisite automaticamente senza doverle scrivere a mano in un nuovo sketch?
Licenza: CC-BY Alessandro Ebranati, CoderDojo Trento
Quest'opera è distribuita con Licenza Creative Commons Attribuzione 4.0 Unported
Trovi questo ed altri tutorial su coderdojotrento.it
Realizzato con il supporto di CoderDolomiti.
Pag.
<number>/13
Trovi questo ed altri tutorial sul nostro sito: coderdojotrento.it/arduino1
Ringraziamenti
Questo tutorial:
* fa parte delle “risorse” di CoderDojo Trento,
* è stato scritto con il supporto di CoderDolomiti.
* è ispirato in gran parte ai tutorial di Arduino
presentati in video da Massimo Banzi.
Alcune delle immagini utilizzate in questo tutorial
derivano dal sito ufficiale di Arduino (arduino.cc),
mentre gli schemi sono stati disegnati con il tool
open source Fritzing (fritzing.org).