PecMan
/
FinalProjectKeyboard
Pecman
main.cpp@2:5fec7dd286d2, 2016-04-28 (annotated)
- Committer:
- wretrop
- Date:
- Thu Apr 28 04:56:44 2016 +0000
- Revision:
- 2:5fec7dd286d2
- Parent:
- 1:8546d208bd4f
Good Version
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pedromtz1000 | 0:f23fd07d1d96 | 1 | #include "mbed.h" |
pedromtz1000 | 0:f23fd07d1d96 | 2 | #include "USBKeyboard.h" |
pedromtz1000 | 0:f23fd07d1d96 | 3 | |
pedromtz1000 | 0:f23fd07d1d96 | 4 | Serial pc(USBTX, USBRX); |
pedromtz1000 | 0:f23fd07d1d96 | 5 | |
wretrop | 2:5fec7dd286d2 | 6 | int sumX; // Used for zero averaging |
wretrop | 2:5fec7dd286d2 | 7 | int sumY; // Used for zero averaging |
wretrop | 2:5fec7dd286d2 | 8 | int sumZ; // Used for zero averaging |
wretrop | 2:5fec7dd286d2 | 9 | |
wretrop | 2:5fec7dd286d2 | 10 | // Up/Down Accel // |
wretrop | 2:5fec7dd286d2 | 11 | AnalogIn inputUDx(PTB0); |
wretrop | 2:5fec7dd286d2 | 12 | AnalogIn inputUDy(PTB1); |
wretrop | 2:5fec7dd286d2 | 13 | AnalogIn inputUDz(PTB2); |
wretrop | 2:5fec7dd286d2 | 14 | |
wretrop | 2:5fec7dd286d2 | 15 | int xUD1=0; // X-Offset |
wretrop | 2:5fec7dd286d2 | 16 | int yUD1=0; // Y-Offset |
wretrop | 2:5fec7dd286d2 | 17 | int zUD1=0; // Z-Offset |
wretrop | 2:5fec7dd286d2 | 18 | |
wretrop | 2:5fec7dd286d2 | 19 | int xUD=0; // variable for x axes |
wretrop | 2:5fec7dd286d2 | 20 | int yUD=0; // variable for y axes |
wretrop | 2:5fec7dd286d2 | 21 | int zUD=0; // variable for z axes |
pedromtz1000 | 0:f23fd07d1d96 | 22 | |
wretrop | 2:5fec7dd286d2 | 23 | // ----------- // |
wretrop | 2:5fec7dd286d2 | 24 | |
wretrop | 2:5fec7dd286d2 | 25 | // Left/Right Accel // |
wretrop | 2:5fec7dd286d2 | 26 | AnalogIn inputLRx(PTB3); |
wretrop | 2:5fec7dd286d2 | 27 | AnalogIn inputLRy(PTC2); |
wretrop | 2:5fec7dd286d2 | 28 | AnalogIn inputLRz(PTC1); |
wretrop | 1:8546d208bd4f | 29 | |
wretrop | 2:5fec7dd286d2 | 30 | int xLR1=0; // X-Offset |
wretrop | 2:5fec7dd286d2 | 31 | int yLR1=0; // Y-Offset |
wretrop | 2:5fec7dd286d2 | 32 | int zLR1=0; // Z-Offset |
wretrop | 1:8546d208bd4f | 33 | |
wretrop | 2:5fec7dd286d2 | 34 | int xLR=0; // variable for x axes |
wretrop | 2:5fec7dd286d2 | 35 | int yLR=0; // variable for y axes |
wretrop | 2:5fec7dd286d2 | 36 | int zLR=0; // variable for z axes |
wretrop | 2:5fec7dd286d2 | 37 | // ----------- // |
wretrop | 2:5fec7dd286d2 | 38 | |
wretrop | 2:5fec7dd286d2 | 39 | // Debugging LEDs // |
wretrop | 1:8546d208bd4f | 40 | PwmOut led1(LED1); |
wretrop | 1:8546d208bd4f | 41 | PwmOut led2(LED2); |
wretrop | 1:8546d208bd4f | 42 | PwmOut led3(LED3); |
wretrop | 2:5fec7dd286d2 | 43 | // ----------- // |
wretrop | 1:8546d208bd4f | 44 | |
wretrop | 2:5fec7dd286d2 | 45 | // ISRs // |
wretrop | 2:5fec7dd286d2 | 46 | Timeout debounceUp; |
wretrop | 2:5fec7dd286d2 | 47 | Timeout debounceDown; |
wretrop | 2:5fec7dd286d2 | 48 | Timeout debounceLeft; |
wretrop | 2:5fec7dd286d2 | 49 | Timeout debounceRight; |
wretrop | 1:8546d208bd4f | 50 | |
wretrop | 2:5fec7dd286d2 | 51 | Timeout middleUp; |
wretrop | 2:5fec7dd286d2 | 52 | Timeout middleDown; |
wretrop | 2:5fec7dd286d2 | 53 | Timeout middleLeft; |
wretrop | 2:5fec7dd286d2 | 54 | Timeout middleRight; |
wretrop | 1:8546d208bd4f | 55 | |
wretrop | 2:5fec7dd286d2 | 56 | bool mFUp = 1; |
wretrop | 2:5fec7dd286d2 | 57 | bool mFDown = 1; |
wretrop | 2:5fec7dd286d2 | 58 | bool mFLeft = 1; |
wretrop | 2:5fec7dd286d2 | 59 | bool mFRight = 1; |
wretrop | 1:8546d208bd4f | 60 | |
wretrop | 1:8546d208bd4f | 61 | bool dwn = 0; |
wretrop | 1:8546d208bd4f | 62 | bool up = 0; |
wretrop | 2:5fec7dd286d2 | 63 | bool lft = 0; |
wretrop | 2:5fec7dd286d2 | 64 | bool rht = 0; |
wretrop | 1:8546d208bd4f | 65 | |
wretrop | 2:5fec7dd286d2 | 66 | // Debounce ISRs // |
wretrop | 2:5fec7dd286d2 | 67 | void DBUp(){up = 0;} |
wretrop | 2:5fec7dd286d2 | 68 | |
wretrop | 2:5fec7dd286d2 | 69 | void DBDown(){dwn = 0;} |
wretrop | 2:5fec7dd286d2 | 70 | |
wretrop | 2:5fec7dd286d2 | 71 | void DBLeft(){lft = 0;} |
wretrop | 2:5fec7dd286d2 | 72 | |
wretrop | 2:5fec7dd286d2 | 73 | void DBRight(){rht = 0;} |
wretrop | 1:8546d208bd4f | 74 | |
wretrop | 2:5fec7dd286d2 | 75 | //---------------// |
wretrop | 2:5fec7dd286d2 | 76 | |
wretrop | 2:5fec7dd286d2 | 77 | // Middle Flag ISRs// |
wretrop | 2:5fec7dd286d2 | 78 | void midUp(){mFUp = 1;} |
wretrop | 1:8546d208bd4f | 79 | |
wretrop | 2:5fec7dd286d2 | 80 | void midDown(){mFDown = 1;} |
wretrop | 1:8546d208bd4f | 81 | |
wretrop | 2:5fec7dd286d2 | 82 | void midLeft(){mFLeft = 1;} |
wretrop | 2:5fec7dd286d2 | 83 | |
wretrop | 2:5fec7dd286d2 | 84 | void midRight(){mFRight = 1;} |
wretrop | 2:5fec7dd286d2 | 85 | //---------------// |
pedromtz1000 | 0:f23fd07d1d96 | 86 | |
pedromtz1000 | 0:f23fd07d1d96 | 87 | int main() { |
wretrop | 2:5fec7dd286d2 | 88 | pc.baud(9600); |
wretrop | 2:5fec7dd286d2 | 89 | wait(1); |
pedromtz1000 | 0:f23fd07d1d96 | 90 | |
wretrop | 2:5fec7dd286d2 | 91 | for(int i =0; i < 10;i++){ |
wretrop | 2:5fec7dd286d2 | 92 | xUD = inputUDx.read_u16(); |
wretrop | 2:5fec7dd286d2 | 93 | yUD = inputUDy.read_u16(); |
wretrop | 2:5fec7dd286d2 | 94 | zUD = inputUDz.read_u16(); |
wretrop | 2:5fec7dd286d2 | 95 | sumX += xUD; |
wretrop | 2:5fec7dd286d2 | 96 | sumY += yUD; |
wretrop | 2:5fec7dd286d2 | 97 | sumZ += zUD; |
wretrop | 1:8546d208bd4f | 98 | } |
pedromtz1000 | 0:f23fd07d1d96 | 99 | |
wretrop | 2:5fec7dd286d2 | 100 | xUD1 = sumX/10; |
wretrop | 2:5fec7dd286d2 | 101 | yUD1 = sumY/10; |
wretrop | 2:5fec7dd286d2 | 102 | zUD1 = sumZ/10; |
wretrop | 2:5fec7dd286d2 | 103 | |
wretrop | 2:5fec7dd286d2 | 104 | sumX = 0; // Reset sum terms for LR controller |
wretrop | 2:5fec7dd286d2 | 105 | sumY = 0; |
wretrop | 2:5fec7dd286d2 | 106 | sumZ = 0; |
pedromtz1000 | 0:f23fd07d1d96 | 107 | |
wretrop | 2:5fec7dd286d2 | 108 | for(int i =0; i < 10;i++){ |
wretrop | 2:5fec7dd286d2 | 109 | xLR = inputLRx.read_u16(); |
wretrop | 2:5fec7dd286d2 | 110 | yLR = inputLRy.read_u16(); |
wretrop | 2:5fec7dd286d2 | 111 | zLR = inputLRz.read_u16(); |
wretrop | 2:5fec7dd286d2 | 112 | sumX += xLR; |
wretrop | 2:5fec7dd286d2 | 113 | sumY += yLR; |
wretrop | 2:5fec7dd286d2 | 114 | sumZ += zLR; |
wretrop | 2:5fec7dd286d2 | 115 | } |
wretrop | 2:5fec7dd286d2 | 116 | |
wretrop | 2:5fec7dd286d2 | 117 | xLR1 = sumX/10; |
wretrop | 2:5fec7dd286d2 | 118 | yLR1 = sumY/10; |
wretrop | 2:5fec7dd286d2 | 119 | zLR1 = sumZ/10; |
wretrop | 2:5fec7dd286d2 | 120 | |
wretrop | 2:5fec7dd286d2 | 121 | USBKeyboard keyboard; |
wretrop | 2:5fec7dd286d2 | 122 | while (true) { |
wretrop | 2:5fec7dd286d2 | 123 | // Up/Down Read |
wretrop | 2:5fec7dd286d2 | 124 | xUD = inputUDx.read_u16()-xUD1; |
wretrop | 2:5fec7dd286d2 | 125 | yUD = inputUDy.read_u16()-yUD1; |
wretrop | 2:5fec7dd286d2 | 126 | zUD = inputUDz.read_u16()-zUD1; |
wretrop | 2:5fec7dd286d2 | 127 | |
wretrop | 2:5fec7dd286d2 | 128 | // Left/Right Read |
wretrop | 2:5fec7dd286d2 | 129 | xLR = inputLRx.read_u16()-xLR1; |
wretrop | 2:5fec7dd286d2 | 130 | yLR = inputLRy.read_u16()-yLR1; |
wretrop | 2:5fec7dd286d2 | 131 | zLR = inputLRz.read_u16()-zLR1; |
wretrop | 1:8546d208bd4f | 132 | |
wretrop | 1:8546d208bd4f | 133 | |
wretrop | 2:5fec7dd286d2 | 134 | //Establish Up |
wretrop | 2:5fec7dd286d2 | 135 | if (xUD > -800 && yUD < 1500 && up == 0) { |
wretrop | 1:8546d208bd4f | 136 | keyboard.keyCode(UP_ARROW); |
wretrop | 1:8546d208bd4f | 137 | led1 = 1; |
wretrop | 1:8546d208bd4f | 138 | led2 = 0.9; |
wretrop | 1:8546d208bd4f | 139 | led3 = 1; |
wretrop | 1:8546d208bd4f | 140 | up = 1; |
wretrop | 1:8546d208bd4f | 141 | debounceUp.attach(&DBDown, 0.100); |
wretrop | 2:5fec7dd286d2 | 142 | } |
wretrop | 2:5fec7dd286d2 | 143 | |
wretrop | 2:5fec7dd286d2 | 144 | //Establish Down |
wretrop | 2:5fec7dd286d2 | 145 | if(xUD < -3500 && yUD > 5000 && dwn == 0) { |
wretrop | 2:5fec7dd286d2 | 146 | keyboard.keyCode(DOWN_ARROW); |
wretrop | 2:5fec7dd286d2 | 147 | led1 = 1; |
wretrop | 2:5fec7dd286d2 | 148 | led2 = 1; |
wretrop | 2:5fec7dd286d2 | 149 | led3 = 0.9; |
wretrop | 2:5fec7dd286d2 | 150 | dwn = 1; |
wretrop | 2:5fec7dd286d2 | 151 | debounceDown.attach(&DBUp, 0.100); |
wretrop | 1:8546d208bd4f | 152 | } |
pedromtz1000 | 0:f23fd07d1d96 | 153 | |
wretrop | 2:5fec7dd286d2 | 154 | //Establish Left |
wretrop | 2:5fec7dd286d2 | 155 | if (xLR > -800 && yLR < 1500 && lft == 0) { |
wretrop | 2:5fec7dd286d2 | 156 | keyboard.keyCode(LEFT_ARROW); |
wretrop | 2:5fec7dd286d2 | 157 | led1 = 1; |
wretrop | 2:5fec7dd286d2 | 158 | led2 = 0.9; |
wretrop | 2:5fec7dd286d2 | 159 | led3 = 1; |
wretrop | 2:5fec7dd286d2 | 160 | lft = 1; |
wretrop | 2:5fec7dd286d2 | 161 | debounceRight.attach(&DBRight, 0.100); |
wretrop | 1:8546d208bd4f | 162 | } |
pedromtz1000 | 0:f23fd07d1d96 | 163 | |
wretrop | 2:5fec7dd286d2 | 164 | //Establish Right |
wretrop | 2:5fec7dd286d2 | 165 | if(xLR < -3500 && yLR > 5000 && rht == 0) { |
wretrop | 2:5fec7dd286d2 | 166 | keyboard.keyCode(RIGHT_ARROW); |
wretrop | 2:5fec7dd286d2 | 167 | led1 = 1; |
wretrop | 2:5fec7dd286d2 | 168 | led2 = 1; |
wretrop | 2:5fec7dd286d2 | 169 | led3 = 0.9; |
wretrop | 2:5fec7dd286d2 | 170 | rht = 1; |
wretrop | 2:5fec7dd286d2 | 171 | debounceLeft.attach(&DBLeft, 0.100); |
wretrop | 2:5fec7dd286d2 | 172 | } |
pedromtz1000 | 0:f23fd07d1d96 | 173 | //When not moving |
wretrop | 2:5fec7dd286d2 | 174 | if (xUD < -2000 && xUD > -3000 && yUD < 4000 && yUD > 3000 && mFUp == 1){ |
wretrop | 1:8546d208bd4f | 175 | up = 0; |
wretrop | 2:5fec7dd286d2 | 176 | mFUp = 0; |
wretrop | 2:5fec7dd286d2 | 177 | middleUp.attach(&midUp,0.50); |
wretrop | 1:8546d208bd4f | 178 | led1 = 0.9; |
wretrop | 1:8546d208bd4f | 179 | led2 = 1; |
wretrop | 1:8546d208bd4f | 180 | led3 = 1; |
wretrop | 2:5fec7dd286d2 | 181 | } // end if |
wretrop | 1:8546d208bd4f | 182 | |
wretrop | 2:5fec7dd286d2 | 183 | if (xUD < -1000 && xUD > -2800 && yUD < 3000 && yUD > 2000 && mFDown == 1){ |
wretrop | 1:8546d208bd4f | 184 | dwn = 0; |
wretrop | 2:5fec7dd286d2 | 185 | mFDown = 0; |
wretrop | 2:5fec7dd286d2 | 186 | middleDown.attach(&midDown,0.50); |
wretrop | 1:8546d208bd4f | 187 | led1 = 0.9; |
wretrop | 1:8546d208bd4f | 188 | led2 = 0.9; |
wretrop | 1:8546d208bd4f | 189 | led3 = 1; |
wretrop | 2:5fec7dd286d2 | 190 | } // end if |
wretrop | 2:5fec7dd286d2 | 191 | |
wretrop | 2:5fec7dd286d2 | 192 | if (xLR < -2000 && xLR > -3000 && yLR < 4000 && yLR > 3000 && mFLeft == 1){ |
wretrop | 2:5fec7dd286d2 | 193 | lft = 0; |
wretrop | 2:5fec7dd286d2 | 194 | mFLeft = 0; |
wretrop | 2:5fec7dd286d2 | 195 | middleLeft.attach(&midLeft,0.50); |
wretrop | 2:5fec7dd286d2 | 196 | led1 = 0.9; |
wretrop | 2:5fec7dd286d2 | 197 | led2 = 1; |
wretrop | 2:5fec7dd286d2 | 198 | led3 = 1; |
wretrop | 2:5fec7dd286d2 | 199 | } // end if |
wretrop | 2:5fec7dd286d2 | 200 | |
wretrop | 2:5fec7dd286d2 | 201 | if (xLR < -1000 && xLR > -2800 && yLR < 3000 && yLR > 2000 && mFRight == 1){ |
wretrop | 2:5fec7dd286d2 | 202 | rht = 0; |
wretrop | 2:5fec7dd286d2 | 203 | mFRight = 0; |
wretrop | 2:5fec7dd286d2 | 204 | middleRight.attach(&midRight,0.50); |
wretrop | 2:5fec7dd286d2 | 205 | led1 = 0.9; |
wretrop | 2:5fec7dd286d2 | 206 | led2 = 0.9; |
wretrop | 2:5fec7dd286d2 | 207 | led3 = 1; |
wretrop | 2:5fec7dd286d2 | 208 | } // end if |
pedromtz1000 | 0:f23fd07d1d96 | 209 | |
pedromtz1000 | 0:f23fd07d1d96 | 210 | wait_ms(50); |
wretrop | 2:5fec7dd286d2 | 211 | } // end while |
wretrop | 2:5fec7dd286d2 | 212 | } // end main |