Skip to content

Instantly share code, notes, and snippets.

@remisarrailh
Created June 22, 2019 07:48
Show Gist options
  • Save remisarrailh/f4efffdfd0bb884c9c73d72dc77a66d3 to your computer and use it in GitHub Desktop.
Save remisarrailh/f4efffdfd0bb884c9c73d72dc77a66d3 to your computer and use it in GitHub Desktop.
artnet_ollieollie2.pde
/*
* Pixel to ArtNet
*
*/
import java.awt.*;
import processing.serial.*;
import ch.bildspur.artnet.*; //Library Artnet
import com.dhchoi.CountdownTimer; //Library CountDownTimer
import com.dhchoi.CountdownTimerService;
//Hex color of life pixel when full
String lifeColor = "FF4EDB1C";
String deadColor = "FF180C21";
//Trick bar 1 pixel screenshot
PImage bar_skate;
boolean done_blue = true;
boolean done_red = true;
boolean done_green = true;
boolean direction = false;
int anim = 0;
boolean start_anim = false;
boolean naze_combo = false;
boolean moyen_combo = false;
boolean ok_combo = false;
boolean parfait_combo = false;
boolean genial_combo = false;
ArtNetClient artnet;
byte[] dmxCurrentData = new byte[512];
byte[] dmxNewData = new byte[512];
byte red = 0;
byte green = 0;
byte blue = 0;
int nbleds = 13;
CountdownTimer ledsTimer;
void setup() {
println("OpenLight -----------");
size(200, 300);
surface.setResizable(true);
surface.setTitle("PixelArtnet");
fill(204, 102, 0);
rect(0, 0, 200, 300);
populateArray();
artnet = new ArtNetClient(null);
artnet.start();
red = 127;
ledsTimer = CountdownTimerService.getNewCountdownTimer(this).configure(1, 2000).start();
}
void draw() {
analysePixels();
}
//This is where the pixels are analyse, as much pixel as you want
void analysePixels() {
try {
//Screenshot
bar_skate = new PImage(new Robot().createScreenCapture(new Rectangle(1164, 1034, 1, 1)));
color color_bar_skate = bar_skate.get(0, 0);
String hex_color_bar_skate = hex(color_bar_skate);
if(!hex_color_bar_skate.equals("FF130000")){
println(hex_color_bar_skate);
}
fill(color_bar_skate);
rect(0, 0, 200, 300);
if (!start_anim && hex_color_bar_skate.equals("FFFF0000")) {
println("Show Red (Naze)");
red = 127;
blue = 0;
green = 0;
ledsTimer = CountdownTimerService.getNewCountdownTimer(this).configure(1, 1000).start();
start_anim = true;
}
if (!start_anim && hex_color_bar_skate.equals("FF00000")) {
println("Show Yellow (Moyen)");
red = 127;
green = 127;
blue = 0;
ledsTimer = CountdownTimerService.getNewCountdownTimer(this).configure(1, 1000).start();
start_anim = true;
}
if (!start_anim && hex_color_bar_skate.equals("FFD92097")) {
println("Show Purple (OK)");
red = 127;
green = 0;
blue = 127;
ledsTimer = CountdownTimerService.getNewCountdownTimer(this).configure(1, 1000).start();
start_anim = true;
}
if (!start_anim && hex_color_bar_skate.equals("FF00DF52")) {
println("Show Green (Parfait)");
green = 127;
red = 0;
blue = 0;
ledsTimer = CountdownTimerService.getNewCountdownTimer(this).configure(1, 1000).start();
start_anim = true;
}
if (!start_anim && hex_color_bar_skate.equals("FF26CFDE")) {
println("Show Cyan (Génial)");
red = 0;
green = 127;
blue = 127;
ledsTimer = CountdownTimerService.getNewCountdownTimer(this).configure(1, 1000).start();
start_anim = true;
}
}
catch (AWTException e) {
println("Processing Pixels ERROR -----------");
println(e);
}
}
void processStrips() {
changeColor();
for (int led = 0; led < nbleds; led = led+1) {
//Green
int led_pos = (3*led);
if (dmxNewData[led_pos] > dmxCurrentData[led_pos]) {
dmxCurrentData[led_pos] = byte(dmxCurrentData[led_pos] + 1);
done_green = false;
}
if (dmxNewData[led_pos] < dmxCurrentData[led_pos]) {
dmxCurrentData[led_pos] = byte(dmxCurrentData[led_pos] - 1);
done_green = false;
}
if (dmxNewData[led_pos] == dmxCurrentData[led_pos]) {
done_green = true;
}
//Red
led_pos = (3*led) + 1;
if (dmxNewData[led_pos] > dmxCurrentData[led_pos]) {
dmxCurrentData[led_pos] = byte(dmxCurrentData[led_pos] + 1);
done_red = false;
}
if (dmxNewData[led_pos] < dmxCurrentData[led_pos]) {
dmxCurrentData[led_pos] = byte(dmxCurrentData[led_pos] - 1);
done_red = false;
}
if (dmxNewData[led_pos] == dmxCurrentData[led_pos]) {
done_red = true;
}
//Blue
led_pos = (3*led) + 2;
if (dmxNewData[led_pos] > dmxCurrentData[led_pos]) {
dmxCurrentData[led_pos] = byte(dmxCurrentData[led_pos] + 1);
done_blue = false;
}
if (dmxNewData[led_pos] < dmxCurrentData[led_pos]) {
dmxCurrentData[led_pos] = byte(dmxCurrentData[led_pos] - 1);
done_blue = false;
}
if (dmxNewData[led_pos] == dmxCurrentData[led_pos]) {
done_blue = true;
}
}
artnet.unicastDmx("2.0.0.1", 0, 0, dmxCurrentData);
}
void changeColor() {
if (anim < 2) {
if (!direction && done_green && done_red && done_blue) {
println("Start UP");
anim = anim + 1;
println(anim);
for (int led = 0; led < nbleds; led = led+1) {
//Blue
int led_pos = (3*led);
dmxNewData[led_pos] = green;
dmxNewData[led_pos + 1] = red;
dmxNewData[led_pos + 2] = blue;
}
direction = true;
} else if (direction && done_green && done_red && done_blue) {
println("Start DOWN");
anim = anim +1;
println(anim);
for (int led = 0; led < nbleds; led = led+1) {
//Blue
int led_pos = (3*led);
dmxNewData[led_pos] = 0;
dmxNewData[led_pos + 1] = 0;
dmxNewData[led_pos + 2] = 0;
}
direction = false;
}
}
}
void populateArray() {
for (int led = 0; led < nbleds*3; led = led+1) {
//Blue
dmxCurrentData[led] = byte(0);
dmxNewData[led] = byte(0);
}
}
void onTickEvent(CountdownTimer t, long timeLeftUntilFinish) {
processStrips();
}
void onFinishEvent(CountdownTimer t) {
println("Event finish restart");
anim = 0;
start_anim = false;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment