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 <ssmal...@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 - Associate Professor - University of Alberta  [ - ]
> 
> _______________________________________________
> chuck-users mailing list
> chuck-users@lists.cs.princeton.edu
> 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

Reply via email to