#include “Ultrasonic.h” Ultrasonic ultrasonic(12,13); int unote; int stategrilletto = 0; const int buttongrilletto = 7; void setup() { pinMode(11, OUTPUT); pinMode(buttongrilletto, INPUT); Serial.begin(31250); } void loop() { stategrilletto = digitalRead(buttongrilletto); unote=ultrasonic.Ranging(CM); if(unote <= 33){ tone(8, 33, 250); digitalWrite(11, HIGH); } else if(unote == 34){ tone(8, 34, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×18, 0×45); } else if(unote <= 37 && unote > 34){ tone(8, 37, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×19, 0×45); } else if(unote <= 39 && unote > 37){ tone(8, 39, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x1A, 0×45); } else if(unote <= 41 && unote > 39){ tone(8, 41, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x1B, 0×45); } else if(unote <= 44 && unote > 41){ tone(8, 44, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x1C, 0×45); } else if(unote <= 46 && unote > 44){ tone(8, 46, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x1D, 0×45); } else if(unote <= 49 && unote > 46){ tone(8, 49, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x1E, 0×45); } else if(unote <= 52 && unote > 49){ tone(8, 52, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x1F, 0×45); } else if(unote <= 55 && unote > 52){ tone(8, 55, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×20, 0×45); } else if(unote <= 58 && unote > 55){ tone(8, 58, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×21, 0×45); } else if(unote <= 62 && unote > 58){ tone(8, 62, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×22, 0×45); } else if(unote <= 67 && unote > 62){ tone(8, 67, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×23, 0×45); } else if(unote <= 70 && unote > 67){ tone(8, 70, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×24, 0×45); } else if(unote <= 74 && unote > 70){ tone(8, 74, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×25, 0×45); } else if(unote <= 78 && unote > 74){ tone(8, 78, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×26, 0×45); } else if(unote <= 83 && unote > 78){ tone(8, 83, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×27, 0×45); } else if(unote <= 88 && unote > 83){ tone(8, 88, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×28, 0×45); } else if(unote <= 93 && unote > 88){ tone(8, 93, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×29, 0×45); } else if(unote <= 98 && unote > 93){ tone(8, 98, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x2A, 0×45); } else if(unote <= 104 && unote > 98){ tone(8, 104, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x2B, 0×45); } else if(unote <= 110 && unote > 104){ tone(8, 110, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x2C, 0×45); } else if(unote <= 117 && unote > 110){ tone(8, 117, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x2D, 0×45); } else if(unote <= 124 && unote > 117){ tone(8, 124, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x2E, 0×45); } else if(unote <= 131 && unote > 124){ tone(8, 131, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x2F, 0×45); } else if(unote <= 139 && unote > 131){ tone(8, 139, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×30, 0×45); } else if(unote <= 147 && unote > 139){ tone(8, 147, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×31, 0×45); } else if(unote <= 156 && unote > 147){ tone(8, 156, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×31, 0×45); } else if(unote <= 165 && unote > 156){ tone(8, 165, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×33, 0×45); } else if(unote <= 175 && unote > 165){ tone(8, 175, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×34, 0×45); } else if(unote <= 185 && unote > 175){ tone(8, 185, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×35, 0×45); } else if(unote <= 196 && unote > 185){ tone(8, 196, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×36, 0×45); } else if(unote <= 208 && unote > 196){ tone(8, 208, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×37, 0×45); } else if(unote <= 220 && unote > 208){ tone(8, 220, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×38, 0×45); } else if(unote <= 233 && unote > 220){ tone(8, 233, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×39, 0×45); } else if(unote <= 247 && unote > 233){ tone(8, 247, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x3A, 0×45); } else if(unote <= 262 && unote > 247){ tone(8, 262, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x3B, 0×45); } else if(unote <= 277 && unote > 262){ tone(8, 277, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x3C, 0×45); } else if(unote <= 294 && unote > 277){ tone(8, 294, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x3D, 0×45); } else if(unote <= 311 && unote > 294){ tone(8, 311, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x3E, 0×45); } else if(unote <= 330 && unote > 311){ tone(8, 330, 250); digitalWrite(11, HIGH); noteOn(0×90, 0x3F, 0×45); } else if(unote <= 349 && unote > 330){ tone(8, 349, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×40, 0×45); } else if(unote <= 370 && unote > 349){ tone(8, 370, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×41, 0×45); } else if(unote <= 392 && unote > 370){ tone(8, 392, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×42, 0×45); } else if(unote <= 415 && unote > 392){ tone(8, 415, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×43, 0×45); } else if(unote <= 440 && unote > 415){ tone(8, 440, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×44, 0×45); } else if(unote <= 466 && unote > 440){ tone(8, 466, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×45, 0×45); } else if(unote <= 494 && unote > 494){ tone(8, 494, 250); digitalWrite(11, HIGH); noteOn(0×90, 0×46, 0×45); } Serial.println(unote); digitalWrite(11, LOW); delay(100); } void noteOn(int cmd, int pitch, int velocity) { Serial.write(cmd); Serial.write(pitch); Serial.write(velocity); }
La palla maggiore è stata scrivere tutti gli if per convertire la distanza in frequenza e poi ponderare la nota giusta. Come effetto coreografico ho aggiunto un led bianco (smontato da un affarino di star wars preso in un pacchetto di patatine) dentro il tubo di alluminio che si vede da un lato.
Il led si accende, per poi spegnersi subito dopo, ad ogni nota suonata. E’ un midimitra a tutti gli effetti e, a quanto ne so, è il primo al mondo. (la scheda dietro non serve a niente, è solo per fare scena). Il risultato è una mitragliata di cassa o rullante o piatto o conga sparata dalle casse e dal subwoofer. Il risultato si può vedere nel video, anche se l’audio è un po’ distorto.