Tyler Altenhofen / MVC
Revision:
0:ded79d89abdf
Child:
1:bb1507f0bb64
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri May 01 05:33:50 2015 +0000
@@ -0,0 +1,177 @@
+#include "mbed.h"
+#include <vector>
+#define BUFFER_SIZE 16
+#define NUMBER_OF_SLICES 360
+#include "Point.h"
+#include "View.h"
+
+
+//hass sensor interupt
+InterruptIn hallSensor(p25);
+
+//Set Up Timer and ticker
+Timer rotationTime;
+Ticker updateLeds;
+
+//Declare global vars
+double slice_time;
+double rotate_time; 
+int current_slice;
+bool firstTime;
+
+enum DisplayMode {lineDraw, map, eucDraw};
+
+DisplayMode mode; 
+
+Point pointer;
+EuclidPoint eucPointer;
+//the View
+View display;
+
+
+
+
+//serial port for pc and bluetooth
+Serial pc(USBTX, USBRX); // tx, rx
+Serial bt(p9, p10);// tx, rx
+
+void rotate_sense(){
+  if (firstTime){
+    rotationTime.reset();
+    rotationTime.start();
+    firstTime = false;
+    display.current_slice = 180;
+    return;
+  }
+    if(display.current_slice < NUMBER_OF_SLICES / 4){
+      return;
+    }
+    rotate_time = rotationTime.read_us();
+    rotationTime.reset();    
+    rotationTime.start();
+    slice_time = (double) rotate_time/NUMBER_OF_SLICES;
+    display.resetCount();
+    updateLeds.attach_us(&display, &View::nextLedPush, slice_time);
+}   
+ void moveUp();
+    void moveDown();
+    void rotateRight();
+    void rotateLeft();
+    void moveIn();
+    void moveOut();
+
+void parseLineMode(char c){
+    switch(c){
+        case 'w': 
+            pointer.moveOut();
+            break;
+        case 's':
+            pointer.moveIn();
+            break;
+        case 'a':
+            pointer.rotateRight();
+            break;
+        case 'd':
+            pointer.rotateLeft();
+            break;
+        case 'p':
+            pointer.moveUp();
+            break;
+        case 'l':
+            pointer.moveDown();
+            break;
+        default: return;
+    }
+    display.addPoint(pointer);
+}
+
+void parseMapMode(char c){
+    
+}
+void parseEucMode(char c){
+        bt.printf("parseing EucMode");
+        switch(c){
+        case 'w': 
+            eucPointer.moveAway();
+            break;
+        case 's':
+            eucPointer.moveTowards();
+            break;
+        case 'a':
+            eucPointer.moveLeft();
+            break;
+        case 'd':
+            eucPointer.moveRight();
+            break;
+        case 'p':
+            eucPointer.moveUp();
+            break;
+        case 'l':
+            eucPointer.moveDown();
+            break;
+        default: return;
+    }
+    Point startPoint = eucPointer.getStartPoint();
+    Point endPoint = eucPointer.getEndPoint();
+    bt.printf("\r\n");
+    bt.printf("points%i , %i , %X \r\n", eucPointer.x, eucPointer.y,eucPointer.z);
+    bt.printf("drawingEucPointer Starting %i , %i , %X \r\n", startPoint.getArraySlice(), startPoint.getPositionDistance(),startPoint.getIdentifyingChar());
+    bt.printf("drawingEucPointer Ending %i , %i , %X \r\n", endPoint.getArraySlice(), endPoint.getPositionDistance(),endPoint.getIdentifyingChar());
+
+    display.addEucPoint(eucPointer);
+}
+
+void parseBt(char c){
+    if (c == 'm'){
+        switch (c){
+            case(lineDraw):{
+                mode = eucDraw;
+                bt.printf("we are drawing Euclidian");
+                break;
+                }
+            case(map):{
+                mode = lineDraw;
+                bt.printf("we are drawing Radians");
+                break;
+                }
+            case(eucDraw):{
+                mode = map;
+                bt.printf("we are on a Map");
+                break;
+                }
+            default: {
+                return;
+            }
+        }
+        return;
+    }
+    
+    if (mode == lineDraw){
+        parseLineMode(c);
+    }
+    if (mode == map){
+        parseMapMode(c);
+    }
+    if (mode == eucDraw){
+        parseEucMode(c);
+    }
+}
+        
+
+
+int main() {
+    pc.printf("started");
+    bt.printf("bluetooth started");
+    mode = eucDraw;
+    firstTime = true;
+    current_slice = 100;
+    display.resetDisplay();
+    
+    hallSensor.fall(&rotate_sense);
+
+    while(true) {
+        if (bt.readable()){
+            parseBt(bt.getc());
+        }
+    }
+}