/** A Android monome-clone by guru */ import oscP5.*; import netP5.*; int[][] state; String prefix; int lastx, lasty; OscP5 oscP5; NetAddress myRemoteLocation; void setup() { prefix = "40h"; size(1024, 768, P2D); state = new int[16][16]; for( int x = 0; x < 16; x++) { for( int y = 0; y < 16; y++) { state[x][y] = 0; } } oscP5 = new OscP5( this, 8080 ); myRemoteLocation = new NetAddress("10.0.0.30",8000); lastx = -1; lasty = -1; } void draw() { background(255); for( int x = 0; x < 16; x++) { for( int y = 0; y < 16; y++) { if ( state[x][y] == 0 ) { stroke( 0 ); noFill(); } else { noStroke(); fill(255, 0, 0 ); } rect( x * 48 + 2, y * 48 + 2, 44, 44); } } } void mousePressed() { if ( mouseX < 768 ) { int w = 768/16; int x = mouseX / w; int y = mouseY / w; fill( 255,255,0); rect( x * 48 + 2, y * 48 + 2, 44, 44); OscMessage myMessage = new OscMessage("/"+prefix+"/press"); myMessage.add(x); myMessage.add(y); myMessage.add(1); /* send the message */ oscP5.send(myMessage, myRemoteLocation); lastx = x; lasty = y; } } void mouseDragged() { if ( mouseX < 768 ) { int w = 768/16; int x = mouseX / w; int y = mouseY / w; if ( x != lastx || y != lasty ) { fill( 255,255,0); rect( x * 48 + 2, y * 48 + 2, 44, 44); OscMessage myMessage = new OscMessage("/"+prefix+"/press"); myMessage.add(x); myMessage.add(y); myMessage.add(1); /* send the message */ oscP5.send(myMessage, myRemoteLocation); lastx = x; lasty = y; } } } void mouseReleased() { if ( mouseX < 768 ) { int w = 768/16; int x = mouseX / w; int y = mouseY / w; OscMessage myMessage = new OscMessage("/"+prefix+"/press"); myMessage.add(x); myMessage.add(y); myMessage.add(0); oscP5.send(myMessage, myRemoteLocation); lastx = -1; lasty = -1; } } void oscEvent(OscMessage theOscMessage) { /* print the address pattern and the typetag of the received OscMessage */ if ( theOscMessage.checkAddrPattern( "/"+prefix+"/clear" ) == true) { for( int x = 0; x < 16; x++) { for( int y = 0; y < 16; y++) { state[x][y] = 0; } } } else if ( theOscMessage.checkAddrPattern( "/"+prefix+"/led_col" ) == true) { int col = theOscMessage.get(0).intValue(); int v = theOscMessage.get(1).intValue(); for( int x = 0; x < 16; x++) { state[x][col] = ( v & 1 << x ) >> x; } } else if ( theOscMessage.checkAddrPattern( "/"+prefix+"/led_row" ) == true) { int row = theOscMessage.get(0).intValue(); int v = theOscMessage.get(1).intValue(); for( int y = 0; y < 16; y++) { state[row][y] = ( v & 1 << y ) >> y; } } else if ( theOscMessage.checkAddrPattern( "/"+prefix+"/led" ) == true) { int x = theOscMessage.get(0).intValue(); int y = theOscMessage.get(1).intValue(); int v = theOscMessage.get(2).intValue(); state[x][y] = v; } else if ( theOscMessage.checkAddrPattern( "/"+prefix+"/frame" ) == true) { int count = 0; if (theOscMessage.typetag().equals( "iiiiiiii" )) count = 8; if (theOscMessage.typetag().equals( "iiiiiiiiiiiiiiii" )) count = 16 ; for( int y = 0; y < count; y ++ ) { int v = theOscMessage.get(y).intValue(); for( int x = 0; x < 16; x++) { state[x][y] = ( v & 1 << x ) >> x; } } } else if ( theOscMessage.checkAddrPattern( "/sys/prefix" ) == true) { prefix = theOscMessage.get(0).stringValue(); } else { print("### received an osc message."); print(" addrpattern: "+theOscMessage.addrPattern()); println(" typetag: "+theOscMessage.typetag()); } }