Cubic Hand project for EECS 249A course.
Dependencies: MMA8451Q TSI cc3000_hostdriver_mbedsocket NVIC_set_all_priorities mbed Multi_WS2811
Diff: LedCube.h
- Revision:
- 56:f95ec9baa4cb
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LedCube.h Mon Dec 15 23:55:15 2014 +0000 @@ -0,0 +1,85 @@ +#include "mbed.h" +#include "WS2811.h" +#include "CubeUpdateParameters.h" + +#pragma once + +class LedCube +{ + public: + LedCube(); + ~LedCube(); + + /*Sets the initial size and position of the lighted cube*/ + void Init(int x, int y, int z); + + /* Returns the index of the LED given the cartesian + * coordinates of the LED on a given panel. The origin + * is the led at the bottom left of panel 1 when using + * a three panel cube. + ________ + / /| + / 3 / | + /_______/ 2| + | | | + | 1 | / + | | + -------- + + Z Y + | / + | / + | / + |/ + -------X */ + int getLedIndex(int panel, int x, int y); + + /* Lights up (if on) or turns off (if !on) the LEDs on the LED cube + * corresponding to the location of the square. All panels will show + * the cube, with brightness depending on the distance from the + * square to the panel.*/ + void updateLEDs(bool on, int size, int x, int y, int z); + void updateLEDsOld(bool on, int size, int x, int y, int z); + + /* Updates the LED cube.*/ + void cubeUpdate(); + + /* Updates the LED cube given the size, hue and offsets in the X, Y and Z axes.*/ + void UpdateCube(int size, int deltaX, int deltaY, int deltaZ, float hue); + + /* Updates the LED cube given parameters in a CubeUpdateParameters struct.*/ + void UpdateCube2(CubeUpdateParameters cubeParams); + + /* Moves the square inside the cube by deltaX in the x-axis, + * by deltaY in the y-axis, and deltaZ in the z-axis. Returns + * 1 if movement occured, and -1 if no movement occured.*/ + int move(int deltaX, int deltaY, int deltaZ); + + /* Changes the color of the square in the LED cube to the given hue.*/ + void changeColor(float hue); + + /* Changes the size of the square in the LED cube to the given size. + * The minimum size is 1, corresponding to a square of a single LED. + * A size of 2 corresponds to a 2x2 LED square, 3 corresponds to 3x3 + * and so forth. If square is on an edge, it moves accordingly in + * order to be able to increase size.*/ + void changeSize(int newSize); + + private: + unsigned const X; + unsigned const Y; + unsigned const Z; + int pos[3]; + int prevPos[3]; + int size; + int prevSize; + + float saturation; + float brightness; + uint8_t r; + uint8_t g; + uint8_t b; + WS2811 ledStrip1; + WS2811 ledStrip2; + +}; \ No newline at end of file