import java.awt.*; import java.awt.image.*; import processing.serial.*; /* // using 12 RGB LEDs static final int led_num_x = 4; static final int led_num_y = 4; static final int leds[][] = new int[][] { {1,3}, {0,3}, // Bottom edge, left half {0,2}, {0,1}, // Left edge {0,0}, {1,0}, {2,0}, {3,0}, // Top edge {3,1}, {3,2}, // Right edge {3,3}, {2,3}, // Bottom edge, right half }; */ // using 25 RGB LEDs static final int led_num_x = 10; static final int led_num_y = 6; static final int leds[][] = new int[][] { {2,5}, {1,5}, {0,5}, // Bottom edge, left half {0,4}, {0,3}, {0,2}, {0,1}, // Left edge {0,0}, {1,0}, {2,0}, {3,0}, {4,0}, {5,0}, {6,0}, {7,0}, {8,0}, {9,0}, // Top edge {9,1}, {9,2}, {9,3}, {9,4}, // Right edge {9,5}, {8,5}, {7,5}, {6,5} // Bottom edge, right half }; static final short fade = 70; static final int minBrightness = 120; // Preview windows int window_width; int window_height; int preview_pixel_width; int preview_pixel_height; int[][] pixelOffset = new int[leds.length][256]; // RGB values for each LED short[][] ledColor = new short[leds.length][3], prevColor = new short[leds.length][3]; byte[][] gamma = new byte[256][3]; byte[] serialData = new byte[ leds.length * 3 + 2]; int data_index = 0; //creates object from java library that lets us take screenshots Robot bot; // bounds area for screen capture Rectangle dispBounds; // Monitor Screen information GraphicsEnvironment ge; GraphicsConfiguration[] gc; GraphicsDevice[] gd; Serial port; void setup(){ int[] x = new int[16]; int[] y = new int[16]; // ge - Grasphics Environment ge = GraphicsEnvironment.getLocalGraphicsEnvironment(); // gd - Grasphics Device gd = ge.getScreenDevices(); DisplayMode mode = gd[0].getDisplayMode(); dispBounds = new Rectangle(0, 0, mode.getWidth(), mode.getHeight()); // Preview windows window_width = mode.getWidth()/5; window_height = mode.getHeight()/5; preview_pixel_width = window_width/led_num_x; preview_pixel_height = window_height/led_num_y; // Preview window size size(window_width, window_height); //standard Robot class error check try { bot = new Robot(gd[0]); } catch (AWTException e) { println("Robot class not supported by your system!"); exit(); } float range, step, start; for(int i=0; i> 24) & 0xff) * (255 - fade) + prevColor[i][0] * fade) >> 8); ledColor[i][1] = (short)(((( g >> 16) & 0xff) * (255 - fade) + prevColor[i][1] * fade) >> 8); ledColor[i][2] = (short)(((( b >> 8) & 0xff) * (255 - fade) + prevColor[i][2] * fade) >> 8); serialData[data_index++] = (byte)ledColor[i][0]; serialData[data_index++] = (byte)ledColor[i][1]; serialData[data_index++] = (byte)ledColor[i][2]; float preview_pixel_left = (float)dispBounds.width /5 / led_num_x * leds[i][0] ; float preview_pixel_top = (float)dispBounds.height /5 / led_num_y * leds[i][1] ; color rgb = color(ledColor[i][0], ledColor[i][1], ledColor[i][2]); fill(rgb); rect(preview_pixel_left, preview_pixel_top, preview_pixel_width, preview_pixel_height); } if(port != null) { // wait for Arduino to send data for(;;){ if(port.available() > 0){ int inByte = port.read(); if (inByte == 'y') break; } } port.write(serialData); // Issue data to Arduino } // Benchmark, how are we doing? println(frameRate); arraycopy(ledColor, 0, prevColor, 0, ledColor.length); }