Abraham Marsen
/
Jazz_Hands_Nordic
Georgia Institute of Technology ECE 4180 Spring 2015 Jazz Hands project, Nordic nRF51822 half
Diff: main.cpp
- Revision:
- 0:b8221deeaa87
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Apr 30 20:46:27 2015 +0000 @@ -0,0 +1,147 @@ +#include "mbed.h" +#include "APDS9960.h" +#include <math.h> +#include "Puck.h" + +DigitalOut mplay(P0_0); +DigitalOut mpause(P0_2); +DigitalOut mnext(P0_4); +DigitalOut mrev(P0_1); +DigitalOut mup(P0_3); +DigitalOut mdown(P0_5); + +APDS9960 apds(P0_22, P0_20); // FIX THIS LINE + +Puck* puck = &Puck::getPuck(); + +const UUID CUBE_SERVICE_UUID = stringToUUID("bftj cube "); +const UUID DIRECTION_UUID = stringToUUID("bftj cube dirctn"); + +enum Direction { + UP, + DOWN, + LEFT, + RIGHT, + FRONT, + BACK, + UNDEFINED +}; + +Direction direction = UNDEFINED; +Direction new_direction = UNDEFINED; +void log_direction(Direction direction) // May be unnecessary. +{ + switch(direction) { + case UP: + LOG_INFO("Direction UP\n"); + mplay=1; + break; + case DOWN: + LOG_INFO("Direction DOWN\n"); + mpause=1; + break; + case LEFT: + LOG_INFO("Direction LEFT\n"); + mrev=1; + break; + case RIGHT: + LOG_INFO("Direction RIGHT\n"); + mnext=1; + break; + case BACK: + LOG_INFO("Direction BACK\n"); + mup=1; + break; + case FRONT: + LOG_INFO("Direction FRONT\n"); + mdown=1; + break; + default: + LOG_INFO("Direction UNSET\n"); + mplay=0; + mpause=0; + mnext=0; + mrev=0; + mup=0; + mdown=0; + break; + } +} + +void log_gesture(void) +{ + new_direction = UNDEFINED; + if ( apds.isGestAvailable() ) { + printf("Gesture is Available\n\r"); + switch ( apds.readGest() ) { + case DIR_O: + printf("OUT.\r\n"); + new_direction = UP; + break; + case DIR_I: + printf("IN.\n\r"); + new_direction = DOWN; + break; + case DIR_W: + printf("West.\n\r"); + new_direction = LEFT; + break; + case DIR_E: + printf("East.\n\r"); + new_direction = RIGHT; + break; + case DIR_N: + printf("North.\r\n"); + new_direction = FRONT; + break; + case DIR_S: + printf("South.\n\r"); + new_direction = BACK; + break; + + default: + printf("Waiting on Gesture.\n\r"); + } + } + if (direction == new_direction) { + return; + } + direction = new_direction; + + log_direction(direction); + uint8_t directionAsInteger = direction; + int length = 1; + puck->updateCharacteristicValue(DIRECTION_UUID, &directionAsInteger, length); +} + +int main() +{ + if(!apds.init()) { + printf("Initialization ERROR.\n\r"); + } else { + printf("Initialization Complete.\n\r"); + } + + if(apds.enGestSens(true)) { + printf("Gesture Sensor Enabled\r\n"); + } else { + printf("Gesture Sensor is not enabled.\r\n"); + } + + + int characteristicValueLength = 1; + puck->addCharacteristic( + CUBE_SERVICE_UUID, + DIRECTION_UUID, + characteristicValueLength, + GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY); + + puck->init(0xC1BE); + + + Ticker ticker; + ticker.attach(log_gesture, 0.2); + LOG_INFO("Started listening to orientation changes.\n"); + + while(puck->drive()); +} \ No newline at end of file