Georgia Institute of Technology ECE 4180 Spring 2015 Jazz Hands project, Nordic nRF51822 half

Dependencies:   mbed

Committer:
Grimmkey
Date:
Thu Apr 30 20:46:27 2015 +0000
Revision:
0:b8221deeaa87
Georgia Institute of Technology ECE 4180 Spring 2015 Jazz Hands project, Nordic nRF51822 half

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Grimmkey 0:b8221deeaa87 1 #include "mbed.h"
Grimmkey 0:b8221deeaa87 2 #include "APDS9960.h"
Grimmkey 0:b8221deeaa87 3 #include <math.h>
Grimmkey 0:b8221deeaa87 4 #include "Puck.h"
Grimmkey 0:b8221deeaa87 5
Grimmkey 0:b8221deeaa87 6 DigitalOut mplay(P0_0);
Grimmkey 0:b8221deeaa87 7 DigitalOut mpause(P0_2);
Grimmkey 0:b8221deeaa87 8 DigitalOut mnext(P0_4);
Grimmkey 0:b8221deeaa87 9 DigitalOut mrev(P0_1);
Grimmkey 0:b8221deeaa87 10 DigitalOut mup(P0_3);
Grimmkey 0:b8221deeaa87 11 DigitalOut mdown(P0_5);
Grimmkey 0:b8221deeaa87 12
Grimmkey 0:b8221deeaa87 13 APDS9960 apds(P0_22, P0_20); // FIX THIS LINE
Grimmkey 0:b8221deeaa87 14
Grimmkey 0:b8221deeaa87 15 Puck* puck = &Puck::getPuck();
Grimmkey 0:b8221deeaa87 16
Grimmkey 0:b8221deeaa87 17 const UUID CUBE_SERVICE_UUID = stringToUUID("bftj cube ");
Grimmkey 0:b8221deeaa87 18 const UUID DIRECTION_UUID = stringToUUID("bftj cube dirctn");
Grimmkey 0:b8221deeaa87 19
Grimmkey 0:b8221deeaa87 20 enum Direction {
Grimmkey 0:b8221deeaa87 21 UP,
Grimmkey 0:b8221deeaa87 22 DOWN,
Grimmkey 0:b8221deeaa87 23 LEFT,
Grimmkey 0:b8221deeaa87 24 RIGHT,
Grimmkey 0:b8221deeaa87 25 FRONT,
Grimmkey 0:b8221deeaa87 26 BACK,
Grimmkey 0:b8221deeaa87 27 UNDEFINED
Grimmkey 0:b8221deeaa87 28 };
Grimmkey 0:b8221deeaa87 29
Grimmkey 0:b8221deeaa87 30 Direction direction = UNDEFINED;
Grimmkey 0:b8221deeaa87 31 Direction new_direction = UNDEFINED;
Grimmkey 0:b8221deeaa87 32 void log_direction(Direction direction) // May be unnecessary.
Grimmkey 0:b8221deeaa87 33 {
Grimmkey 0:b8221deeaa87 34 switch(direction) {
Grimmkey 0:b8221deeaa87 35 case UP:
Grimmkey 0:b8221deeaa87 36 LOG_INFO("Direction UP\n");
Grimmkey 0:b8221deeaa87 37 mplay=1;
Grimmkey 0:b8221deeaa87 38 break;
Grimmkey 0:b8221deeaa87 39 case DOWN:
Grimmkey 0:b8221deeaa87 40 LOG_INFO("Direction DOWN\n");
Grimmkey 0:b8221deeaa87 41 mpause=1;
Grimmkey 0:b8221deeaa87 42 break;
Grimmkey 0:b8221deeaa87 43 case LEFT:
Grimmkey 0:b8221deeaa87 44 LOG_INFO("Direction LEFT\n");
Grimmkey 0:b8221deeaa87 45 mrev=1;
Grimmkey 0:b8221deeaa87 46 break;
Grimmkey 0:b8221deeaa87 47 case RIGHT:
Grimmkey 0:b8221deeaa87 48 LOG_INFO("Direction RIGHT\n");
Grimmkey 0:b8221deeaa87 49 mnext=1;
Grimmkey 0:b8221deeaa87 50 break;
Grimmkey 0:b8221deeaa87 51 case BACK:
Grimmkey 0:b8221deeaa87 52 LOG_INFO("Direction BACK\n");
Grimmkey 0:b8221deeaa87 53 mup=1;
Grimmkey 0:b8221deeaa87 54 break;
Grimmkey 0:b8221deeaa87 55 case FRONT:
Grimmkey 0:b8221deeaa87 56 LOG_INFO("Direction FRONT\n");
Grimmkey 0:b8221deeaa87 57 mdown=1;
Grimmkey 0:b8221deeaa87 58 break;
Grimmkey 0:b8221deeaa87 59 default:
Grimmkey 0:b8221deeaa87 60 LOG_INFO("Direction UNSET\n");
Grimmkey 0:b8221deeaa87 61 mplay=0;
Grimmkey 0:b8221deeaa87 62 mpause=0;
Grimmkey 0:b8221deeaa87 63 mnext=0;
Grimmkey 0:b8221deeaa87 64 mrev=0;
Grimmkey 0:b8221deeaa87 65 mup=0;
Grimmkey 0:b8221deeaa87 66 mdown=0;
Grimmkey 0:b8221deeaa87 67 break;
Grimmkey 0:b8221deeaa87 68 }
Grimmkey 0:b8221deeaa87 69 }
Grimmkey 0:b8221deeaa87 70
Grimmkey 0:b8221deeaa87 71 void log_gesture(void)
Grimmkey 0:b8221deeaa87 72 {
Grimmkey 0:b8221deeaa87 73 new_direction = UNDEFINED;
Grimmkey 0:b8221deeaa87 74 if ( apds.isGestAvailable() ) {
Grimmkey 0:b8221deeaa87 75 printf("Gesture is Available\n\r");
Grimmkey 0:b8221deeaa87 76 switch ( apds.readGest() ) {
Grimmkey 0:b8221deeaa87 77 case DIR_O:
Grimmkey 0:b8221deeaa87 78 printf("OUT.\r\n");
Grimmkey 0:b8221deeaa87 79 new_direction = UP;
Grimmkey 0:b8221deeaa87 80 break;
Grimmkey 0:b8221deeaa87 81 case DIR_I:
Grimmkey 0:b8221deeaa87 82 printf("IN.\n\r");
Grimmkey 0:b8221deeaa87 83 new_direction = DOWN;
Grimmkey 0:b8221deeaa87 84 break;
Grimmkey 0:b8221deeaa87 85 case DIR_W:
Grimmkey 0:b8221deeaa87 86 printf("West.\n\r");
Grimmkey 0:b8221deeaa87 87 new_direction = LEFT;
Grimmkey 0:b8221deeaa87 88 break;
Grimmkey 0:b8221deeaa87 89 case DIR_E:
Grimmkey 0:b8221deeaa87 90 printf("East.\n\r");
Grimmkey 0:b8221deeaa87 91 new_direction = RIGHT;
Grimmkey 0:b8221deeaa87 92 break;
Grimmkey 0:b8221deeaa87 93 case DIR_N:
Grimmkey 0:b8221deeaa87 94 printf("North.\r\n");
Grimmkey 0:b8221deeaa87 95 new_direction = FRONT;
Grimmkey 0:b8221deeaa87 96 break;
Grimmkey 0:b8221deeaa87 97 case DIR_S:
Grimmkey 0:b8221deeaa87 98 printf("South.\n\r");
Grimmkey 0:b8221deeaa87 99 new_direction = BACK;
Grimmkey 0:b8221deeaa87 100 break;
Grimmkey 0:b8221deeaa87 101
Grimmkey 0:b8221deeaa87 102 default:
Grimmkey 0:b8221deeaa87 103 printf("Waiting on Gesture.\n\r");
Grimmkey 0:b8221deeaa87 104 }
Grimmkey 0:b8221deeaa87 105 }
Grimmkey 0:b8221deeaa87 106 if (direction == new_direction) {
Grimmkey 0:b8221deeaa87 107 return;
Grimmkey 0:b8221deeaa87 108 }
Grimmkey 0:b8221deeaa87 109 direction = new_direction;
Grimmkey 0:b8221deeaa87 110
Grimmkey 0:b8221deeaa87 111 log_direction(direction);
Grimmkey 0:b8221deeaa87 112 uint8_t directionAsInteger = direction;
Grimmkey 0:b8221deeaa87 113 int length = 1;
Grimmkey 0:b8221deeaa87 114 puck->updateCharacteristicValue(DIRECTION_UUID, &directionAsInteger, length);
Grimmkey 0:b8221deeaa87 115 }
Grimmkey 0:b8221deeaa87 116
Grimmkey 0:b8221deeaa87 117 int main()
Grimmkey 0:b8221deeaa87 118 {
Grimmkey 0:b8221deeaa87 119 if(!apds.init()) {
Grimmkey 0:b8221deeaa87 120 printf("Initialization ERROR.\n\r");
Grimmkey 0:b8221deeaa87 121 } else {
Grimmkey 0:b8221deeaa87 122 printf("Initialization Complete.\n\r");
Grimmkey 0:b8221deeaa87 123 }
Grimmkey 0:b8221deeaa87 124
Grimmkey 0:b8221deeaa87 125 if(apds.enGestSens(true)) {
Grimmkey 0:b8221deeaa87 126 printf("Gesture Sensor Enabled\r\n");
Grimmkey 0:b8221deeaa87 127 } else {
Grimmkey 0:b8221deeaa87 128 printf("Gesture Sensor is not enabled.\r\n");
Grimmkey 0:b8221deeaa87 129 }
Grimmkey 0:b8221deeaa87 130
Grimmkey 0:b8221deeaa87 131
Grimmkey 0:b8221deeaa87 132 int characteristicValueLength = 1;
Grimmkey 0:b8221deeaa87 133 puck->addCharacteristic(
Grimmkey 0:b8221deeaa87 134 CUBE_SERVICE_UUID,
Grimmkey 0:b8221deeaa87 135 DIRECTION_UUID,
Grimmkey 0:b8221deeaa87 136 characteristicValueLength,
Grimmkey 0:b8221deeaa87 137 GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY);
Grimmkey 0:b8221deeaa87 138
Grimmkey 0:b8221deeaa87 139 puck->init(0xC1BE);
Grimmkey 0:b8221deeaa87 140
Grimmkey 0:b8221deeaa87 141
Grimmkey 0:b8221deeaa87 142 Ticker ticker;
Grimmkey 0:b8221deeaa87 143 ticker.attach(log_gesture, 0.2);
Grimmkey 0:b8221deeaa87 144 LOG_INFO("Started listening to orientation changes.\n");
Grimmkey 0:b8221deeaa87 145
Grimmkey 0:b8221deeaa87 146 while(puck->drive());
Grimmkey 0:b8221deeaa87 147 }