Filip Maksimovic HW2 repository
Dependencies: MMA8451Q TSI TextLCD USBDevice mbed tsi_sensor
main.cpp@1:e6873017e1d2, 2014-09-21 (annotated)
- Committer:
- fil
- Date:
- Sun Sep 21 19:40:46 2014 +0000
- Revision:
- 1:e6873017e1d2
- Parent:
- 0:6ee2b447a1c5
Final code.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
fil | 0:6ee2b447a1c5 | 1 | #include "mbed.h" |
fil | 0:6ee2b447a1c5 | 2 | #include "MMA8451Q.h" |
fil | 0:6ee2b447a1c5 | 3 | #include "TSISensor.h" |
fil | 0:6ee2b447a1c5 | 4 | #include "USBKeyboard.h" |
fil | 1:e6873017e1d2 | 5 | #include "TextLCD.h" |
fil | 0:6ee2b447a1c5 | 6 | #define MMA8451_I2C_ADDRESS (0x1d<<1) |
fil | 0:6ee2b447a1c5 | 7 | |
fil | 0:6ee2b447a1c5 | 8 | int main(void) { |
fil | 0:6ee2b447a1c5 | 9 | MMA8451Q acc(PTE25, PTE24, MMA8451_I2C_ADDRESS); |
fil | 0:6ee2b447a1c5 | 10 | TSISensor tsi; |
fil | 0:6ee2b447a1c5 | 11 | PwmOut rled(LED_RED); |
fil | 0:6ee2b447a1c5 | 12 | PwmOut gled(LED_GREEN); |
fil | 0:6ee2b447a1c5 | 13 | PwmOut bled(LED_BLUE); |
fil | 0:6ee2b447a1c5 | 14 | Serial pc(USBTX, USBRX); |
fil | 0:6ee2b447a1c5 | 15 | USBKeyboard keyboard; |
fil | 1:e6873017e1d2 | 16 | TextLCD lcd(PTD0,PTD5,PTA12,PTD4,PTA2,PTA1,TextLCD::LCD20x4); |
fil | 1:e6873017e1d2 | 17 | |
fil | 1:e6873017e1d2 | 18 | //lcd.printf("Hello World!\n"); |
fil | 0:6ee2b447a1c5 | 19 | |
fil | 0:6ee2b447a1c5 | 20 | rled = 1.0; bled = 0.0; gled = 1.0; |
fil | 0:6ee2b447a1c5 | 21 | |
fil | 0:6ee2b447a1c5 | 22 | // Begin the big fat fatty loop |
fil | 0:6ee2b447a1c5 | 23 | while (1) { |
fil | 1:e6873017e1d2 | 24 | |
fil | 0:6ee2b447a1c5 | 25 | gled = 1.0; bled = 0.0; rled = 1.0; |
fil | 0:6ee2b447a1c5 | 26 | |
fil | 0:6ee2b447a1c5 | 27 | // Instantiate the touch 'buffer' |
fil | 0:6ee2b447a1c5 | 28 | int x[2] = {0,0}; |
fil | 1:e6873017e1d2 | 29 | int thenum = 0; |
fil | 0:6ee2b447a1c5 | 30 | |
fil | 0:6ee2b447a1c5 | 31 | // Get touch pad sensor reading |
fil | 0:6ee2b447a1c5 | 32 | int t = tsi.readDistance(); |
fil | 0:6ee2b447a1c5 | 33 | |
fil | 0:6ee2b447a1c5 | 34 | // Test if the touch pad is being groped |
fil | 0:6ee2b447a1c5 | 35 | x[0] = tsi.readDistance(); |
fil | 1:e6873017e1d2 | 36 | int activated = 0; |
fil | 0:6ee2b447a1c5 | 37 | |
fil | 1:e6873017e1d2 | 38 | while(t != 0 && activated <= 1) { |
fil | 0:6ee2b447a1c5 | 39 | gled = 0.0; |
fil | 0:6ee2b447a1c5 | 40 | x[1] = x[0]; |
fil | 0:6ee2b447a1c5 | 41 | x[0] = tsi.readDistance(); |
fil | 1:e6873017e1d2 | 42 | thenum = x[0]; |
fil | 1:e6873017e1d2 | 43 | |
fil | 1:e6873017e1d2 | 44 | |
fil | 1:e6873017e1d2 | 45 | // display crap on the display thingie! same fat if statement from before :) |
fil | 1:e6873017e1d2 | 46 | if (acc.getAccZ() > 0.8){ |
fil | 1:e6873017e1d2 | 47 | if (thenum <= 8) |
fil | 1:e6873017e1d2 | 48 | lcd.printf("s\n\n"); |
fil | 1:e6873017e1d2 | 49 | else if ((thenum>9) && (thenum<=20)) |
fil | 1:e6873017e1d2 | 50 | lcd.printf("i\n\n"); |
fil | 1:e6873017e1d2 | 51 | else if ((thenum>20) && (thenum<31)) |
fil | 1:e6873017e1d2 | 52 | lcd.printf("h\n\n"); |
fil | 1:e6873017e1d2 | 53 | else |
fil | 1:e6873017e1d2 | 54 | lcd.printf("d\n\n"); |
fil | 1:e6873017e1d2 | 55 | } |
fil | 1:e6873017e1d2 | 56 | // half z half y |
fil | 1:e6873017e1d2 | 57 | else if ((acc.getAccZ() > 0.3 && acc.getAccZ() < 0.8) && (acc.getAccX() < 0.3) && (acc.getAccY() < -0.3 && acc.getAccY() > -0.8)) { |
fil | 1:e6873017e1d2 | 58 | if (thenum <= 10) |
fil | 1:e6873017e1d2 | 59 | lcd.printf("e\n\n"); |
fil | 1:e6873017e1d2 | 60 | else if ((thenum>11) && (thenum<=29)) |
fil | 1:e6873017e1d2 | 61 | lcd.printf("r\n\n"); |
fil | 1:e6873017e1d2 | 62 | else |
fil | 1:e6873017e1d2 | 63 | lcd.printf("a\n\n"); |
fil | 1:e6873017e1d2 | 64 | } |
fil | 1:e6873017e1d2 | 65 | // half z half +x |
fil | 1:e6873017e1d2 | 66 | else if ((acc.getAccZ() > 0.3 && acc.getAccZ() < 0.8) && (acc.getAccX() > 0.3 && acc.getAccX() < 0.8) && (acc.getAccY() < 0.3)) { |
fil | 1:e6873017e1d2 | 67 | if (thenum <= 8) |
fil | 1:e6873017e1d2 | 68 | lcd.printf("w\n\n"); |
fil | 1:e6873017e1d2 | 69 | else if ((thenum>9) && (thenum<=20)) |
fil | 1:e6873017e1d2 | 70 | lcd.printf("f\n\n"); |
fil | 1:e6873017e1d2 | 71 | else if ((thenum>20) && (thenum<31)) |
fil | 1:e6873017e1d2 | 72 | lcd.printf("g\n\n"); |
fil | 1:e6873017e1d2 | 73 | else |
fil | 1:e6873017e1d2 | 74 | lcd.printf("y\n\n"); |
fil | 1:e6873017e1d2 | 75 | } |
fil | 1:e6873017e1d2 | 76 | // half z half -x |
fil | 1:e6873017e1d2 | 77 | else if ((acc.getAccZ() > 0.3 && acc.getAccZ() < 0.8) && (acc.getAccY() < 0.3) && (acc.getAccX() < -0.3 && acc.getAccX() > -0.8)) { |
fil | 1:e6873017e1d2 | 78 | if (thenum <= 8) |
fil | 1:e6873017e1d2 | 79 | lcd.printf("l\n\n"); |
fil | 1:e6873017e1d2 | 80 | else if ((thenum>9) && (thenum<=20)) |
fil | 1:e6873017e1d2 | 81 | lcd.printf("u\n\n"); |
fil | 1:e6873017e1d2 | 82 | else if ((thenum>20) && (thenum<31)) |
fil | 1:e6873017e1d2 | 83 | lcd.printf("c\n\n"); |
fil | 1:e6873017e1d2 | 84 | else |
fil | 1:e6873017e1d2 | 85 | lcd.printf("m\n\n"); |
fil | 1:e6873017e1d2 | 86 | } |
fil | 1:e6873017e1d2 | 87 | // negative y direction |
fil | 1:e6873017e1d2 | 88 | else if (acc.getAccY() < -0.8){ |
fil | 1:e6873017e1d2 | 89 | if (thenum <= 10) |
fil | 1:e6873017e1d2 | 90 | lcd.printf("t\n\n"); |
fil | 1:e6873017e1d2 | 91 | else if ((thenum>11) && (thenum<=29)) |
fil | 1:e6873017e1d2 | 92 | lcd.printf("o\n\n"); |
fil | 1:e6873017e1d2 | 93 | else |
fil | 1:e6873017e1d2 | 94 | lcd.printf("n\n\n"); |
fil | 1:e6873017e1d2 | 95 | } |
fil | 1:e6873017e1d2 | 96 | //positive x direction |
fil | 1:e6873017e1d2 | 97 | else if (acc.getAccX() > 0.8){ |
fil | 1:e6873017e1d2 | 98 | if (thenum <= 8) |
fil | 1:e6873017e1d2 | 99 | lcd.printf("j\n\n"); |
fil | 1:e6873017e1d2 | 100 | else if ((thenum>9) && (thenum<=20)) |
fil | 1:e6873017e1d2 | 101 | lcd.printf("x\n\n"); |
fil | 1:e6873017e1d2 | 102 | else if ((thenum>20) && (thenum<=31)) |
fil | 1:e6873017e1d2 | 103 | lcd.printf("q\n\n"); |
fil | 1:e6873017e1d2 | 104 | else |
fil | 1:e6873017e1d2 | 105 | lcd.printf("z\n\n"); |
fil | 1:e6873017e1d2 | 106 | } |
fil | 1:e6873017e1d2 | 107 | //negative x direction |
fil | 1:e6873017e1d2 | 108 | else if (acc.getAccX() < -0.8){ |
fil | 1:e6873017e1d2 | 109 | if (thenum <= 8) |
fil | 1:e6873017e1d2 | 110 | lcd.printf("p\n\n"); |
fil | 1:e6873017e1d2 | 111 | else if ((thenum>9) && (thenum<=20)) |
fil | 1:e6873017e1d2 | 112 | lcd.printf("b\n\n"); |
fil | 1:e6873017e1d2 | 113 | else if ((thenum>21) && (thenum<=31)) |
fil | 1:e6873017e1d2 | 114 | lcd.printf("v\n\n"); |
fil | 1:e6873017e1d2 | 115 | else |
fil | 1:e6873017e1d2 | 116 | lcd.printf("k\n\n"); |
fil | 1:e6873017e1d2 | 117 | } |
fil | 1:e6873017e1d2 | 118 | |
fil | 0:6ee2b447a1c5 | 119 | // test for a left swipe |
fil | 0:6ee2b447a1c5 | 120 | if (x[0] > x[1] + 20) { |
fil | 0:6ee2b447a1c5 | 121 | // i swiped right |
fil | 0:6ee2b447a1c5 | 122 | // key = spacebar |
fil | 0:6ee2b447a1c5 | 123 | bled = 0.0; rled = 1.0; gled = 1.0; |
fil | 0:6ee2b447a1c5 | 124 | keyboard.keyCode(' ',0); |
fil | 1:e6873017e1d2 | 125 | activated = 5; |
fil | 1:e6873017e1d2 | 126 | lcd.printf(" \n\n"); |
fil | 1:e6873017e1d2 | 127 | break; |
fil | 0:6ee2b447a1c5 | 128 | } |
fil | 1:e6873017e1d2 | 129 | |
fil | 0:6ee2b447a1c5 | 130 | // from experience, x[1] is the actual output 'value' booya :) |
fil | 1:e6873017e1d2 | 131 | thenum = x[1]; x[1] = x[0]; x[0] = tsi.readDistance(); |
fil | 0:6ee2b447a1c5 | 132 | |
fil | 1:e6873017e1d2 | 133 | if (tsi.readDistance() == 0){ |
fil | 1:e6873017e1d2 | 134 | activated = 1; |
fil | 1:e6873017e1d2 | 135 | lcd.printf(" \n\n"); |
fil | 0:6ee2b447a1c5 | 136 | break; // get out of the fucking loop you piece of shit |
fil | 1:e6873017e1d2 | 137 | } |
fil | 0:6ee2b447a1c5 | 138 | |
fil | 0:6ee2b447a1c5 | 139 | // built-in loop delay |
fil | 0:6ee2b447a1c5 | 140 | wait(0.1); |
fil | 0:6ee2b447a1c5 | 141 | } |
fil | 0:6ee2b447a1c5 | 142 | |
fil | 0:6ee2b447a1c5 | 143 | // now i get into the nitty gritty - how do i extract the keys themselves |
fil | 1:e6873017e1d2 | 144 | if (activated == 1){ |
fil | 1:e6873017e1d2 | 145 | // positive z direction |
fil | 1:e6873017e1d2 | 146 | if (acc.getAccZ() > 0.8){ |
fil | 1:e6873017e1d2 | 147 | if (thenum <= 8) |
fil | 1:e6873017e1d2 | 148 | keyboard.printf("s"); |
fil | 1:e6873017e1d2 | 149 | else if ((thenum>9) && (thenum<=20)) |
fil | 1:e6873017e1d2 | 150 | keyboard.printf("i"); |
fil | 1:e6873017e1d2 | 151 | else if ((thenum>20) && (thenum<31)) |
fil | 1:e6873017e1d2 | 152 | keyboard.printf("h"); |
fil | 1:e6873017e1d2 | 153 | else |
fil | 1:e6873017e1d2 | 154 | keyboard.printf("d"); |
fil | 1:e6873017e1d2 | 155 | } |
fil | 1:e6873017e1d2 | 156 | // half z half y |
fil | 1:e6873017e1d2 | 157 | else if ((acc.getAccZ() > 0.3 && acc.getAccZ() < 0.8) && (acc.getAccX() < 0.3) && (acc.getAccY() < -0.3 && acc.getAccY() > -0.8)) { |
fil | 1:e6873017e1d2 | 158 | if (thenum <= 10) |
fil | 1:e6873017e1d2 | 159 | keyboard.printf("e"); |
fil | 1:e6873017e1d2 | 160 | else if ((thenum>11) && (thenum<=29)) |
fil | 1:e6873017e1d2 | 161 | keyboard.printf("r"); |
fil | 1:e6873017e1d2 | 162 | else |
fil | 1:e6873017e1d2 | 163 | keyboard.printf("a"); |
fil | 1:e6873017e1d2 | 164 | } |
fil | 1:e6873017e1d2 | 165 | // half z half +x |
fil | 1:e6873017e1d2 | 166 | else if ((acc.getAccZ() > 0.3 && acc.getAccZ() < 0.8) && (acc.getAccX() > 0.3 && acc.getAccX() < 0.8) && (acc.getAccY() < 0.3)) { |
fil | 1:e6873017e1d2 | 167 | if (thenum <= 8) |
fil | 1:e6873017e1d2 | 168 | keyboard.printf("w"); |
fil | 1:e6873017e1d2 | 169 | else if ((thenum>9) && (thenum<=20)) |
fil | 1:e6873017e1d2 | 170 | keyboard.printf("f"); |
fil | 1:e6873017e1d2 | 171 | else if ((thenum>20) && (thenum<31)) |
fil | 1:e6873017e1d2 | 172 | keyboard.printf("g"); |
fil | 1:e6873017e1d2 | 173 | else |
fil | 1:e6873017e1d2 | 174 | keyboard.printf("y"); |
fil | 1:e6873017e1d2 | 175 | } |
fil | 1:e6873017e1d2 | 176 | // half z half -x |
fil | 1:e6873017e1d2 | 177 | else if ((acc.getAccZ() > 0.3 && acc.getAccZ() < 0.8) && (acc.getAccY() < 0.3) && (acc.getAccX() < -0.3 && acc.getAccX() > -0.8)) { |
fil | 1:e6873017e1d2 | 178 | if (thenum <= 8) |
fil | 1:e6873017e1d2 | 179 | keyboard.printf("l"); |
fil | 1:e6873017e1d2 | 180 | else if ((thenum>9) && (thenum<=20)) |
fil | 1:e6873017e1d2 | 181 | keyboard.printf("u"); |
fil | 1:e6873017e1d2 | 182 | else if ((thenum>20) && (thenum<31)) |
fil | 1:e6873017e1d2 | 183 | keyboard.printf("c"); |
fil | 1:e6873017e1d2 | 184 | else |
fil | 1:e6873017e1d2 | 185 | keyboard.printf("m"); |
fil | 1:e6873017e1d2 | 186 | } |
fil | 1:e6873017e1d2 | 187 | // negative y direction |
fil | 1:e6873017e1d2 | 188 | else if (acc.getAccY() < -0.8){ |
fil | 1:e6873017e1d2 | 189 | if (thenum <= 10) |
fil | 1:e6873017e1d2 | 190 | keyboard.printf("t"); |
fil | 1:e6873017e1d2 | 191 | else if ((thenum>11) && (thenum<=29)) |
fil | 1:e6873017e1d2 | 192 | keyboard.printf("o"); |
fil | 1:e6873017e1d2 | 193 | else |
fil | 1:e6873017e1d2 | 194 | keyboard.printf("n"); |
fil | 1:e6873017e1d2 | 195 | } |
fil | 1:e6873017e1d2 | 196 | //positive x direction |
fil | 1:e6873017e1d2 | 197 | else if (acc.getAccX() > 0.8){ |
fil | 1:e6873017e1d2 | 198 | if (thenum <= 8) |
fil | 1:e6873017e1d2 | 199 | keyboard.printf("j"); |
fil | 1:e6873017e1d2 | 200 | else if ((thenum>9) && (thenum<=20)) |
fil | 1:e6873017e1d2 | 201 | keyboard.printf("x"); |
fil | 1:e6873017e1d2 | 202 | else if ((thenum>20) && (thenum<=31)) |
fil | 1:e6873017e1d2 | 203 | keyboard.printf("q"); |
fil | 1:e6873017e1d2 | 204 | else |
fil | 1:e6873017e1d2 | 205 | keyboard.printf("z"); |
fil | 1:e6873017e1d2 | 206 | } |
fil | 1:e6873017e1d2 | 207 | //negative x direction |
fil | 1:e6873017e1d2 | 208 | else if (acc.getAccX() < -0.8){ |
fil | 1:e6873017e1d2 | 209 | if (thenum <= 8) |
fil | 1:e6873017e1d2 | 210 | keyboard.printf("p"); |
fil | 1:e6873017e1d2 | 211 | else if ((thenum>9) && (thenum<=20)) |
fil | 1:e6873017e1d2 | 212 | keyboard.printf("b"); |
fil | 1:e6873017e1d2 | 213 | else if ((thenum>21) && (thenum<=31)) |
fil | 1:e6873017e1d2 | 214 | keyboard.printf("v"); |
fil | 1:e6873017e1d2 | 215 | else |
fil | 1:e6873017e1d2 | 216 | keyboard.printf("k"); |
fil | 1:e6873017e1d2 | 217 | } |
fil | 1:e6873017e1d2 | 218 | } |
fil | 1:e6873017e1d2 | 219 | activated = activated - 1; |
fil | 0:6ee2b447a1c5 | 220 | wait(0.1); |
fil | 0:6ee2b447a1c5 | 221 | } |
fil | 0:6ee2b447a1c5 | 222 | } |