Will Porter's Hw2 Code - Glove based chording keyboard.

Dependencies:   PinDetect_KL25Z mbed

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?

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