Code for HW2

Dependencies:   PinDetect_KL25Z mbed

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?

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