Assignment 9.2

posted Jul 16, 2010, 7:29 PM by Unknown user
This circuit uses four push buttons connected to pins 4-7 on the Arduino to control sound in Processing. For each button pressed, a different drum sound is played in Processing. For example: when the button connected to pin 4 is pressed, a cowbell sound is played. The sounds can also be played by pressing keys k, j, h, and g.
 
Arduino code:
 
int switchPin1 = 4;    // declares variables
int switchPin2 = 5;
int switchPin3 = 6;
int switchPin4 = 7;
void setup() {
  Serial.begin(9600);          // begin serial communication at 9600 bps
  pinMode(switchPin1, INPUT);  // set switchPins to input
  pinMode(switchPin2, INPUT);
  pinMode(switchPin3, INPUT);
  pinMode(switchPin4, INPUT);
}
void loop() {
  if(digitalRead(switchPin1) == HIGH) {    // if button is pressed
    Serial.print(1, DEC);                  // print this number
    delay(100);                            // and delay for 100 milliseconds
  }
  else if(digitalRead(switchPin2) == HIGH) {
    Serial.print(2, DEC);
    delay(100);
  }
  else if(digitalRead(switchPin3) == HIGH) {
    Serial.print(3, DEC);
    delay(100);
  }
  else if(digitalRead(switchPin4) == HIGH) {
    Serial.print(4, DEC);
    delay(100);
 
}
}
 
Processing code:
 
import processing.serial.*;      // import libraries
import ddf.minim.*;
Minim minim;                // declare variables
AudioSample cowbell;
AudioSample bass;
AudioSample kick;
AudioSample snare;
Serial myPort;
void setup()
{
  // sets screen size
  size(512, 200, P2D);
  // always start Minim before you do anything with it
  minim = new Minim(this);
  // load file from the data folder, with a 512 sample buffer
  cowbell = minim.loadSample("Cowbell.mp3");
  bass = minim.loadSample("Bass.wav");
  kick = minim.loadSample("Kick.wav");
  snare = minim.loadSample("Snare.wav");
  // sets port to read from
  String portName = Serial.list()[0];
  myPort = new Serial(this, Serial.list()[0], 9600);
}
void draw()
{
  int val = 0;    // resets value every time draw is run
  background(0);  // sets background color
  stroke(255);    // sets stroke color
  // use the mix buffer to draw the waveforms.
  // because these are MONO files, we could have used the left or right buffers and got the same data
  for (int i = 0; i < cowbell.bufferSize() - 1; i++)
  {
    line(i, 100 - cowbell.left.get(i)*50, i+1, 100 - cowbell.left.get(i+1)*50);
  }
  for (int u = 0; u < bass.bufferSize() - 1; u++)
  {
    line(u, 100 - bass.left.get(u)*50, u+1, 100 - bass.left.get(u+1)*50);
  }
  for (int y = 0; y < kick.bufferSize() - 1; y++)
  {
    line(y, 100 - kick.left.get(y)*50, y+1, 100 - kick.left.get(y+1)*50);
  }
  for (int t = 0; t < snare.bufferSize() - 1; t++)
  {
    line(t, 100 - snare.left.get(t)*50, t+1, 100 - snare.left.get(t+1)*50);
  }
  if (myPort.available() > 0) {  // if there is data available to read,
    val = myPort.read();         // read it and store it in val
    println(val);                // print the value of val
  }
  if (val == 49 ) cowbell.trigger();    // if val is this, play the sound
  if (val == 50 ) bass.trigger();
  if (val == 51 ) kick.trigger();
  if (val == 52 ) snare.trigger();
}
void keyPressed()
{
  if ( key == 'k' ) cowbell.trigger();    // if this key is pressed, play this sound
  if ( key == 'j' ) bass.trigger();
  if ( key == 'h' ) kick.trigger();
  if ( key == 'g' ) snare.trigger();
}
void stop()
{
  // always close Minim audio classes when you are done with them
 
  cowbell.close();
  bass.close();
  kick.close();
  snare.close();
  minim.stop();
 
  super.stop();
}
 
This one took me a while to figure out. It took me a couple tries to figure out where exactly to save the sound clips so that they could be read in the program, and then when i got that worked out the sound would repeat until another button was pressed, and then that sound would repeat. I solved that by resetting val every time the void draw function was run. I still have no idea where the values change from 1-4 to 49-52, but I got the program working and I didn't want to mess it up. A Fritzing picture of my circuit is attached.
ċ
9.2.fz
(370k)
Unknown user,
Jul 16, 2010, 8:48 PM
Comments