Will Porter's Hw2 Code - Glove based chording keyboard.
Dependencies: PinDetect_KL25Z mbed
main.cpp@0:dd99cec76b82, 2015-09-14 (annotated)
- Committer:
- wretrop
- Date:
- Mon Sep 14 17:22:39 2015 +0000
- Revision:
- 0:dd99cec76b82
Will Porter finished HW2 Code.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
wretrop | 0:dd99cec76b82 | 1 | #include "mbed.h" |
wretrop | 0:dd99cec76b82 | 2 | #include "PinDetect.h" |
wretrop | 0:dd99cec76b82 | 3 | |
wretrop | 0:dd99cec76b82 | 4 | Serial pc(USBTX,USBRX); |
wretrop | 0:dd99cec76b82 | 5 | |
wretrop | 0:dd99cec76b82 | 6 | char alphabet[] = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','\0'}; |
wretrop | 0:dd99cec76b82 | 7 | int indices[] = {128,64,32,8,4,2,136,132,130,129,72,68,66,65,40,36,34,33,24,20,18,17,96,6,12,3}; |
wretrop | 0:dd99cec76b82 | 8 | |
wretrop | 0:dd99cec76b82 | 9 | DigitalOut highPin(D15); // Pin Used to bring left side buttons high may not be needed |
wretrop | 0:dd99cec76b82 | 10 | bool boolArray[8]; |
wretrop | 0:dd99cec76b82 | 11 | |
wretrop | 0:dd99cec76b82 | 12 | // Left side pins |
wretrop | 0:dd99cec76b82 | 13 | PinDetect L1(PTD3); |
wretrop | 0:dd99cec76b82 | 14 | PinDetect L2(PTD2); |
wretrop | 0:dd99cec76b82 | 15 | PinDetect L3(PTD0); |
wretrop | 0:dd99cec76b82 | 16 | PinDetect L4(PTC8); |
wretrop | 0:dd99cec76b82 | 17 | |
wretrop | 0:dd99cec76b82 | 18 | // Right side pins |
wretrop | 0:dd99cec76b82 | 19 | PinDetect R1(PTA16); |
wretrop | 0:dd99cec76b82 | 20 | PinDetect R2(PTC17); |
wretrop | 0:dd99cec76b82 | 21 | PinDetect R3(PTC16); |
wretrop | 0:dd99cec76b82 | 22 | PinDetect R4(PTC11); |
wretrop | 0:dd99cec76b82 | 23 | |
wretrop | 0:dd99cec76b82 | 24 | // Left Button ISRs |
wretrop | 0:dd99cec76b82 | 25 | void L1ButtonHeld(void){ |
wretrop | 0:dd99cec76b82 | 26 | boolArray[0] = 0; |
wretrop | 0:dd99cec76b82 | 27 | } |
wretrop | 0:dd99cec76b82 | 28 | void L1ButtonRelease(void){ |
wretrop | 0:dd99cec76b82 | 29 | boolArray[0] = 1; |
wretrop | 0:dd99cec76b82 | 30 | } |
wretrop | 0:dd99cec76b82 | 31 | void L2ButtonHeld(void){ |
wretrop | 0:dd99cec76b82 | 32 | boolArray[1] = 0; |
wretrop | 0:dd99cec76b82 | 33 | } |
wretrop | 0:dd99cec76b82 | 34 | void L2ButtonRelease(void){ |
wretrop | 0:dd99cec76b82 | 35 | boolArray[1] = 1; |
wretrop | 0:dd99cec76b82 | 36 | } |
wretrop | 0:dd99cec76b82 | 37 | void L3ButtonHeld(void){ |
wretrop | 0:dd99cec76b82 | 38 | boolArray[2] = 0; |
wretrop | 0:dd99cec76b82 | 39 | } |
wretrop | 0:dd99cec76b82 | 40 | void L3ButtonRelease(void){ |
wretrop | 0:dd99cec76b82 | 41 | boolArray[2] = 1; |
wretrop | 0:dd99cec76b82 | 42 | } |
wretrop | 0:dd99cec76b82 | 43 | void L4ButtonHeld(void){ |
wretrop | 0:dd99cec76b82 | 44 | boolArray[3] = 0; |
wretrop | 0:dd99cec76b82 | 45 | } |
wretrop | 0:dd99cec76b82 | 46 | void L4ButtonRelease(void){ |
wretrop | 0:dd99cec76b82 | 47 | boolArray[3] = 1; |
wretrop | 0:dd99cec76b82 | 48 | } |
wretrop | 0:dd99cec76b82 | 49 | |
wretrop | 0:dd99cec76b82 | 50 | // Right Side ISRs |
wretrop | 0:dd99cec76b82 | 51 | void R1ButtonHeld(void){ |
wretrop | 0:dd99cec76b82 | 52 | boolArray[4] = 0; |
wretrop | 0:dd99cec76b82 | 53 | } |
wretrop | 0:dd99cec76b82 | 54 | void R1ButtonRelease(void){ |
wretrop | 0:dd99cec76b82 | 55 | boolArray[4] = 1; |
wretrop | 0:dd99cec76b82 | 56 | } |
wretrop | 0:dd99cec76b82 | 57 | void R2ButtonHeld(void){ |
wretrop | 0:dd99cec76b82 | 58 | boolArray[5] = 0; |
wretrop | 0:dd99cec76b82 | 59 | } |
wretrop | 0:dd99cec76b82 | 60 | void R2ButtonRelease(void){ |
wretrop | 0:dd99cec76b82 | 61 | boolArray[5] = 1; |
wretrop | 0:dd99cec76b82 | 62 | } |
wretrop | 0:dd99cec76b82 | 63 | void R3ButtonHeld(void){ |
wretrop | 0:dd99cec76b82 | 64 | boolArray[6] = 0; |
wretrop | 0:dd99cec76b82 | 65 | } |
wretrop | 0:dd99cec76b82 | 66 | void R3ButtonRelease(void){ |
wretrop | 0:dd99cec76b82 | 67 | boolArray[6] = 1; |
wretrop | 0:dd99cec76b82 | 68 | } |
wretrop | 0:dd99cec76b82 | 69 | void R4ButtonHeld(void){ |
wretrop | 0:dd99cec76b82 | 70 | boolArray[7] = 0; |
wretrop | 0:dd99cec76b82 | 71 | } |
wretrop | 0:dd99cec76b82 | 72 | void R4ButtonRelease(void){ |
wretrop | 0:dd99cec76b82 | 73 | boolArray[7] = 1; |
wretrop | 0:dd99cec76b82 | 74 | } |
wretrop | 0:dd99cec76b82 | 75 | |
wretrop | 0:dd99cec76b82 | 76 | int main() { |
wretrop | 0:dd99cec76b82 | 77 | pc.printf("Starting\n\r"); |
wretrop | 0:dd99cec76b82 | 78 | highPin = 1; |
wretrop | 0:dd99cec76b82 | 79 | |
wretrop | 0:dd99cec76b82 | 80 | L1.attach_asserted(&L1ButtonHeld); |
wretrop | 0:dd99cec76b82 | 81 | L1.attach_deasserted(&L1ButtonRelease); |
wretrop | 0:dd99cec76b82 | 82 | L1.setSampleFrequency(); |
wretrop | 0:dd99cec76b82 | 83 | L1.mode(PullUp); |
wretrop | 0:dd99cec76b82 | 84 | |
wretrop | 0:dd99cec76b82 | 85 | L2.attach_asserted(&L2ButtonHeld); |
wretrop | 0:dd99cec76b82 | 86 | L2.attach_deasserted(&L2ButtonRelease); |
wretrop | 0:dd99cec76b82 | 87 | L2.setSampleFrequency(); |
wretrop | 0:dd99cec76b82 | 88 | L2.mode(PullUp); |
wretrop | 0:dd99cec76b82 | 89 | |
wretrop | 0:dd99cec76b82 | 90 | L3.attach_asserted(&L3ButtonHeld); |
wretrop | 0:dd99cec76b82 | 91 | L3.attach_deasserted(&L3ButtonRelease); |
wretrop | 0:dd99cec76b82 | 92 | L3.setSampleFrequency(); |
wretrop | 0:dd99cec76b82 | 93 | L3.mode(PullUp); |
wretrop | 0:dd99cec76b82 | 94 | |
wretrop | 0:dd99cec76b82 | 95 | L4.attach_asserted(&L4ButtonHeld); |
wretrop | 0:dd99cec76b82 | 96 | L4.attach_deasserted(&L4ButtonRelease); |
wretrop | 0:dd99cec76b82 | 97 | L4.setSampleFrequency(); |
wretrop | 0:dd99cec76b82 | 98 | L4.mode(PullUp); |
wretrop | 0:dd99cec76b82 | 99 | |
wretrop | 0:dd99cec76b82 | 100 | R1.attach_asserted(&R1ButtonHeld); |
wretrop | 0:dd99cec76b82 | 101 | R1.attach_deasserted(&R1ButtonRelease); |
wretrop | 0:dd99cec76b82 | 102 | R1.setSampleFrequency(); |
wretrop | 0:dd99cec76b82 | 103 | R1.mode(PullUp); |
wretrop | 0:dd99cec76b82 | 104 | |
wretrop | 0:dd99cec76b82 | 105 | R2.attach_asserted(&R2ButtonHeld); |
wretrop | 0:dd99cec76b82 | 106 | R2.attach_deasserted(&R2ButtonRelease); |
wretrop | 0:dd99cec76b82 | 107 | R2.setSampleFrequency(); |
wretrop | 0:dd99cec76b82 | 108 | R2.mode(PullUp); |
wretrop | 0:dd99cec76b82 | 109 | |
wretrop | 0:dd99cec76b82 | 110 | R3.attach_asserted(&R3ButtonHeld); |
wretrop | 0:dd99cec76b82 | 111 | R3.attach_deasserted(&R3ButtonRelease); |
wretrop | 0:dd99cec76b82 | 112 | R3.setSampleFrequency(); |
wretrop | 0:dd99cec76b82 | 113 | R3.mode(PullUp); |
wretrop | 0:dd99cec76b82 | 114 | |
wretrop | 0:dd99cec76b82 | 115 | R4.attach_asserted(&R4ButtonHeld); |
wretrop | 0:dd99cec76b82 | 116 | R4.attach_deasserted(&R4ButtonRelease); |
wretrop | 0:dd99cec76b82 | 117 | R4.setSampleFrequency(); |
wretrop | 0:dd99cec76b82 | 118 | R4.mode(PullUp); |
wretrop | 0:dd99cec76b82 | 119 | |
wretrop | 0:dd99cec76b82 | 120 | while(1) { |
wretrop | 0:dd99cec76b82 | 121 | int num = 0; |
wretrop | 0:dd99cec76b82 | 122 | int pow = 1; |
wretrop | 0:dd99cec76b82 | 123 | |
wretrop | 0:dd99cec76b82 | 124 | for (int i = 7; i>-1; i--){ |
wretrop | 0:dd99cec76b82 | 125 | num = num + boolArray[i] * pow; |
wretrop | 0:dd99cec76b82 | 126 | pow = pow * 2; |
wretrop | 0:dd99cec76b82 | 127 | } |
wretrop | 0:dd99cec76b82 | 128 | |
wretrop | 0:dd99cec76b82 | 129 | for (int i = 0; i < 27; i++){ |
wretrop | 0:dd99cec76b82 | 130 | if (num == indices[i]){ |
wretrop | 0:dd99cec76b82 | 131 | pc.printf("%c",alphabet[i]); |
wretrop | 0:dd99cec76b82 | 132 | } |
wretrop | 0:dd99cec76b82 | 133 | } |
wretrop | 0:dd99cec76b82 | 134 | if (num == 16){ |
wretrop | 0:dd99cec76b82 | 135 | pc.printf("\b \b"); |
wretrop | 0:dd99cec76b82 | 136 | } |
wretrop | 0:dd99cec76b82 | 137 | |
wretrop | 0:dd99cec76b82 | 138 | if (num == 1){ |
wretrop | 0:dd99cec76b82 | 139 | pc.printf(" "); |
wretrop | 0:dd99cec76b82 | 140 | } |
wretrop | 0:dd99cec76b82 | 141 | |
wretrop | 0:dd99cec76b82 | 142 | wait(0.2); |
wretrop | 0:dd99cec76b82 | 143 | } |