chuck serial arduino weirdness
Dear chuckians, Not sure how many of you have messed with the serial objects - but I’m having a bit of a head-scratcher and wondered if anyone had any ideas about this. I built a little box with one knob and one switch - which I’m planning to use as a master volume and mute switch for a multichannel audio installation that is running in Chuck. The Arduino code is really basic: — const int SwitchPin = 12; const int VolPin = 0; void setup() { //turn on serial communication Serial.begin(57600); //set switch pin and turn on pullup resistor pinMode (SwitchPin, INPUT); digitalWrite (SwitchPin, HIGH); } void loop() { Serial.print(digitalRead(SwitchPin)); Serial.print(' '); Serial.println(analogRead(VolPin)); delay(50); } — OK - so I first built a little Max patch to test it, which works flawlessly as far as I can tell. I then wrote a little chuck script, based partially on one of Spencer’s examples. It simply grabs the data and prints it to the console. It works great for awhile, but after a few minutes, it always crashes with an array-out-of-bounds exception: NullPointerException: (array access) on line[35] I’m grabbing two ints, and looping through and printing them out. Why is the array size suddenly getting mucked up here? It’s intermittent, and sometimes doesn’t happen for several minutes, but always results in a crash eventually. Any ideas?? (chuck code below) — SerialIO.list() @=> string list[]; SerialIO cereal; //the name of my arduino box's serial port "usbserial-12DP0657" => string port; //number of serial device -1=>int device; //loop through any ports and find the one with the right name for(0=>int i; i < list.cap(); i++) { //check for correct port name if (list[i].find(port) != -1) { //and assign the device number i => device; } else -1 => device; } //open the serial port cereal.open(device, SerialIO.B57600, SerialIO.ASCII); //loop through and grab the serial port data while(true) { cereal.onInts(2) => now; cereal.getInts() @=> int ints[]; //print out to console for(0=>int i; i < ints.cap(); i++) //<- this is where the problem seems to happen { chout <= ints[i] <= " "; } chout <= IO.newline(); } —ss [ - ] Scott Smallwood http://www.scott-smallwood.com/ - Associate Professor - University of Alberta [ - ]
Hey Scott, Looks solid, but try checking if the ints[] array is null before the loop, or just put a null check in the loop condition. It shouldn’t normally be null but wouldn’t be surprised if it is occasionally. Spencer
On Apr 18, 2019, at 8:15 PM, Scott Smallwood
wrote: Dear chuckians,
Not sure how many of you have messed with the serial objects - but I’m having a bit of a head-scratcher and wondered if anyone had any ideas about this.
I built a little box with one knob and one switch - which I’m planning to use as a master volume and mute switch for a multichannel audio installation that is running in Chuck.
The Arduino code is really basic:
— const int SwitchPin = 12; const int VolPin = 0;
void setup() { //turn on serial communication Serial.begin(57600);
//set switch pin and turn on pullup resistor pinMode (SwitchPin, INPUT); digitalWrite (SwitchPin, HIGH); }
void loop() {
Serial.print(digitalRead(SwitchPin)); Serial.print(' '); Serial.println(analogRead(VolPin)); delay(50);
} —
OK - so I first built a little Max patch to test it, which works flawlessly as far as I can tell.
I then wrote a little chuck script, based partially on one of Spencer’s examples. It simply grabs the data and prints it to the console.
It works great for awhile, but after a few minutes, it always crashes with an array-out-of-bounds exception:
NullPointerException: (array access) on line[35]
I’m grabbing two ints, and looping through and printing them out. Why is the array size suddenly getting mucked up here? It’s intermittent, and sometimes doesn’t happen for several minutes, but always results in a crash eventually. Any ideas?? (chuck code below)
—
SerialIO.list() @=> string list[]; SerialIO cereal;
//the name of my arduino box's serial port "usbserial-12DP0657" => string port;
//number of serial device -1=>int device;
//loop through any ports and find the one with the right name for(0=>int i; i < list.cap(); i++) {
//check for correct port name if (list[i].find(port) != -1) { //and assign the device number i => device; } else -1 => device; }
//open the serial port cereal.open(device, SerialIO.B57600, SerialIO.ASCII);
//loop through and grab the serial port data while(true) { cereal.onInts(2) => now; cereal.getInts() @=> int ints[];
//print out to console for(0=>int i; i < ints.cap(); i++) //<- this is where the problem seems to happen { chout <= ints[i] <= " "; } chout <= IO.newline(); }
—ss
[ - ] Scott Smallwood - Associate Professor - University of Alberta [ - ]
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
Yeah, that’s it. Cool - thanks Spencer! —ss [ - ] Scott Smallwood http://www.scott-smallwood.com/ - Associate Professor - University of Alberta [ - ]
On Apr 18, 2019, at 11:03 PM, Spencer Salazar
wrote: Hey Scott,
Looks solid, but try checking if the ints[] array is null before the loop, or just put a null check in the loop condition. It shouldn’t normally be null but wouldn’t be surprised if it is occasionally.
Spencer
On Apr 18, 2019, at 8:15 PM, Scott Smallwood
mailto:ssmallwo@ualberta.ca> wrote: Dear chuckians,
Not sure how many of you have messed with the serial objects - but I’m having a bit of a head-scratcher and wondered if anyone had any ideas about this.
I built a little box with one knob and one switch - which I’m planning to use as a master volume and mute switch for a multichannel audio installation that is running in Chuck.
The Arduino code is really basic:
— const int SwitchPin = 12; const int VolPin = 0;
void setup() { //turn on serial communication Serial.begin(57600);
//set switch pin and turn on pullup resistor pinMode (SwitchPin, INPUT); digitalWrite (SwitchPin, HIGH); }
void loop() {
Serial.print(digitalRead(SwitchPin)); Serial.print(' '); Serial.println(analogRead(VolPin)); delay(50);
} —
OK - so I first built a little Max patch to test it, which works flawlessly as far as I can tell.
I then wrote a little chuck script, based partially on one of Spencer’s examples. It simply grabs the data and prints it to the console.
It works great for awhile, but after a few minutes, it always crashes with an array-out-of-bounds exception:
NullPointerException: (array access) on line[35]
I’m grabbing two ints, and looping through and printing them out. Why is the array size suddenly getting mucked up here? It’s intermittent, and sometimes doesn’t happen for several minutes, but always results in a crash eventually. Any ideas?? (chuck code below)
—
SerialIO.list() @=> string list[]; SerialIO cereal;
//the name of my arduino box's serial port "usbserial-12DP0657" => string port;
//number of serial device -1=>int device;
//loop through any ports and find the one with the right name for(0=>int i; i < list.cap(); i++) {
//check for correct port name if (list[i].find(port) != -1) { //and assign the device number i => device; } else -1 => device; }
//open the serial port cereal.open(device, SerialIO.B57600, SerialIO.ASCII);
//loop through and grab the serial port data while(true) { cereal.onInts(2) => now; cereal.getInts() @=> int ints[];
//print out to console for(0=>int i; i < ints.cap(); i++) //<- this is where the problem seems to happen { chout <= ints[i] <= " "; } chout <= IO.newline(); }
—ss
[ - ] Scott Smallwood http://www.scott-smallwood.com/ - Associate Professor - University of Alberta [ - ]
_______________________________________________ chuck-users mailing list chuck-users@lists.cs.princeton.edu mailto:chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
chuck-users mailing list chuck-users@lists.cs.princeton.edu https://lists.cs.princeton.edu/mailman/listinfo/chuck-users
participants (2)
-
Scott Smallwood
-
Spencer Salazar