diff --git a/platypus/platypus.ino b/platypus/platypus.ino
new file mode 100644
index 0000000000000000000000000000000000000000..aa4cb7b05f330871ccdf0c7ce081429989e6f59e
--- /dev/null
+++ b/platypus/platypus.ino
@@ -0,0 +1,152 @@
+#include <math.h>
+#include <Wire.h>
+#include <hexbright.h>
+
+// Modes
+#define MODE_OFF_PREVIEW        0
+#define MODE_OFF                1
+#define MODE_STATIC_PREVIEW     2
+#define MODE_STATIC             3
+#define MODE_DYNAMIC_PREVIEW    4
+#define MODE_FADE               5
+#define MODE_BLINKING           6
+#define MODE_STROBE             7
+#define MODE_DAZZLE             8
+
+
+#define BRIGHTNESS_COUNT 5
+int brightness[BRIGHTNESS_COUNT] = {10, 250, 500, 750, 1000};
+int current_brightness = 0;
+int increase_brightness = 1;
+
+// State
+byte mode;
+hexbright hb;
+
+void setup()
+{
+  /// Set DEBUG to a non-zero value in hexbright.h to enable printing
+  hb.init_hardware();
+  mode = MODE_OFF;
+}
+
+void loop()
+{
+  hb.update();
+  hb.print_charge(GLED);
+
+  //if(mode == MODE_DYNAMIC_PREVIEW || mode == MODE_BLINKING) {
+  if(mode == MODE_BLINKING) {
+    static int i = 0;
+    i = (i+1)%40;
+    if(i==0) {
+      hb.set_light(MAX_LEVEL, 0, 50);
+    }
+  }
+  
+  boolean button_just_released = hb.button_just_released();
+  boolean button_pressed = hb.button_pressed();
+  int button_pressed_time = hb.button_pressed_time();
+  
+  byte newMode = mode;
+  
+  switch (mode) {
+    case MODE_OFF_PREVIEW:
+      if(button_just_released) {
+        newMode = MODE_OFF;
+      }
+      break;
+    case MODE_OFF:
+      if (button_pressed && button_pressed_time > 500) {
+        newMode = MODE_DYNAMIC_PREVIEW;        
+      } else if (button_pressed) {
+        newMode = MODE_STATIC_PREVIEW;
+      }
+      break;
+    case MODE_STATIC_PREVIEW:
+      if (button_pressed && button_pressed_time > 2000) {
+        newMode = MODE_OFF_PREVIEW;
+      } else if(button_just_released) {
+        newMode = MODE_STATIC;
+      }
+      break;
+    case MODE_STATIC:
+      if (button_pressed && button_pressed_time > 2000) {
+        newMode = MODE_OFF_PREVIEW;
+      } else if (button_pressed && button_pressed_time > 500) {
+        newMode = MODE_DYNAMIC_PREVIEW;
+      } else if (button_just_released) {
+        cycleBrightness();
+      }
+      break;
+    case MODE_DYNAMIC_PREVIEW:
+      if (button_pressed && button_pressed_time > 2000) {
+        newMode = MODE_OFF_PREVIEW;
+      } else if(button_just_released) {
+          //newMode = MODE_FADE;
+          newMode = MODE_BLINKING;
+          //newMode = MODE_STROBE;
+          //newMode = MODE_DAZZLE;
+      }
+      break;
+    case MODE_BLINKING:
+      if (button_pressed && button_pressed_time > 2000) {
+        newMode = MODE_OFF_PREVIEW;
+      } else if (button_pressed && button_pressed_time > 500) {
+        newMode = MODE_STATIC_PREVIEW;
+      } else if(button_just_released) {
+        newMode = MODE_BLINKING;
+      }
+      break;
+  }
+
+  // Do the mode transitions
+  if (newMode != mode) {
+    switch (newMode) {
+      case MODE_OFF_PREVIEW:
+        Serial.println("Mode = off_preview");
+        hb.set_light(0, OFF_LEVEL, NOW);
+        break;
+      case MODE_OFF:
+        Serial.println("Mode = off");
+        current_brightness = 0;
+        hb.set_light(0, OFF_LEVEL, NOW);
+        break;
+      case MODE_STATIC_PREVIEW:
+        Serial.println("Mode = static_preview");
+        hb.set_light(CURRENT_LEVEL, brightness[current_brightness], NOW);
+        break;
+      case MODE_STATIC:
+        Serial.println("Mode = static");
+        increase_brightness = 1;
+        hb.set_light(CURRENT_LEVEL, brightness[current_brightness], NOW);
+        break;
+      case MODE_DYNAMIC_PREVIEW:
+        Serial.println("Mode = dynamic_preview");
+        break;
+      case MODE_BLINKING:
+        Serial.println("Mode = blinking");
+        break;
+    }
+    mode = newMode;
+  }
+
+}
+
+void cycleBrightness() {
+  Serial.println("Cycle Brightness!");
+  
+  if(current_brightness == BRIGHTNESS_COUNT-1 && increase_brightness == 1) {
+    increase_brightness = 0;
+  } else if(current_brightness == 0 && increase_brightness == 0) {
+    increase_brightness = 1;
+  }
+  
+  if(increase_brightness == 1) {
+    current_brightness = (current_brightness+1)%BRIGHTNESS_COUNT;
+  } else {
+    current_brightness = (current_brightness-1)%BRIGHTNESS_COUNT;
+  }
+  hb.set_light(CURRENT_LEVEL, brightness[current_brightness], NOW);
+}
+