# This code works in my friend's pc but I get error

**URL:** <https://discourse.processing.org/t/this-code-works-in-my-friends-pc-but-i-get-error/13859>\
**Category:** Electronics (Arduino, etc.)\
**Created:** [September 7, 2019, 5:33am UTC](https://discourse.processing.org/t/this-code-works-in-my-friends-pc-but-i-get-error/13859 "2019-09-07T05:33:05Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![sp\_sarvesh](https://avatars.discourse-cdn.com/v4/letter/s/71c47a/32.png) [@sp\_sarvesh](https://discourse.processing.org/u/sp_sarvesh)\
**Post date:** [September 7, 2019, 5:33am UTC](https://discourse.processing.org/t/this-code-works-in-my-friends-pc-but-i-get-error/13859/1 "2019-09-07T05:33:05Z")

</div>

I get ArrayOutOf BoundsException: 0 on line 12 when I run this code, and then java sm has stopped responding when I try to close the small window. Can anyone please help me with this? This same code works for my friend. We both changed the resolution from 1368x928 to 1920x1080.  
P.S. I’m not a coder and this is not my code.

```auto
import java.awt.Robot; //java library that lets us take screenshots
import java.awt.AWTException;
import java.awt.event.InputEvent;
import java.awt.image.BufferedImage;
import java.awt.Rectangle;
import java.awt.Dimension;
import processing.serial.*; //library for serial communication
Serial port; //creates object "port" of serial class
Robot robby; //creates object "robby" of robot class
void setup()
{
  port = new Serial(this, Serial.list()[0],9600); //set baud rate
  size(100, 100); //window size (doesn't matter)
  try //standard Robot class error check
  {
    robby = new Robot();
  }
  catch (AWTException e)
  {
    println("Robot class not supported by your system!");
    exit();
  }
}
void draw()
{
  int pixel; //ARGB variable with 32 int bytes where
  //sets of 8 bytes are: Alpha, Red, Green, Blue
  float r=0;
  float g=0;
  float b=0;
  //get screenshot into object "screenshot" of class BufferedImage
  BufferedImage screenshot = robby.createScreenCapture(new Rectangle(new Dimension(1368,928)));
  //1368*928 is the screen resolution
  int i=0;
  int j=0;
  //1368*928
  //I skip every alternate pixel making my program 4 times faster
  for(i =0;i<1368; i=i+2){
    for(j=0; j<928;j=j+2){
      pixel = screenshot.getRGB(i,j); //the ARGB integer has the colors of pixel (i,j)
      r = r+(int)(255&(pixel>>16)); //add up reds
      g = g+(int)(255&(pixel>>8)); //add up greens
      b = b+(int)(255&(pixel)); //add up blues
    }
  }
  r=r/(684 *464); //average red (remember that I skipped ever alternate pixel)
  g=g/(684 *464); //average green
  b=b/(684 *464); //average blue
  port.write(0xff); //write marker (0xff) for synchronization
  port.write((byte)( r)); //write red value
  port.write((byte)(g)); //write green value
  port.write((byte)(b)); //write blue value
  delay(10); //delay for safety
  background(r,g,b); //make window background average color
}

```

---

<div class="post-metadata">

**Author:** ![kll](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/kll/32/964_2.png) [@kll](https://discourse.processing.org/u/kll)\
**Post date:** [September 7, 2019, 7:31am UTC](https://discourse.processing.org/t/this-code-works-in-my-friends-pc-but-i-get-error/13859/2 "2019-09-07T07:31:55Z")

</div>

-a- even it is not your code and you not understand it you might have a idea what it is for?

- 
  - what is connected to serial port

- 
  - why you take screenshots of a PC screen and what you calculate and send?

-b- ports must exist and be free

> **[Serial / Libraries](https://processing.org/reference/libraries/serial/Serial.html)**
>
> Class for sending and receiving data using the serial communication protocol.

use

```auto
  printArray(Serial.list()); // show all ports

```

-c- posting code here please use the

> \</\> Preformatted text

from the post edit window menu

-d- at beginning use in setup()

```auto
frameRate(1); 

```

to control FPS == lines to port ??  
later can optimize or disable.

-e- a little cleanup of your code

```auto
import java.awt.Robot; //java library that lets us take screenshots 
                                     // https://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html
import java.awt.AWTException;
import java.awt.event.InputEvent;
import java.awt.image.BufferedImage;
import java.awt.Rectangle;
import java.awt.Dimension;

import processing.serial.*; //library for serial communication

Serial port; //creates object “port” of serial class
Robot robby; //creates object “robby” of robot class

void setup() {
  size(100, 100); //window size (doesn’t matter)
  printArray(Serial.list()); // show all ports
  port = new Serial(this, Serial.list()[0], 9600); //set baud rate
  try { //standard Robot class error check
    robby = new Robot();
  }
  catch (AWTException e) {
    println("Robot class not supported by your system!");
    exit();
  }
  frameRate(1); // start testing with one line per second send to ?? 
                                      // disable for max ? 60 FPS ( and lines )
}

int pixel; //ARGB variable with 32 int bytes where //sets of 8 bytes are: Alpha, Red, Green, Blue
float r=0, g=0, b=0;
BufferedImage screenshot;
int i=0, j=0;
int w = 1368, h = 928;
int d = 2, n=w*h/(d*d); // w * h = 1269504 n 317376
// https://discourse.processing.org/t/this-code-works-in-my-friends-pc-but-i-get-error/13859
// We both changed the resolution from 1368x928 to 1920x1080.

void draw() {
  background(r, g, b); //make window background average color
  BufferedImage screenshot = robby.createScreenCapture(new Rectangle(new Dimension(w, h))); //1368*928
  for (i =0; i<w; i=i+d) { //I skip every alternate pixel making my program 4 times faster
    for (j=0; j<h; j=j+d) {
      pixel = screenshot.getRGB(i, j);//the ARGB integer has the colors of pixel (i,j)
      r = r+(int)(255&(pixel>>16)); //add up reds
      g = g+(int)(255&(pixel>>8)); //add up greens
      b = b+(int)(255&(pixel)); //add up blues
    }
  }
  r=r/(n); //average red (remember that I skipped ever alternate pixel) 317376
  g=g/(n); //average green
  b=b/(n); //average blue
  port.write(0xff); //write marker (0xff) for synchronization
  port.write((byte)(r)); //write red value
  port.write((byte)(g)); //write green value
  port.write((byte)(b)); //write blue value
  delay(10); //delay for safety
}

```

p.s. your code runs here ( win 10 / processing 3.5.3 / nothing serial connected / original screen size setting )

* * *

there are tools so you can readback your screen size and use in the program automatically:

```auto
import java.awt.Robot; //java library that lets us take screenshots 
// https://docs.oracle.com/javase/7/docs/api/java/awt/Robot.html
import java.awt.AWTException;
import java.awt.event.InputEvent;
import java.awt.image.BufferedImage;
import java.awt.Rectangle;
import java.awt.Dimension;
                                     // kll added for screen shot file and auto screen size adjust
import java.awt.Toolkit;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;

import processing.serial.*; //library for serial communication

Serial port; //creates object “port” of serial class
Robot robby; //creates object “robby” of robot class
Dimension myscreen;
Rectangle screenRect;
// https://discourse.processing.org/t/this-code-works-in-my-friends-pc-but-i-get-error/13859
// We both changed the resolution from 1368x928 to 1920x1080.
int w = 1368, h = 928;
int d = 2, n=w*h/(d*d); // w * h = 1269504 n 317376

int pixelc; //ARGB variable with 32 int bytes where //sets of 8 bytes are: Alpha, Red, Green, Blue
float r=0, g=0, b=0;
BufferedImage screenshot;
int i=0, j=0;

void setup() {
  size(300, 100); //window size (doesn’t matter)
  printArray(Serial.list()); // show all ports
  port = new Serial(this, Serial.list()[0], 9600); //set baud rate
  try { //standard Robot class error check
    robby = new Robot();
  }
  catch (AWTException e) {
    println("Robot class not supported by your system!");
    exit();
  }
  //frameRate(1); // start testing with one line per second send to ?? // disable for max ? 60 FPS ( and lines )
  myscreen = Toolkit.getDefaultToolkit().getScreenSize();
  screenRect = new Rectangle(myscreen);
  w = myscreen.width;
  h = myscreen.height;
  n = w*h/(d*d);
  println(w +"*"+ h+" w*h "+w*h+" n "+n);
}

void draw() {
  background(r, g, b); //make window background average color
  surface.setTitle(nf(frameRate,0,1)+"FPS");
  screenshot = robby.createScreenCapture(new Rectangle(new Dimension(w, h))); //1368*928
  for (i =0; i<w; i=i+d) { //I skip every alternate pixel making my program 4 times faster
    for (j=0; j<h; j=j+d) {
      pixelc = screenshot.getRGB(i, j);//the ARGB integer has the colors of pixel (i,j)
      r = r+(int)(255&(pixelc>>16)); //add up reds
      g = g+(int)(255&(pixelc>>8)); //add up greens
      b = b+(int)(255&(pixelc)); //add up blues
    }
  }
  r=r/(n); //average red (remember that I skipped ever alternate pixel) 317376
  g=g/(n); //average green
  b=b/(n); //average blue
  port.write(0xff); //write marker (0xff) for synchronization
  port.write((byte)(r)); //write red value
  port.write((byte)(g)); //write green value
  port.write((byte)(b)); //write blue value
  delay(10); //delay for safety
}

void keyPressed() {
  if ( key == 's' ) {
    try {
      ImageIO.write(screenshot, "png", new File(sketchPath("")+'/'+"data/robotshot.png"));
      println("saved");
    } 
    catch ( IOException ex) {  
      println(ex);
    }
  }
}

```

---

<div class="post-metadata">

**Author:** ![Chrisir](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/chrisir/32/45_2.png) [@Chrisir](https://discourse.processing.org/u/Chrisir)\
**Post date:** [September 7, 2019, 7:48am UTC](https://discourse.processing.org/t/this-code-works-in-my-friends-pc-but-i-get-error/13859/3 "2019-09-07T07:48:43Z")

</div>

Did you install the robot library?

Check the port the Arduino is on

---

<div class="post-metadata">

**Author:** ![sp\_sarvesh](https://avatars.discourse-cdn.com/v4/letter/s/71c47a/32.png) [@sp\_sarvesh](https://discourse.processing.org/u/sp_sarvesh)\
**Post date:** [September 7, 2019, 6:06pm UTC](https://discourse.processing.org/t/this-code-works-in-my-friends-pc-but-i-get-error/13859/4 "2019-09-07T18:06:51Z")

</div>

The code is used for basically getting average colour of the screen and send it to the arduino. I’m trying to make ambilight with this setup and this code was given in a tutorial. I’m not sure if it’s ok to link external sites here or I would’ve linked it.

---

<div class="post-metadata">

**Author:** ![sp\_sarvesh](https://avatars.discourse-cdn.com/v4/letter/s/71c47a/32.png) [@sp\_sarvesh](https://discourse.processing.org/u/sp_sarvesh)\
**Post date:** [September 7, 2019, 6:08pm UTC](https://discourse.processing.org/t/this-code-works-in-my-friends-pc-but-i-get-error/13859/5 "2019-09-07T18:08:39Z")

</div>

The problem is, this code is supposed to work weather arduino is connected or not, atleast the avg screen colour display part. In my case it simply doesnt work.

---

<div class="post-metadata">

**Author:** ![kll](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/kll/32/964_2.png) [@kll](https://discourse.processing.org/u/kll)\
**Post date:** [September 7, 2019, 10:49pm UTC](https://discourse.processing.org/t/this-code-works-in-my-friends-pc-but-i-get-error/13859/6 "2019-09-07T22:49:01Z")

</div>

> [@sp\_sarvesh](#):
>
> getting average colour of the screen and send it to the arduino.

-a- so on my Win 10 PC there is a

```auto
[0] "COM1"

```

without any device connected  
and your code starts without error  
if NOT you need a Arduino connected.

> [@sp\_sarvesh](#):
>
> this code is supposed to work weather arduino is connected or not

so you learn how to disable ( make switchable ) the code part  
what causes that error

-b- “ambilight with Arduino”  
would have been a good name for your topic,  
and might have attracted someone who did that already.

-c- But if the error has to do with the PC screen size,  
did you try my latest code version with auto adjust?

-d- if you get (original) code from a other source ( like tutorial and blog )  
a link would be good, actually it should be inside your code  
even if it is not by authors copyright required, just for respect…

---

<div class="post-metadata">

**Author:** ![Chrisir](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/chrisir/32/45_2.png) [@Chrisir](https://discourse.processing.org/u/Chrisir)\
**Post date:** [September 7, 2019, 11:09pm UTC](https://discourse.processing.org/t/this-code-works-in-my-friends-pc-but-i-get-error/13859/7 "2019-09-07T23:09:27Z")

</div>

Did you install the robot library?

---

<div class="post-metadata">

**Author:** ![kll](https://yyz2.discourse-cdn.com/flex036/user_avatar/discourse.processing.org/kll/32/964_2.png) [@kll](https://discourse.processing.org/u/kll)\
**Post date:** [September 8, 2019, 12:34am UTC](https://discourse.processing.org/t/this-code-works-in-my-friends-pc-but-i-get-error/13859/8 "2019-09-08T00:34:00Z")

</div>

> [@Chrisir](#):
>
> robot library

```auto
import java.awt.Robot; //java library that lets us take screenshots 

```

does not need any add install here ( win 10 / processing 3.5.3 )  
please try on your system.
