Filip Maksimovic HW2 repository

Dependencies:   MMA8451Q TSI TextLCD USBDevice mbed tsi_sensor

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?

UserRevisionLine numberNew 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 }