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 @@
-
+
@@ -123,9 +249,12 @@
-
-
+
+
+
+
+
@@ -150,24 +279,56 @@
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
@@ -179,7 +340,7 @@
-
+
@@ -208,28 +369,42 @@
+
+
+
+
+
+
+ 1468081878478
+
+
+ 1468081878478
+
+
+
-
+
-
-
+
+
+
+
+
+
+
-
-
-
-
@@ -248,53 +423,282 @@
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
+
+
-
+
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+
+
+
+
+
+
+
+
+
+
+
+ processing-intellij
+
+
+
+
+
+
+
+
+
+
+
+
+ 1.8
+
+
+
+
+
+
+
+
+
+
+
+ serial
+
+
+
+
+
+
+
+
+
+
+
\ 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;
+}