From 5f0a62d9bf570dd0adbd435decb454939ca7edbb Mon Sep 17 00:00:00 2001 From: jan Date: Sat, 9 Jul 2016 17:16:15 -0700 Subject: [PATCH] Start javaifying --- .idea/compiler.xml | 45 ++ .idea/dictionaries/jan.xml | 7 + .idea/libraries/lib.xml | 2 + .idea/libraries/opencv.xml | 21 + .idea/libraries/serial.xml | 21 + .idea/libraries/video.xml | 18 + .idea/misc.xml | 16 - .idea/workspace.xml | 510 ++++++++++++++++++-- lib/gluegen-rt-natives-macosx-universal.jar | Bin 5076 -> 11424 bytes processing-intellij.iml | 3 + src/Camera.java | 30 ++ src/EuglenaApplet.java | 58 +++ src/ExampleApplet.java | 29 -- src/LEDControl.java | 66 +++ src/ProjectorApplet.java | 25 + src/Settings.java | 8 + 16 files changed, 761 insertions(+), 98 deletions(-) create mode 100644 .idea/dictionaries/jan.xml create mode 100644 .idea/libraries/opencv.xml create mode 100644 .idea/libraries/serial.xml create mode 100644 .idea/libraries/video.xml create mode 100644 src/Camera.java create mode 100644 src/EuglenaApplet.java delete mode 100644 src/ExampleApplet.java create mode 100644 src/LEDControl.java create mode 100644 src/ProjectorApplet.java create mode 100644 src/Settings.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 96cc43e..df3149b 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/dictionaries/jan.xml b/.idea/dictionaries/jan.xml new file mode 100644 index 0000000..46f81f5 --- /dev/null +++ b/.idea/dictionaries/jan.xml @@ -0,0 +1,7 @@ + + + + arduino + + + \ No newline at end of file diff --git a/.idea/libraries/lib.xml b/.idea/libraries/lib.xml index ca2eb99..f8da920 100644 --- a/.idea/libraries/lib.xml +++ b/.idea/libraries/lib.xml @@ -16,6 +16,8 @@ + + diff --git a/.idea/libraries/opencv.xml b/.idea/libraries/opencv.xml new file mode 100644 index 0000000..7b6571e --- /dev/null +++ b/.idea/libraries/opencv.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/serial.xml b/.idea/libraries/serial.xml new file mode 100644 index 0000000..e7309ae --- /dev/null +++ b/.idea/libraries/serial.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/video.xml b/.idea/libraries/video.xml new file mode 100644 index 0000000..eff38d2 --- /dev/null +++ b/.idea/libraries/video.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index db1dbaa..13de598 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -61,20 +61,4 @@ - - - - - 1.8 - - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 4a17865..fe6068c 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -2,9 +2,22 @@ - - + + + + + + + + + + + + + + + @@ -20,17 +33,116 @@ + + + + + + + + + + + + + + + + + + + + + + + - - + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -38,6 +150,13 @@ + + + @@ -49,16 +168,23 @@ - - + @@ -84,8 +210,8 @@ - + @@ -100,7 +226,7 @@ @@ -110,7 +236,7 @@ - - + + + + + @@ -150,24 +279,56 @@ - - + + + + + + + + + + + + + + + + + @@ -179,7 +340,7 @@ - \ No newline at end of file diff --git a/lib/gluegen-rt-natives-macosx-universal.jar b/lib/gluegen-rt-natives-macosx-universal.jar index 15df5e8200e9eaa9e48217f0131ce31e85dad4c4..fdb3ef707918f777d765595f06b06a1aa20b77b0 100644 GIT binary patch delta 6428 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 delta 32 hcmZ1wc}0E0VWG)(+J8k@*%*L;83_LZ>4QQb9ss2u2WS8Q diff --git a/processing-intellij.iml b/processing-intellij.iml index fb8e866..9d9065c 100644 --- a/processing-intellij.iml +++ b/processing-intellij.iml @@ -8,5 +8,8 @@ + + + \ No newline at end of file diff --git a/src/Camera.java b/src/Camera.java new file mode 100644 index 0000000..ff1c660 --- /dev/null +++ b/src/Camera.java @@ -0,0 +1,30 @@ +import processing.core.*; +import processing.video.*; + + +class Camera { + Capture cam; + + /* + Set up a camera. + */ + Camera(PApplet applet, int cameraMode) { + String[] cameras = Capture.list(); + if (cameras.length == 0) { + PApplet.println("There are no cameras available for capture."); + applet.exit(); + } else { + PApplet.println("Available cameras:"); + for(int i = 0; i < cameras.length; i++) { + PApplet.println(i, cameras[i]); + } + PApplet.print("Using camera mode "); + PApplet.println(cameras[cameraMode]); + this.cam = new Capture(applet, cameras[cameraMode]); + this.cam.start(); + } + } + +} + + diff --git a/src/EuglenaApplet.java b/src/EuglenaApplet.java new file mode 100644 index 0000000..343fb13 --- /dev/null +++ b/src/EuglenaApplet.java @@ -0,0 +1,58 @@ +import processing.core.*; + +public class EuglenaApplet extends PApplet { + final int cameraMode = 77; + final int whichArduino = 0; + + // Hardware + ProjectorApplet projectorApplet; + Camera camera; + LEDControl ledControl; + + // Software components + Menu menu; + + public static void main(String args[]) { + PApplet.main("EuglenaApplet"); + } + + @Override + public void settings() { + size(1000, 1000, P2D); + } + + @Override + public void setup() { + clear(); + smooth(); + + // Start up projectorApplet window + projectorApplet = new ProjectorApplet(); + String[] args = {"Euglena projector"}; + PApplet.runSketch(args, projectorApplet); + + camera = new Camera(this, cameraMode); + ledControl = new LEDControl(this, whichArduino); + + menu = new Menu(this); + } + + @Override + public void draw() { + clear(); + fill(255); + rect(50, 50, 100, 100); + } + + + void drawArrow(int cx, int cy, int len, float angle){ + pushMatrix(); + translate(cx, cy); + rotate(radians(angle)); + line(0,0,len, 0); + line(len, 0, len - 8, -8); + line(len, 0, len - 8, 8); + popMatrix(); + } +} + diff --git a/src/ExampleApplet.java b/src/ExampleApplet.java deleted file mode 100644 index f2a700f..0000000 --- a/src/ExampleApplet.java +++ /dev/null @@ -1,29 +0,0 @@ - -import processing.core.*; - -public class ExampleApplet extends PApplet { - - public static void main(String args[]) { - PApplet.main("ExampleApplet"); - } - - @Override - public void settings() { - // TODO: Customize screen size and so on here - size(200, 200); - } - - @Override - public void setup() { - // TODO: Your custom drawing and setup on applet start belongs here - clear(); - } - - @Override - public void draw() { - // TODO: Do your drawing for each frame here - clear(); - fill(255); - rect(50, 50, 100, 100); - } -} diff --git a/src/LEDControl.java b/src/LEDControl.java new file mode 100644 index 0000000..ad96819 --- /dev/null +++ b/src/LEDControl.java @@ -0,0 +1,66 @@ +import processing.core.*; +import cc.arduino.*; + +class LEDControl { + final int comRate = 57600; + + Arduino arduino; + boolean[] state = {false, false, false, false}; + + LEDControl(PApplet applet, int whichArduino) { + // Arduino - initialize correct arduino + String[] arduinos = Arduino.list(); + if (arduinos.length == 0) { + PApplet.println("There are no arduinos available for use."); + applet.exit(); + } else { + PApplet.println("Available arduinos:"); + for(int i = 0; i < arduinos.length; i++) { + PApplet.println(arduinos[i]); + } + PApplet.print("Using arduino "); + PApplet.println(arduinos[whichArduino]); + this.arduino = new Arduino(applet, arduinos[whichArduino], comRate); + + this.arduino.pinMode(Direction.LEFT.pin, Arduino.OUTPUT); + this.arduino.pinMode(Direction.RIGHT.pin, Arduino.OUTPUT); + this.arduino.pinMode(Direction.UP.pin, Arduino.OUTPUT); + this.arduino.pinMode(Direction.DOWN.pin, Arduino.OUTPUT); + } + } + + boolean isActive(Direction dir) { + return this.state[dir.index]; + } + + public void turnOff(Direction dir) { + this.arduino.digitalWrite(dir.pin, Arduino.LOW); + this.state[dir.index] = false; + } + + public void turnOn(Direction dir) { + this.arduino.digitalWrite(dir.pin, Arduino.HIGH); + this.state[dir.index] = true; + } + + public void toggle(Direction dir) { + if (isActive(dir)) { + turnOff(dir); + } else { + turnOn(dir); + } + } + + enum Direction { + LEFT (0, 10), + RIGHT (1, 5), + UP (2, 6), + DOWN (3, 9); + + final int index, pin; + Direction(int index, int pin) { + this.index = index; + this.pin = pin; + } + } +} diff --git a/src/ProjectorApplet.java b/src/ProjectorApplet.java new file mode 100644 index 0000000..d2e2331 --- /dev/null +++ b/src/ProjectorApplet.java @@ -0,0 +1,25 @@ +import processing.core.PApplet; + + +class ProjectorApplet extends PApplet { + final int projectorScreenNumber = 2; + + final static int centerX = 860; + final static int centerY = 540; + + public void settings() { + fullScreen(P2D, this.projectorScreenNumber); + } + + @Override + public void setup() { + clear(); + } + + @Override + public void draw() { + background(50); + fill(255); + ellipse(mouseX, mouseY, 10, 10); + } +} diff --git a/src/Settings.java b/src/Settings.java new file mode 100644 index 0000000..54798ce --- /dev/null +++ b/src/Settings.java @@ -0,0 +1,8 @@ +/** + * + */ +public class Settings { + + final static int centerX = 860; + final static int centerY = 540; +}