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 15df5e8..fdb3ef7 100644 Binary files a/lib/gluegen-rt-natives-macosx-universal.jar and b/lib/gluegen-rt-natives-macosx-universal.jar differ 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; +}