Intellekten IoT Edison Sonar Theremin (2 / 2 steg)
Steg 2: Arduino skiss
Skapa en ny skiss på Arduino Edison IDE och spara den med följande kod:
/ * < br > theremin_edison.ino
Del av "Intel IoT Edison sonar theremin"
Copyright 2014 Pavlos Iliopoulos, techprolet.com
Detta program är fri programvara: du kan vidaredistribuera det och/eller ändra
det enligt villkoren i GNU General Public License som offentliggjorts av
Free Software Foundation, antingen version 3 av licensen, eller
(på ditt alternativ) någon senare version.
Detta program är distribuerat i hopp om att det kommer att vara användbar,
men utan garantier; utan att ens underförstådd garanti om
SÄLJBARHET eller lämplighet för ett visst ändamål. Se den
GNU General Public License för mer detaljer.
Du bör ha fått en kopia av GNU General Public License
tillsammans med detta program. Om inte, se < en href = "http://www.gnu.org/licenses/" rel = "nofollow" > http://www.gnu.org/licenses/</a>.
HC-SR04 Ping avstånd sensor koden från jsvester < en href = " rel = "nofollow" >
*/
89, tolvtonsteknik
const unsigned int usablePitches[] = {31,33,35,37,39,41,44,46,49,52,55,58,62,65,69,73,78,82,87,93,98,104,110,117,123,131,139,147,156,165,175,185,196,208,220,233,247,262,277,294,311,330,349,370,392,415,440,466,494,523,554,587,622,659,698,740,784,831,880,932,988,1047,1109,1175,1245,1319,1397,1480,1568,1661,1760,1865,1976,2093,2217,2349,2489,2637,2794,2960,3136,3322,3520,3729,3951,4186,4435,4699,4978};
#define NUM_SAMPLES 89
52, do major
CONST unsigned int usablePitches [] = {31, 33, 37, 41, 44, 49, 55, 62, 65, 73, 82, 87, 98, 110, 123, 131, 147, 165, 175, 196, 220, 247, 262, 294, 330, 349, 392, 440, 494, 523, 587, 659, 698, 784, 880, 988, 1047, 1175, 1319, 1397, 1568, 1760, 1976, 2093, 2349, 2637, 2794, 3136, 3520, 3951, 4186, 4699};
#define NUM_SAMPLES 52
37, pentatoniska
CONST unsigned int usablePitches [] = {33, 37, 41, 49, 55, 65, 73, 82, 98, 110, 131, 147, 165, 196, 220, 262, 294, 330, 392, 440, 523, 587, 659, 784, 880, 1047, 1175, 1319, 1568, 1760, 2093, 2349, 2637, 3136, 3520, 4186, 4699};
#define NUM_SAMPLES 37
#define TRIGGER_PIN 7 / / Arduino PIN-kod knuten till utlösa pin på ultrasonic sensor.
#define ECHO_PIN 8 / / Arduino PIN-kod knuten till echo pin på ultrasonic sensor.
#define BUZZER_PIN 6
#define MAX_DISTANCE_SOUND 110.0
flyta distanceDivider = 1,0;
void setup() {
Serial.BEGIN(9600); Öppna seriell monitor på 115200 baud se ping resultat.
distanceDivider = MAX_DISTANCE_SOUND / NUM_SAMPLES;
pinMode (TRIGGER_PIN, OUTPUT);
pinMode (ECHO_PIN, indata);
för (int jag = 0; jag < NUM_SAMPLES; i ++) {
Serial.Print ("nej");
Serial.Print (i);
Serial.Print (":");
Serial.println (usablePitches[i]);
}
}
void loop() {
Delay(200); Vänta 200ms mellan pingmeddelandena (ca 5 pings/SEK). 29ms bör vara den kortaste fördröjningen mellan pingar.
float varaktighet, avstånd;
digitalWrite (TRIGGER_PIN, låg);
delayMicroseconds(2);
digitalWrite (TRIGGER_PIN, hög);
delayMicroseconds(10);
digitalWrite (TRIGGER_PIN, låg);
längd = pulseIn (ECHO_PIN, hög);
avståndet = (längd/2) / 29,1;
om ((distance>0) & &(distance<MAX_DISTANCE_SOUND)) {
tonen (BUZZER_PIN, usablePitches[round(distance/distanceDivider)]);
Serial.Print ("Freq:");
Serial.Print (usablePitches[round(distance/distanceDivider)]);
Serial.Print ("Ping:");
Serial.Print(Distance); Konvertera ping tid till avståndet i cm och utskriftsresultatet (0 = utanför förutbestämd distans intervall)
Serial.println("cm");
} annat {
noTone(BUZZER_PIN);
}
} < br >< br >
Som den har nu, kommer att koden ovan producera pentatoniska melodier. Om du föredrar en göra stora eller dodecaphonic, avkommentera respektive rader överst i koden och kommenterar ut den pentatoniska delen.
Kontrollera att koden kompileras och ladda upp den till din Intel® Edison.
Du är nu redo att producera lite (beep beep) musik! Vara försiktig dock eftersom Grove summern vände sig vara långt högre än väntat:)