/* Play-Doh instrument 2 ir sensors 2 potentiometers 5 switches Drum hit byte values were borrowed from here http://little-scale.blogspot.com/2008/04/arduino-drum-machine.html <-- great site!! Drum beats are not currently implemented. In this implementation, IR sensors control the tonal values, and a pot controls the tempo. Version 1.0 Justin Blinder */ int duration = 500; // sustain value (lenght of a note) int speakerOut = 9; // digital out int rest_count = 10; // pause time int tone = 0; // tone value int divider = 0; // divider for tone int index = 0; int total = 0; int average = 0; int distance; int switch1 = 0; int switch2 = 0; int switch3 = 0; int switch4 = 0; int switch5 = 0; int tempo = 2; int restCount =0 ; int NUMREADINGS = 10; int readings[10]; int scale; int note; //variable resistor values int val; int val2 int val3; int newval; int newval2; int mapval; int mapval2; int mapval3; byte crash[] = { 127, 128, 225, 217, 99, 38, 61, 153, 152, 144, 133, 73, 122, 144, 65, 188, 87, 170, 164, 111, 122, 151, 114, 88, 174, 77, 140, 92, 122, 141, 156, 124, 121, 123, 126, 133, 132, 139, 119, 120, 127, 141, 130, 122, 129, 127, 132, 121, 139, 118, 130, 131, 129, 132, 130, 134, 126, 128, 130, 126, 122, 132, 129, 127, 131, 126, 128, 127, 126, 125, 127, 125, 128, 125, 128, 128, 127, 127, 126, 127, 128, 128, 128, 127, 127, 127, 127, 127, 128, 127, 127, 126, 127, 127, 128, 127, 128, 126, 127, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 126, 126, 128, 127, 126, 127, 126, 127, 127, 126, 127, 126, 127, 127, 127, 127, 127, 126, 127, 127, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 127, 127, 127, 126, 127, 127, 127, 126, 127, 127, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 127, 127, 126, 127, 126, 126, 127, 126, 127, 126, 126, 126, 126, 126, 126, 126, 127, 127, 126, 127, 127, 127, 127, 126, 126, 127, 127, 127, 126, 127, 126, 127, 127, 127, 127, 127, 126, 126, 127, 127, 126, 127, 127, 127, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127 }; byte kick[] = { 127, 80, 42, 5, 165, 242, 241, 233, 128, 73, 48, 22, 127, 69, 55, 113, 151, 183, 209, 217, 223, 228, 233, 215, 161, 117, 91, 76, 65, 49, 37, 31, 31, 48, 83, 120, 146, 166, 183, 198, 206, 210, 209, 199, 178, 145, 111, 88, 78, 73, 69, 67, 72, 80, 88, 97, 109, 124, 137, 150, 163, 171, 174, 172, 168, 160, 144, 125, 114, 110, 108, 104, 104, 106, 109, 110, 112, 117, 124, 129, 135, 142, 145, 145, 143, 140, 137, 132, 128, 125, 122, 119, 118, 119, 119, 119, 118, 118, 120, 124, 126, 129, 132, 135, 137, 137, 135, 132, 131, 130, 129, 128, 126, 126, 124, 123, 121, 120, 120, 122, 123, 124, 126, 128, 129, 130, 130, 131, 131, 131, 130, 130, 130, 129, 129, 128, 126, 125, 125, 124, 124, 124, 124, 125, 126, 126, 128, 128, 128, 129, 129, 129, 129, 129, 128, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 126, 128, 127, 126, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 128, 126, 126, 126, 126, 126, 126, 126, 126, 126, 126 }; byte snare[] = { 127, 215, 65, 212, 56, 102, 135, 122, 51, 201, 220, 46, 175, 80, 152, 95, 123, 116, 184, 155, 59, 122, 100, 161, 143, 173, 101, 155, 97, 73, 112, 98, 176, 96, 140, 77, 134, 109, 132, 149, 112, 149, 97, 161, 98, 151, 98, 155, 149, 112, 157, 103, 133, 106, 167, 97, 166, 108, 129, 124, 136, 146, 124, 136, 129, 150, 94, 130, 105, 141, 146, 128, 129, 99, 150, 121, 141, 99, 142, 116, 131, 114, 118, 143, 127, 143, 115, 144, 120, 137, 109, 129, 131, 139, 129, 113, 144, 119, 145, 117, 135, 129, 134, 136, 124, 130, 130, 139, 121, 136, 121, 132, 128, 127, 126, 122, 130, 126, 138, 120, 136, 122, 131, 123, 130, 128, 127, 128, 118, 132, 125, 131, 122, 131, 125, 131, 122, 126, 128, 126, 129, 121, 129, 123, 132, 129, 127, 131, 123, 128, 125, 130, 123, 131, 123, 128, 131, 129, 128, 126, 125, 124, 131, 121, 124, 129, 130, 126, 124, 126, 127, 130, 125, 126, 128, 126, 128, 126, 126, 126, 126, 125, 128, 126, 126, 126, 126, 126, 126, 125, 128, 126, 126, 126, 126, 126, 126, 126, 126, 128, 128, 126, 128, 126, 127, 126, 128, 125, 127, 128, 128, 126, 126, 128, 126, 126, 128, 128, 128, 128, 128, 126, 128, 126, 126, 128, 128, 126, 126, 128, 128, 126, 126, 127, 126, 128, 126, 126, 128, 128, 128, 126, 126, 126, 128, 128, 126, 126, 126, 128, 128, 126, 128, 128, 126, 126 }; byte hat[] = { 127, 128, 225, 217, 99, 38, 61, 153, 152, 144, 133, 73, 122, 144, 65, 188, 87, 170, 164, 111, 122, 151, 114, 88, 174, 77, 140, 92, 122, 141, 156, 124, 121, 123, 126, 133, 132, 139, 119, 120, 127, 141, 130, 122, 129, 127, 132, 121, 139, 118, 130, 131, 129, 132, 130, 134, 126, 128, 130, 126, 122, 132, 129, 127, 131, 126, 128, 127, 126, 125, 127, 125, 128, 125, 128, 128, 127, 127, 126, 127, 128, 128, 128, 127, 127, 127, 127, 127, 128, 127, 127, 126, 127, 127, 128, 127, 128, 126, 127, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 128, 128, 126, 126, 128, 127, 126, 127, 126, 127, 127, 126, 127, 126, 127, 127, 127, 127, 127, 126, 127, 127, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127, 127, 127, 126, 126, 126, 127, 127, 127, 126, 127, 127, 127, 126, 127, 127, 126, 127, 127, 127, 127, 127, 127, 126, 126, 126, 126, 126, 126, 126, 127, 127, 126, 127, 126, 126, 127, 126, 127, 126, 126, 126, 126, 126, 126, 126, 127, 127, 126, 127, 127, 127, 127, 126, 126, 127, 127, 127, 126, 127, 126, 127, 127, 127, 127, 127, 126, 126, 127, 127, 126, 127, 127, 127, 127, 126, 127, 127, 127, 127, 127, 127, 127, 127 }; int beats; //Set up a note sequence char notes[] = "cdefgabC"; void setup() { Serial.begin(9600); pinMode(speakerOut, OUTPUT); pinMode(3, INPUT); pinMode(4, INPUT); pinMode(5, INPUT); pinMode(6, INPUT); pinMode(7, INPUT); } void loop() { tempo = 2; note = 1000; scale = 15; val = analogRead(0); val2 = analogRead(1); val3 = analogRead(2); mapval3 = map(val3, 0,1023, 400, 1500); newval = processIR(val); newval2 = processIR(val2); mapval = map(newval, 330, 490, 1, 8); mapval2 = map(newval2, 330, 490, .5,4); tempo = mapval3; divider = mapval2; switch5 = digitalRead(7); switch1 = digitalRead(3); if(switch1 == 1){ divider +1; } switch2 = digitalRead(4); if(switch2 == 1){ divider +1; } switch3 = digitalRead(5); if(switch3 == 1){ divider +1; } switch4 = digitalRead(6); if(switch4 == 1){ divider +1; } int beat = tempo * mapval2; restCount = beat; playNote(mapval, beat); } void playNote(char note, int duration) { char names[] = { 'c', 'd', 'e', 'f', 'g', 'a', 'b', 'C' }; int tones[] = { 1915, 1700, 1519, 1432, 1275, 1136, 1014, 956 }; playTone(snare[note], duration); } void playTone(int tone, int duration) { long elapsed_time = 0; if (tone > 0) { while ( elapsed_time < duration) { digitalWrite(speakerOut,HIGH); delayMicroseconds(tone/divider); digitalWrite(speakerOut, LOW); delayMicroseconds(tone/divider); elapsed_time += (tone); } } else { for (int j = 0; j < rest_count; j++) { delayMicroseconds(duration); } } } //smooth the ir sensor and return the value int processIR(int value ){ total -= readings[index]; readings[index] = value; total += readings[index]; index = (index + 1); if (index >= NUMREADINGS){ index = 0; } value = total / NUMREADINGS; return value; } void playSeq1(){ playSnare(); delayMicroseconds(20); playSnare(); delayMicroseconds(20); playKick(); delayMicroseconds(20); playSnare(); delayMicroseconds(20); playHat(); delayMicroseconds(20); } void playSeq2(){ playHat(); delayMicroseconds(20); playHat(); delayMicroseconds(20); playHat(); delayMicroseconds(20); playSnare(); delayMicroseconds(20); playHat(); delayMicroseconds(20); } void playSeq3(){ playHat(); delayMicroseconds(20); playSnare(); delayMicroseconds(20); playHat(); delayMicroseconds(20); playSnare(); delayMicroseconds(20); playHat(); delayMicroseconds(20); } void playSeq4(){ playKick(); delayMicroseconds(20); playKick(); delayMicroseconds(20); playHat(); delayMicroseconds(20); playKick(); delayMicroseconds(20); playHat(); delayMicroseconds(20); } void playCrash(){ for(int i = 0; i < 256; i ++) { tone = crash[i]; playDrum(); } } void playHat(){ for(int i = 0; i < 256; i ++) { tone = hat[i]; playDrum(); } } void playSnare(){ for(int i = 0; i < 256; i ++) { tone = snare[i]; playDrum(); } } void playKick(){ for(int i = 0; i < 256; i ++) { tone = kick[i]; playDrum(); } }