Pages: [1]   Go Down
Author Topic: Troble reading Arduino in SuperCollider  (Read 461 times)
0 Members and 1 Guest are viewing this topic.
uk
Offline Offline
Newbie
*
Karma: 0
Posts: 41
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hey I am having trouble getting a consistent reading in SuperCollider from my Arduino.

Basically I have a pressure mat attatched, and it should read the numbers 1023 when no one is on it, and 0 when some one is on it.
I have connected everything perfectly, but SuperCollider seems to read the values from the Arduino smoothly for a few seconds and then pauses for a few minutes and then spits all the values it missed out at once.

I would really appreciate anyone's help as this has been bugging me for months.
[size=20]
SuperCollider Coding:[/size]


s.boot; //boot server

( //one time evaluation!! please....
p = Routine(
{
 "recordings/Diss/Coding/01SynthDef.rtf".loadPaths;
 1.wait;
  "recordings/Diss/Coding/02ReadBuf.rtf".loadPaths;
 1.wait;
 "recordings/Diss/Coding/03Buffers.rtf".loadPaths;
 4.wait;
 "recordings/Diss/Coding/04StructureOfEnvironments.rtf".loadPaths;
 4.wait;
 "recordings/Diss/Coding/05Environments.rtf".loadPaths;
 1.wait;
 "recordings/Diss/Coding/06Transition.rtf".loadPaths;
 1.wait;
 "recordings/Diss/Coding/05Environments.rtf".loadPaths;
 });
p.reset.play;      
)

//wait for 20 seconds

( //evaluate composition
c =[~environment01, ~environment02,  ~environment03,                         
                        ~environment04, ~environment05, ~environment06,                   
                        ~environment07, ~environment08, ~environment09,
                        ~environment10, ~environment11].choose;
)

p = ArduinoSMS("/dev/tty.usbserial-A4001nK8", 115200);
p.action = { |... msg| ~a = msg[1].postln; };


(

fork {
      10000.do {
            p.send($r, $a);
            1.wait;
      }
};

~rout1 = Routine ({inf.do {if (~a<10, {"start the sound".postln; c.play;~rout2.reset.play; nil.alwaysYield;}); 0.5.wait;}});


~rout2 = Routine ({inf.do {if (~a>10, {"stop the sound".postln; SystemClock.clear;s.freeAll; ~rout1.reset.play; nil.alwaysYield;} ); 0.5.wait;}});


~rout1.reset.play;
)
p.close; //to close Arduino coding


[size=20]Arduino Coding:
[/size]

 /*  
 *  Arduino2Max
 *  Send pin values from Arduino to MAX/MSP
 *  
 *  Arduino2Max.pde
 *  ------------  
 *  Latest update: September 2007
 *  ------------
 *  Copyleft: use as you like
 *  by djmatic
 *  Based on a sketch and patch by Thomas Ouellet Fredericks  tof.danslchamp.org
 *  
 *
 *
 * Don't worry about the LED (which you can connect to digital 13 if you want) as it doesn't contribute anything new.
 * Attach a potentiometer to 5v and Ground (two outer connections), and the sensor (central connection) to Analogue in 5.
 *
 * In fact, the code below reads ALL the analogue pins, so you can use any...
 */


      int x = 0;                              // a place to hold pin values
      int led1Pin = 12;               // LED #1 is connected to pin 12
      int led2Pin[] = { 3, 4 };                // LED is connected to pin 12
      int timer = 55;                   // The higher the number, the slower the timing.
      int num_pins = 2;                  
      int switchPin1 = 1;
      int switchPin2 = 2;              // switch is connected to pin 2
      int val1;                    // variable for reading the pin status
      int val2;

      void setup() {
        Serial.begin(115200);
                int i;
for (i = 0; i < num_pins; i++)   // the array elements are numbered from 0 to num_pins - 1
                pinMode(led2Pin, OUTPUT);      // set each pin as an output
                pinMode(led1Pin, OUTPUT);     // Set the LED #1 pin as output
                pinMode(switchPin1, INPUT);    // Set the switch pin as input
                pinMode(switchPin2, INPUT);
     }




void loop()
 
{
  val1 = analogRead(switchPin1);
                if (val1 == HIGH) {               // check if the button is pressed
          digitalWrite(led1Pin, HIGH);  
          delay(4000);
          digitalWrite(led1Pin, LOW);    // turn LED #1 of
          delay(90000);  
      }
  val2 = digitalRead(switchPin2);
                if (val2 == LOW) {               // check if the button is pressed
          digitalWrite(led1Pin, HIGH);  
          delay(800);
          digitalWrite(led1Pin, LOW);    // turn LED #1 of
          
        }
      


   int i;

  for (i = 0; i < num_pins; i++) { // loop through each pin...
    digitalWrite(led2Pin, HIGH);   // turning it on,
    delay(timer);                  // pausing,
    digitalWrite(led2Pin, LOW);    // and turning it off.
  }
  for (i = num_pins - 1; i >= 0; i--) {
    digitalWrite(led2Pin, HIGH);
    delay(timer);
    digitalWrite(led2Pin, LOW);
  }


if (Serial.available() > 0){         // Check serial buffer for characters
        
    if (Serial.read() == 'r') {       // If an 'r' is received then read the pins
    
for (int pin= 0; pin<=5; pin++){      // Read and send analog pins 0-5
    x = analogRead(pin);
    sendValue (x);
    }

for (int pin= 2; pin<=13; pin++){     // Read and send digital pins 2-13
    x = digitalRead(pin);
    sendValue (x);
    }
  
    Serial.println();                 // Send a carriage returnt to mark end of pin data.
    delay (5);                        // add a delay to prevent crashing/overloading of the serial port
  
    }
    

 }
}

void sendValue (int x){              // function to send the pin value followed by a "space".
 Serial.print(x);
 Serial.print(32, BYTE);
}

Logged

uk
Offline Offline
Newbie
*
Karma: 0
Posts: 41
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

can no one help??
does no one use Arduino with SuperCollider???
Logged

Pages: [1]   Go Up
Jump to: