Abraham Marsen
/
Jazz_Hands_Nordic
Georgia Institute of Technology ECE 4180 Spring 2015 Jazz Hands project, Nordic nRF51822 half
main.cpp@0:b8221deeaa87, 2015-04-30 (annotated)
- 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?
User | Revision | Line number | New 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 | } |