Assignment 9.1

posted Jul 15, 2010, 10:13 AM by Unknown user
I built a completely new circuit for this one. I got rid of the push buttons and added two potentiometers attached to analog pins 0 and 4 so that I could get two analog values to control the frequency(pitch) and amplitude(volume).
 
Arduino:
 
int potPin1 = 0;    // set up variables
int potPin2 = 4;
int val1 = 0;
int val2 = 0;
void setup() {
  Serial.begin(9600);    // begin serial communication at 9600 bps
}
void loop() {
  val1 = analogRead(potPin1);    // read potPin value and store in val1
  val1 = map(val1, 0, 1023, 0, 4978);    // adjust values
  val2 = analogRead(potPin2);
  val2 = map(val2, 0, 1023, 0, 4978);
  Serial.print(val1, DEC);      // print values and separate with a comma
  Serial.print(',');
  Serial.println(val2, DEC);
}
 
Processing:
 
import processing.serial.*;    //  import libraries
import ddf.minim.*;
import ddf.minim.signals.*;
Minim minim;          // set up variables
AudioOutput out;
SineWave sine;
Serial myPort;
float freq;
float amp;
void setup() {
  size(400, 220, P2D);    // sets  window size
  minim = new Minim(this);
  // get a line out from Minim with default bufferSize, sample rate, and bit depth
  out = minim.getLineOut(Minim.STEREO);
  // create a sine wave oscillator, set to value of freq, value of amp, sample rate from line out
  sine = new SineWave(freq, amp, out.sampleRate());
  // set the portamento speed on the oscillator to 200 milliseconds
  sine.portamento(200);
  // add the oscillator to the line out
  out.addSignal(sine);
  // declares myPort and begins serial communication at 9600 bps
  myPort = new Serial(this, Serial.list()[0], 9600);
  // store values from myPort in a buffer until value is reached
  myPort.bufferUntil('\n');
 
}
void draw() {
  background(0);    // sets background color
  stroke(255);      // sets stroke color
  // draw the waveforms
  for(int i = 0; i < out.bufferSize() - 1; i++)
  {
    float x1 = map(i, 0, out.bufferSize(), 0, width);
    float x2 = map(i+1, 0, out.bufferSize(), 0, width);
    line(x1, 50 + out.left.get(i)*50, x2, 50 + out.left.get(i+1)*50);
    line(x1, 150 + out.right.get(i)*50, x2, 150 + out.right.get(i+1)*50);
  }
}
void serialEvent (Serial myPort) {
  // read string and store it in a buffer until value is reached
  String myString = myPort.readStringUntil('\n');
  // if there is something in myString
  if(myString != null) {
    // split it at the comma
    myString = trim(myString);
    int sensors[] = int(split(myString, ','));
    for (int sensorNum = 0; sensorNum < sensors.length; sensorNum++) {
      // print the sensor values
      print("Sensor " + sensorNum + ": " + sensors[sensorNum] + "\t");
    }
    println();
    if(sensors.length > 1) {
      // adjust the value of sensors[0] and set as freq
      float freq = map(sensors[0], 0, 4978, 1500, 60);
      // set the frequency to the new values
      sine.setFreq(freq);
      // adjust the value of sensors[1] and set as amp
      float amp = map(sensors[1], 0, 4978, -1, 1);
      // set the amplitude to the new values
      sine.setAmp(amp);
     
    }
  }
  sine.setPan(0);    // set speaker balance to even
}
void stop() {
  out.close();
  minim.stop();
  super.stop();
}
 
A Fritzing picture of the circuit is attached.
ċ
9.1.fz
(145k)
Unknown user,
Jul 15, 2010, 11:32 AM
Comments