199 lines
4.7 KiB
Plaintext
199 lines
4.7 KiB
Plaintext
|
|
||
|
import oscP5.*;
|
||
|
import netP5.*;
|
||
|
import http.requests.*;
|
||
|
import peasy.*;
|
||
|
|
||
|
PeasyCam cam;
|
||
|
OscP5 oscP5;
|
||
|
|
||
|
float x; // global variable
|
||
|
float y;
|
||
|
float z;
|
||
|
|
||
|
float rx;
|
||
|
float ry;
|
||
|
float rz;
|
||
|
|
||
|
int[] r = {3,5,8,13,21};
|
||
|
|
||
|
PShape chickenfoot;
|
||
|
//String urosC02;
|
||
|
|
||
|
JSONObject json;
|
||
|
JSONObject jsonchannel;
|
||
|
|
||
|
JSONArray totalData;
|
||
|
JSONArray nameData;
|
||
|
JSONArray chnameData;
|
||
|
|
||
|
JSONObject record;
|
||
|
|
||
|
int id;
|
||
|
String name;
|
||
|
|
||
|
String timeStamp;
|
||
|
int temp;
|
||
|
int co2;
|
||
|
float humidity;
|
||
|
int s; // seconds counter
|
||
|
|
||
|
PFont liberation;
|
||
|
PGraphics urosBuffer;
|
||
|
boolean urosDisplayed;
|
||
|
|
||
|
void setup() {
|
||
|
fullScreen(P3D);
|
||
|
//cam = new PeasyCam(this, 100);
|
||
|
//cam.setMinimumDistance(50);
|
||
|
//cam.setMaximumDistance(500);
|
||
|
|
||
|
//// CREATE GRAPHICS BUFFER FOR UROS DATA
|
||
|
urosBuffer = createGraphics(600,300);
|
||
|
chickenfoot = loadShape("chicken.obj");
|
||
|
chickenfoot.setFill(color(200, 0, 0));
|
||
|
liberation = createFont("LiberationMono-Bold.ttf", 30);
|
||
|
|
||
|
frameRate(24);
|
||
|
smooth();
|
||
|
|
||
|
// SET OSC LISTEN FROM SUPERCOLLIDER
|
||
|
OscProperties properties = new OscProperties();
|
||
|
properties.setListeningPort(47120); // osc receive port (from sc)
|
||
|
oscP5 = new OscP5(this, properties);
|
||
|
}
|
||
|
|
||
|
// SET OSC RECEIVE HANDLES (FROM SUPERCOLLIDER PATTERNS)
|
||
|
void oscEvent(OscMessage msg) {
|
||
|
if (msg.checkAddrPattern("/sc3p5")) {
|
||
|
x = msg.get(0).floatValue(); // receive floats from sc
|
||
|
}
|
||
|
if (msg.checkAddrPattern("/mother2")) {
|
||
|
y = msg.get(0).floatValue(); // receive floats from sc
|
||
|
}
|
||
|
if (msg.checkAddrPattern("/rotation")) {
|
||
|
z = msg.get(0).floatValue(); // receive floats from sc
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// UROS DATA ////////////////////////////////////////
|
||
|
|
||
|
void getUROS() {
|
||
|
// UROS DATA FROM THINGSPEAK
|
||
|
json = loadJSONObject("https://api.thingspeak.com/channels/1724587/feeds.json");
|
||
|
jsonchannel = loadJSONObject("https://api.thingspeak.com/channels/1724587channel.json");
|
||
|
|
||
|
totalData = json.getJSONArray("feeds");
|
||
|
for (int i = 0; i < totalData.size(); i++) {
|
||
|
record = totalData.getJSONObject(i);
|
||
|
id = record.getInt("entry_id");
|
||
|
timeStamp = record.getString("created_at");
|
||
|
temp = int(record.getString("field1"));
|
||
|
co2 = int(record.getString("field3"));
|
||
|
humidity = int(record.getString("field4")); }
|
||
|
}
|
||
|
|
||
|
void urosDrawData() {
|
||
|
//draw data direct to the buffer
|
||
|
//urosBuffer.scale(2);
|
||
|
|
||
|
urosBuffer.beginDraw();
|
||
|
urosBuffer.clear();
|
||
|
//size(222,111);
|
||
|
urosBuffer.background(0,0,0, 0.5);
|
||
|
urosBuffer.noFill();
|
||
|
//urosBuffer.fill(111);
|
||
|
//urosBuffer.rect(0,0, width/5, height/5);
|
||
|
urosBuffer.fill(0);
|
||
|
urosBuffer.textFont(liberation);
|
||
|
urosBuffer.text("Location: " + name, 30, 50);
|
||
|
urosBuffer.text("Time: " + timeStamp, 30, 100);
|
||
|
urosBuffer.text("Temperature (Celsius): " + temp, 30, 150);
|
||
|
urosBuffer.text("CO2 PPM: " + co2, 30, 200);
|
||
|
urosBuffer.text("Humidity (%rel): " + humidity, 30, 250);
|
||
|
urosBuffer.endDraw();
|
||
|
}
|
||
|
|
||
|
void drawTarget(float xloc, float yloc, float size, float num) {
|
||
|
float grayvalues = 255/num;
|
||
|
float steps = size/num;
|
||
|
ellipseMode(CENTER);
|
||
|
for (int i = 0; i < num; i++) {
|
||
|
fill(i*grayvalues);
|
||
|
ellipse(xloc, yloc, size - i*steps, size - i*steps);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
////////////////////////////////////////////////////////
|
||
|
|
||
|
void draw() {
|
||
|
|
||
|
if (y == 3){
|
||
|
background(0);
|
||
|
} else {
|
||
|
background(255);
|
||
|
}
|
||
|
|
||
|
// UROS
|
||
|
int s = second();
|
||
|
s = s - 60; // countdown timer
|
||
|
if (s==-1) { // every minute
|
||
|
thread("getUROS"); // threaded pull of UROS data from thingspeak
|
||
|
}
|
||
|
|
||
|
// scale(3);
|
||
|
urosDrawData(); // draw the data into a imagebuffer
|
||
|
//if(urosDisplayed) { // use boolean to draw or not
|
||
|
image(urosBuffer,0,0); // display the imageBuffer
|
||
|
// }
|
||
|
//////////////////////////////////////
|
||
|
//scale(-3);
|
||
|
|
||
|
lights();
|
||
|
|
||
|
//println("rotation: ", z);
|
||
|
//rectMode(CORNERS);
|
||
|
//drawTarget(width/6 , (height/8) *-y + random(0,10) +height*0.7 , random(60, 1200), (y%8)+2);
|
||
|
//scale(7.5);
|
||
|
//rotateX(PI*z/6);
|
||
|
|
||
|
//drawTarget(width/12 * x, height/2, 222, x);
|
||
|
//drawTarget(width*0.75, y, 120, 6);
|
||
|
//background(x, x, x);
|
||
|
//println("POST: ", x);
|
||
|
// draw rect
|
||
|
//stroke(256-x/2, 256-x*abs(sin(x)), 256-x/4);
|
||
|
//sdtkeWeight(random(12));
|
||
|
fill(256-x/2, 256-x, 256-x*abs(sin(x)));
|
||
|
//translate(width/2, height/2);
|
||
|
//rotate(-x); //make recieve osc
|
||
|
//rect(x%64, x%64, x*abs(sin(x))%128, x*abs(sin(x))%128, 6);
|
||
|
//fill(random(255));
|
||
|
//rect(width/12 * x, 0, r[int(random(2))], height, 6);
|
||
|
//translate(width/2, 0);
|
||
|
|
||
|
if (y == 4){
|
||
|
rotateX(PI*z/2);
|
||
|
} else {
|
||
|
rotateX(0);
|
||
|
}
|
||
|
|
||
|
//rotateX(0.5);
|
||
|
fill(255);
|
||
|
//rect(0, (height/8) *-y +height*0.7 , width, random(0, 22), 6);
|
||
|
translate(width/2, height/2 + 100, -200);
|
||
|
rotateX(radians(rz));
|
||
|
rotateY(ry);
|
||
|
//rotateZ(rz);
|
||
|
|
||
|
scale(8);
|
||
|
fill(255, 255,0);
|
||
|
shape(chickenfoot);
|
||
|
|
||
|
ry += 0.02;
|
||
|
rx += 0.025;
|
||
|
rz += 0.15;
|
||
|
|
||
|
|
||
|
}
|