Code for HW2
Dependencies: PinDetect_KL25Z mbed
main.cpp@1:bfa2670a39ec, 2015-09-14 (annotated)
- Committer:
- adithya_murali
- Date:
- Mon Sep 14 17:02:24 2015 +0000
- Revision:
- 1:bfa2670a39ec
- Parent:
- 0:3a6058dfb909
Code for HW2
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
adithya_murali | 0:3a6058dfb909 | 1 | #include "mbed.h" |
adithya_murali | 0:3a6058dfb909 | 2 | #include "PinDetect.h" |
adithya_murali | 0:3a6058dfb909 | 3 | |
adithya_murali | 0:3a6058dfb909 | 4 | /*CS294 HW2 - Text Entry code. */ |
adithya_murali | 0:3a6058dfb909 | 5 | |
adithya_murali | 0:3a6058dfb909 | 6 | Serial pc(USBTX, USBRX); |
adithya_murali | 0:3a6058dfb909 | 7 | |
adithya_murali | 0:3a6058dfb909 | 8 | PinDetect button1(D2); |
adithya_murali | 0:3a6058dfb909 | 9 | PinDetect button2(D3); |
adithya_murali | 0:3a6058dfb909 | 10 | PinDetect button3(D4); |
adithya_murali | 0:3a6058dfb909 | 11 | PinDetect button4(D5); |
adithya_murali | 0:3a6058dfb909 | 12 | PinDetect button5(D6); |
adithya_murali | 0:3a6058dfb909 | 13 | PinDetect button6(D7); |
adithya_murali | 0:3a6058dfb909 | 14 | PinDetect button7(D8); |
adithya_murali | 0:3a6058dfb909 | 15 | PinDetect button8(D9); |
adithya_murali | 0:3a6058dfb909 | 16 | PinDetect button9(D10); |
adithya_murali | 0:3a6058dfb909 | 17 | /*Reserved for Space bar*/ |
adithya_murali | 0:3a6058dfb909 | 18 | PinDetect button10(D11); |
adithya_murali | 0:3a6058dfb909 | 19 | |
adithya_murali | 0:3a6058dfb909 | 20 | int state[10]; |
adithya_murali | 0:3a6058dfb909 | 21 | |
adithya_murali | 0:3a6058dfb909 | 22 | int alphabet_map[] = {'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',' '}; |
adithya_murali | 0:3a6058dfb909 | 23 | |
adithya_murali | 0:3a6058dfb909 | 24 | void button1_pressed() { |
adithya_murali | 0:3a6058dfb909 | 25 | state[0] = 1; |
adithya_murali | 0:3a6058dfb909 | 26 | } |
adithya_murali | 0:3a6058dfb909 | 27 | void button2_pressed() { |
adithya_murali | 0:3a6058dfb909 | 28 | state[1] = 1; |
adithya_murali | 0:3a6058dfb909 | 29 | } |
adithya_murali | 0:3a6058dfb909 | 30 | void button3_pressed() { |
adithya_murali | 0:3a6058dfb909 | 31 | state[2] = 1; |
adithya_murali | 0:3a6058dfb909 | 32 | } |
adithya_murali | 0:3a6058dfb909 | 33 | void button4_pressed() { |
adithya_murali | 0:3a6058dfb909 | 34 | state[3] = 1; |
adithya_murali | 0:3a6058dfb909 | 35 | } |
adithya_murali | 0:3a6058dfb909 | 36 | void button5_pressed() { |
adithya_murali | 0:3a6058dfb909 | 37 | state[4] = 1; |
adithya_murali | 0:3a6058dfb909 | 38 | } |
adithya_murali | 0:3a6058dfb909 | 39 | void button6_pressed() { |
adithya_murali | 0:3a6058dfb909 | 40 | state[5] = 1; |
adithya_murali | 0:3a6058dfb909 | 41 | } |
adithya_murali | 0:3a6058dfb909 | 42 | void button7_pressed() { |
adithya_murali | 0:3a6058dfb909 | 43 | state[6] = 1; |
adithya_murali | 0:3a6058dfb909 | 44 | } |
adithya_murali | 0:3a6058dfb909 | 45 | void button8_pressed() { |
adithya_murali | 0:3a6058dfb909 | 46 | state[7] = 1; |
adithya_murali | 0:3a6058dfb909 | 47 | } |
adithya_murali | 0:3a6058dfb909 | 48 | void button9_pressed() { |
adithya_murali | 0:3a6058dfb909 | 49 | state[8] = 1; |
adithya_murali | 0:3a6058dfb909 | 50 | } |
adithya_murali | 0:3a6058dfb909 | 51 | void button10_pressed() { |
adithya_murali | 0:3a6058dfb909 | 52 | state[9] = 1; |
adithya_murali | 0:3a6058dfb909 | 53 | } |
adithya_murali | 0:3a6058dfb909 | 54 | |
adithya_murali | 0:3a6058dfb909 | 55 | void button1_released() { |
adithya_murali | 0:3a6058dfb909 | 56 | state[0] = 0; |
adithya_murali | 0:3a6058dfb909 | 57 | } |
adithya_murali | 0:3a6058dfb909 | 58 | void button2_released() { |
adithya_murali | 0:3a6058dfb909 | 59 | state[1] = 0; |
adithya_murali | 0:3a6058dfb909 | 60 | } |
adithya_murali | 0:3a6058dfb909 | 61 | void button3_released() { |
adithya_murali | 0:3a6058dfb909 | 62 | state[2] = 0; |
adithya_murali | 0:3a6058dfb909 | 63 | } |
adithya_murali | 0:3a6058dfb909 | 64 | void button4_released() { |
adithya_murali | 0:3a6058dfb909 | 65 | state[3] = 0; |
adithya_murali | 0:3a6058dfb909 | 66 | } |
adithya_murali | 0:3a6058dfb909 | 67 | void button5_released() { |
adithya_murali | 0:3a6058dfb909 | 68 | state[4] = 0; |
adithya_murali | 0:3a6058dfb909 | 69 | } |
adithya_murali | 0:3a6058dfb909 | 70 | void button6_released() { |
adithya_murali | 0:3a6058dfb909 | 71 | state[5] = 0; |
adithya_murali | 0:3a6058dfb909 | 72 | } |
adithya_murali | 0:3a6058dfb909 | 73 | void button7_released() { |
adithya_murali | 0:3a6058dfb909 | 74 | state[6] = 0; |
adithya_murali | 0:3a6058dfb909 | 75 | } |
adithya_murali | 0:3a6058dfb909 | 76 | void button8_released() { |
adithya_murali | 0:3a6058dfb909 | 77 | state[7] = 0; |
adithya_murali | 0:3a6058dfb909 | 78 | } |
adithya_murali | 0:3a6058dfb909 | 79 | void button9_released() { |
adithya_murali | 0:3a6058dfb909 | 80 | state[8] = 0; |
adithya_murali | 0:3a6058dfb909 | 81 | } |
adithya_murali | 0:3a6058dfb909 | 82 | void button10_released() { |
adithya_murali | 0:3a6058dfb909 | 83 | state[9] = 0; |
adithya_murali | 0:3a6058dfb909 | 84 | } |
adithya_murali | 0:3a6058dfb909 | 85 | |
adithya_murali | 0:3a6058dfb909 | 86 | /* Function that performs Text-Entry algorithm. |
adithya_murali | 0:3a6058dfb909 | 87 | Input: Button state array. |
adithya_murali | 0:3a6058dfb909 | 88 | Output: Next character to display. */ |
adithya_murali | 0:3a6058dfb909 | 89 | char get_next_char(int state[]) { |
adithya_murali | 0:3a6058dfb909 | 90 | char next_char; |
adithya_murali | 0:3a6058dfb909 | 91 | if (state[9]) { |
adithya_murali | 0:3a6058dfb909 | 92 | /*Space bar*/ |
adithya_murali | 0:3a6058dfb909 | 93 | next_char = alphabet_map[26]; |
adithya_murali | 0:3a6058dfb909 | 94 | } else if (state[0]) { |
adithya_murali | 0:3a6058dfb909 | 95 | /*A - H*/ |
adithya_murali | 0:3a6058dfb909 | 96 | for (int j = 1; j < 9; j++) { |
adithya_murali | 0:3a6058dfb909 | 97 | if (state[j]) { |
adithya_murali | 0:3a6058dfb909 | 98 | next_char = alphabet_map[j - 1]; |
adithya_murali | 0:3a6058dfb909 | 99 | break; |
adithya_murali | 0:3a6058dfb909 | 100 | } |
adithya_murali | 0:3a6058dfb909 | 101 | } |
adithya_murali | 0:3a6058dfb909 | 102 | } else if (state[1]) { |
adithya_murali | 0:3a6058dfb909 | 103 | /*I - O*/ |
adithya_murali | 0:3a6058dfb909 | 104 | for (int j = 2; j < 9; j++) { |
adithya_murali | 0:3a6058dfb909 | 105 | if (state[j]) { |
adithya_murali | 0:3a6058dfb909 | 106 | next_char = alphabet_map[j + 6]; |
adithya_murali | 0:3a6058dfb909 | 107 | break; |
adithya_murali | 0:3a6058dfb909 | 108 | } |
adithya_murali | 0:3a6058dfb909 | 109 | } |
adithya_murali | 0:3a6058dfb909 | 110 | } else if (state[2]) { |
adithya_murali | 0:3a6058dfb909 | 111 | /*P - U*/ |
adithya_murali | 0:3a6058dfb909 | 112 | for (int j = 3; j < 9; j++) { |
adithya_murali | 0:3a6058dfb909 | 113 | if (state[j]) { |
adithya_murali | 0:3a6058dfb909 | 114 | next_char = alphabet_map[j + 12]; |
adithya_murali | 0:3a6058dfb909 | 115 | break; |
adithya_murali | 0:3a6058dfb909 | 116 | } |
adithya_murali | 0:3a6058dfb909 | 117 | } |
adithya_murali | 0:3a6058dfb909 | 118 | } else if (state[3]) { |
adithya_murali | 0:3a6058dfb909 | 119 | /*V - Z*/ |
adithya_murali | 0:3a6058dfb909 | 120 | for (int j = 4; j < 9; j++) { |
adithya_murali | 0:3a6058dfb909 | 121 | if (state[j]) { |
adithya_murali | 0:3a6058dfb909 | 122 | next_char = alphabet_map[j + 17]; |
adithya_murali | 0:3a6058dfb909 | 123 | break; |
adithya_murali | 0:3a6058dfb909 | 124 | } |
adithya_murali | 0:3a6058dfb909 | 125 | } |
adithya_murali | 0:3a6058dfb909 | 126 | } else { |
adithya_murali | 0:3a6058dfb909 | 127 | next_char = NULL; |
adithya_murali | 0:3a6058dfb909 | 128 | } |
adithya_murali | 0:3a6058dfb909 | 129 | return next_char; |
adithya_murali | 0:3a6058dfb909 | 130 | } |
adithya_murali | 0:3a6058dfb909 | 131 | |
adithya_murali | 0:3a6058dfb909 | 132 | int main() { |
adithya_murali | 0:3a6058dfb909 | 133 | |
adithya_murali | 0:3a6058dfb909 | 134 | /* Setup buttons. */ |
adithya_murali | 0:3a6058dfb909 | 135 | button1.mode(PullDown); |
adithya_murali | 0:3a6058dfb909 | 136 | button2.mode(PullDown); |
adithya_murali | 0:3a6058dfb909 | 137 | button3.mode(PullDown); |
adithya_murali | 0:3a6058dfb909 | 138 | button4.mode(PullDown); |
adithya_murali | 0:3a6058dfb909 | 139 | button5.mode(PullDown); |
adithya_murali | 0:3a6058dfb909 | 140 | button6.mode(PullDown); |
adithya_murali | 0:3a6058dfb909 | 141 | button7.mode(PullDown); |
adithya_murali | 0:3a6058dfb909 | 142 | button8.mode(PullDown); |
adithya_murali | 0:3a6058dfb909 | 143 | button9.mode(PullDown); |
adithya_murali | 0:3a6058dfb909 | 144 | button10.mode(PullDown); |
adithya_murali | 0:3a6058dfb909 | 145 | |
adithya_murali | 0:3a6058dfb909 | 146 | /*Add callback functions for events when buttons are pressed. */ |
adithya_murali | 0:3a6058dfb909 | 147 | button1.attach_asserted(&button1_pressed); |
adithya_murali | 0:3a6058dfb909 | 148 | button2.attach_asserted(&button2_pressed); |
adithya_murali | 0:3a6058dfb909 | 149 | button3.attach_asserted(&button3_pressed); |
adithya_murali | 0:3a6058dfb909 | 150 | button4.attach_asserted(&button4_pressed); |
adithya_murali | 0:3a6058dfb909 | 151 | button5.attach_asserted(&button5_pressed); |
adithya_murali | 0:3a6058dfb909 | 152 | button6.attach_asserted(&button6_pressed); |
adithya_murali | 0:3a6058dfb909 | 153 | button7.attach_asserted(&button7_pressed); |
adithya_murali | 0:3a6058dfb909 | 154 | button8.attach_asserted(&button8_pressed); |
adithya_murali | 0:3a6058dfb909 | 155 | button9.attach_asserted(&button9_pressed); |
adithya_murali | 0:3a6058dfb909 | 156 | button10.attach_asserted(&button10_pressed); |
adithya_murali | 0:3a6058dfb909 | 157 | |
adithya_murali | 0:3a6058dfb909 | 158 | /*Add callback functions for events when buttons are released. */ |
adithya_murali | 0:3a6058dfb909 | 159 | button1.attach_deasserted(&button1_released); |
adithya_murali | 0:3a6058dfb909 | 160 | button2.attach_deasserted(&button2_released); |
adithya_murali | 0:3a6058dfb909 | 161 | button3.attach_deasserted(&button3_released); |
adithya_murali | 0:3a6058dfb909 | 162 | button4.attach_deasserted(&button4_released); |
adithya_murali | 0:3a6058dfb909 | 163 | button5.attach_deasserted(&button5_released); |
adithya_murali | 0:3a6058dfb909 | 164 | button6.attach_deasserted(&button6_released); |
adithya_murali | 0:3a6058dfb909 | 165 | button7.attach_deasserted(&button7_released); |
adithya_murali | 0:3a6058dfb909 | 166 | button8.attach_deasserted(&button8_released); |
adithya_murali | 0:3a6058dfb909 | 167 | button9.attach_deasserted(&button9_released); |
adithya_murali | 0:3a6058dfb909 | 168 | button10.attach_deasserted(&button10_released); |
adithya_murali | 0:3a6058dfb909 | 169 | |
adithya_murali | 0:3a6058dfb909 | 170 | button1.setAssertValue(0); |
adithya_murali | 0:3a6058dfb909 | 171 | button2.setAssertValue(0); |
adithya_murali | 0:3a6058dfb909 | 172 | button3.setAssertValue(0); |
adithya_murali | 0:3a6058dfb909 | 173 | button4.setAssertValue(0); |
adithya_murali | 0:3a6058dfb909 | 174 | button5.setAssertValue(0); |
adithya_murali | 0:3a6058dfb909 | 175 | button6.setAssertValue(0); |
adithya_murali | 0:3a6058dfb909 | 176 | button7.setAssertValue(0); |
adithya_murali | 0:3a6058dfb909 | 177 | button8.setAssertValue(0); |
adithya_murali | 0:3a6058dfb909 | 178 | button9.setAssertValue(0); |
adithya_murali | 0:3a6058dfb909 | 179 | button10.setAssertValue(0); |
adithya_murali | 0:3a6058dfb909 | 180 | |
adithya_murali | 0:3a6058dfb909 | 181 | button1.setSampleFrequency(); |
adithya_murali | 0:3a6058dfb909 | 182 | button2.setSampleFrequency(); |
adithya_murali | 0:3a6058dfb909 | 183 | button3.setSampleFrequency(); |
adithya_murali | 0:3a6058dfb909 | 184 | button4.setSampleFrequency(); |
adithya_murali | 0:3a6058dfb909 | 185 | button5.setSampleFrequency(); |
adithya_murali | 0:3a6058dfb909 | 186 | button6.setSampleFrequency(); |
adithya_murali | 0:3a6058dfb909 | 187 | button7.setSampleFrequency(); |
adithya_murali | 0:3a6058dfb909 | 188 | button8.setSampleFrequency(); |
adithya_murali | 0:3a6058dfb909 | 189 | button9.setSampleFrequency(); |
adithya_murali | 0:3a6058dfb909 | 190 | button10.setSampleFrequency(); |
adithya_murali | 0:3a6058dfb909 | 191 | |
adithya_murali | 0:3a6058dfb909 | 192 | char curr_char = NULL; |
adithya_murali | 0:3a6058dfb909 | 193 | char next_char; |
adithya_murali | 0:3a6058dfb909 | 194 | |
adithya_murali | 0:3a6058dfb909 | 195 | /*Loop forever. */ |
adithya_murali | 0:3a6058dfb909 | 196 | while(1) { |
adithya_murali | 0:3a6058dfb909 | 197 | next_char = get_next_char(state); |
adithya_murali | 0:3a6058dfb909 | 198 | if (!next_char) { |
adithya_murali | 0:3a6058dfb909 | 199 | curr_char = next_char; |
adithya_murali | 0:3a6058dfb909 | 200 | } |
adithya_murali | 0:3a6058dfb909 | 201 | |
adithya_murali | 0:3a6058dfb909 | 202 | if (next_char != curr_char) { |
adithya_murali | 0:3a6058dfb909 | 203 | pc.printf("%c", next_char); |
adithya_murali | 0:3a6058dfb909 | 204 | curr_char = next_char; |
adithya_murali | 0:3a6058dfb909 | 205 | } |
adithya_murali | 0:3a6058dfb909 | 206 | wait(.2); |
adithya_murali | 0:3a6058dfb909 | 207 | } |
adithya_murali | 0:3a6058dfb909 | 208 | |
adithya_murali | 0:3a6058dfb909 | 209 | } |