Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Diff: main.cpp
- 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()); + } + } +}