Boundary mods

Dependencies:   USBDevice mbed

Fork of FinalProjectKeyboard by PecMan

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?

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