Code for text entry device-Type using sign language

Dependencies:   PinDetect_KL25Z USBDevice mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "USBKeyboard.h" 
00003 #include "PinDetect.h"  
00004 
00005 PinDetect key1(D1), key2(D2), key3(D3), key4(D4), key5(D5), key6(D6), key7(D7), key8(D8), key9(D9), key10(D10), key11(D11), key12(D12), key13(D13);
00006 //IMPORTANT Keys 1, 7, and 13 were not used in the code below to keep my total switches used to 10. However, those pins can be added so that the entire alphabet can be properly signed. 
00007 //Without them there are a couple letters that are signed differently than the actual way. 
00008 
00009 int key1Stat;
00010 int key2Stat;
00011 int key3Stat;
00012 int key4Stat;
00013 int key5Stat;
00014 int key6Stat;
00015 int key7Stat;
00016 int key8Stat;
00017 int key9Stat;
00018 int key10Stat;
00019 int key11Stat;
00020 int key12Stat;
00021 int key13Stat;
00022 int totalKeys1;
00023 int totalKeys;
00024 int value;
00025 int i;
00026 char letter;
00027 int keyNumbers[]={39036, 4126, 32798, 2047, 34814, 32767, 2174, 63, 8191, 10365, 255, 2205, 4222, 6142, 16383, 511, 158, 127, 10396, 34972, 732, 221, 31, 2716, 34941, 68219, 4095, 542, 2078};
00028 char keyLetters [] ={'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', ' ', '\b', '\n'};
00029                 
00030 //keyNumbers is an array of unique values that correspond to a combinations of buttos pressed to form a letter that matches in its position in the array to a letter in keyLetters
00031 
00032 USBKeyboard key;
00033 
00034 void key1on(void){ // These functions give a particular value to a key when pressed
00035     key1Stat = 5;
00036     }
00037 void key2on(void){
00038     key2Stat = 31;
00039     }
00040 void key3on(void){
00041     key3Stat = 63;
00042     }
00043 void key4on(void){
00044     key4Stat= 127;
00045     }
00046 void key5on(void){
00047     key5Stat = 255;
00048     }
00049 void key6on(void){
00050     key6Stat = 511;
00051     }
00052 void key7on(void){
00053     key7Stat = 1023;
00054     }
00055 void key8on(void){
00056     key8Stat = 2047;
00057     }
00058 void key9on(void){
00059     key9Stat = 4095;
00060     }
00061 void key10on(void){
00062     key10Stat = 8191;
00063     }
00064 void key11on(void){
00065     key11Stat = 16383;
00066     }
00067 void key12on(void){
00068     key12Stat = 32767;
00069     }
00070 void key13on(void){
00071     key13Stat = 65535;
00072     }
00073 
00074 int main() {
00075     
00076     key1.mode(PullUp); //set the pins to pullup mode
00077     key2.mode(PullUp);
00078     key3.mode(PullUp);
00079     key4.mode(PullUp);
00080     key5.mode(PullUp);
00081     key6.mode(PullUp);
00082     key7.mode(PullUp);
00083     key8.mode(PullUp);
00084     key9.mode(PullUp);
00085     key10.mode(PullUp);
00086     key11.mode(PullUp);
00087     key12.mode(PullUp);
00088     key13.mode(PullUp);
00089     
00090     key1.setSampleFrequency(); //Set the sampling frequency for each pin
00091     key2.setSampleFrequency();
00092     key3.setSampleFrequency();
00093     key4.setSampleFrequency();
00094     key5.setSampleFrequency();
00095     key6.setSampleFrequency();
00096     key7.setSampleFrequency();
00097     key8.setSampleFrequency();
00098     key9.setSampleFrequency();
00099     key10.setSampleFrequency();
00100     key11.setSampleFrequency();
00101     key12.setSampleFrequency();
00102     key13.setSampleFrequency();
00103     
00104     key1.attach_asserted(&key1on); //in pull up mode this checks to see if a button is pressed
00105     key2.attach_asserted(&key2on);
00106     key3.attach_asserted(&key3on);
00107     key4.attach_asserted(&key4on);
00108     key5.attach_asserted(&key5on);
00109     key6.attach_asserted(&key6on);
00110     key7.attach_asserted(&key7on);
00111     key8.attach_asserted(&key8on);
00112     key9.attach_asserted(&key9on);
00113     key10.attach_asserted(&key10on);
00114     key11.attach_asserted(&key11on);
00115     key12.attach_asserted(&key12on);
00116     key13.attach_asserted(&key13on);
00117     
00118     while(1) {
00119         i=0;
00120         value=0;
00121         totalKeys1= key1Stat + key2Stat + key3Stat + key4Stat + key5Stat + key6Stat + key7Stat + key8Stat + key9Stat + key10Stat + key11Stat + key12Stat + key13Stat; //Sum the values of the buttons that are pressed
00122         wait(0.3);
00123         totalKeys= key1Stat + key2Stat + key3Stat + key4Stat + key5Stat + key6Stat + key7Stat + key8Stat + key9Stat + key10Stat + key11Stat + key12Stat + key13Stat; // Sum again after some time for debouncing 
00124 
00125       if (totalKeys > 0 && totalKeys1==totalKeys) { 
00126         while (totalKeys != value && i < sizeof(keyNumbers)){
00127             value = keyNumbers[i+1]; //see if the sum matches one of the values in the array of numbers that correspond to a letter
00128             i++;
00129         
00130             }
00131         
00132         key.printf("%c",keyLetters[i]); //print the letter that corresponds to the value in the keyNumbers Array
00133         key1Stat=0; //make sure to set all the states of the keys back to zero
00134         key2Stat=0;
00135         key3Stat=0;
00136         key4Stat=0;
00137         key5Stat=0;
00138         key6Stat=0;
00139         key7Stat=0;
00140         key8Stat=0;
00141         key9Stat=0;
00142         key10Stat=0;
00143         key11Stat=0;
00144         key12Stat=0;
00145         key13Stat=0;
00146         
00147              }                                                                                                                                                                                          
00148              }
00149     }