part3 update

Dependencies:   mbed

Committer:
yifeng021
Date:
Tue Feb 17 18:48:53 2015 +0000
Revision:
2:75fb721a5b86
Parent:
1:1260dba917b0
part3 ticker 2-17-2015 1:50pm uploaded by Yifeng

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yifeng021 2:75fb721a5b86 1 // This version does not work.
yifeng021 2:75fb721a5b86 2 // The issue is: if I only scan first row, it works. However, when I essentially copy
yifeng021 2:75fb721a5b86 3 // the first case to the rest of the cases(or rows), program does not recognize any
yifeng021 2:75fb721a5b86 4 // input anymore.
yifeng021 2:75fb721a5b86 5
yifeng021 0:7c6b15d40e00 6 #include "mbed.h"
yifeng021 0:7c6b15d40e00 7 #include "string.h"
yifeng021 0:7c6b15d40e00 8 // speaker sound effect demo using PWM hardware output
yifeng021 2:75fb721a5b86 9 PwmOut keytone_row(p21);//pwm output for key tone table row freq
yifeng021 2:75fb721a5b86 10 PwmOut keytone_col(p22);//pwm output for key tone table column freq
yifeng021 1:1260dba917b0 11 Serial usb(USBTX, USBRX);//serial comm
yifeng021 1:1260dba917b0 12 DigitalOut row8(p8);//pin8 on keypad board->row1(top)
yifeng021 1:1260dba917b0 13 DigitalOut row1(p5);//pin1 ...->row2
yifeng021 1:1260dba917b0 14 DigitalOut row2(p6);//pin2->row3
yifeng021 1:1260dba917b0 15 DigitalOut row4(p7);//pin4->row4
yifeng021 1:1260dba917b0 16 InterruptIn col7(p27);//pin7->column 1(right-most column)
yifeng021 1:1260dba917b0 17 InterruptIn col6(p28);//pin6->column 2
yifeng021 1:1260dba917b0 18 InterruptIn col5(p29);//pin5->column 3
yifeng021 1:1260dba917b0 19 InterruptIn col3(p30);//pin3->column 4
yifeng021 2:75fb721a5b86 20 Ticker t;
yifeng021 0:7c6b15d40e00 21
yifeng021 2:75fb721a5b86 22 int global_key_index;//global variable, value range:0 - 15, represents for 16 keys
yifeng021 2:75fb721a5b86 23 unsigned short global_flag_row;
yifeng021 2:75fb721a5b86 24 int global_count;
yifeng021 2:75fb721a5b86 25
yifeng021 1:1260dba917b0 26 // The following functions determine which key is pressed by changing global variable 'global_key_index'
yifeng021 0:7c6b15d40e00 27 void key_1();
yifeng021 0:7c6b15d40e00 28 void key_2();
yifeng021 0:7c6b15d40e00 29 void key_3();
yifeng021 0:7c6b15d40e00 30 void key_A();
yifeng021 1:1260dba917b0 31 void key_4();
yifeng021 1:1260dba917b0 32 void key_5();
yifeng021 1:1260dba917b0 33 void key_6();
yifeng021 1:1260dba917b0 34 void key_B();
yifeng021 1:1260dba917b0 35 void key_7();
yifeng021 1:1260dba917b0 36 void key_8();
yifeng021 1:1260dba917b0 37 void key_9();
yifeng021 1:1260dba917b0 38 void key_C();
yifeng021 1:1260dba917b0 39 void key_str();
yifeng021 1:1260dba917b0 40 void key_0();
yifeng021 1:1260dba917b0 41 void key_pd();
yifeng021 1:1260dba917b0 42 void key_D();
yifeng021 0:7c6b15d40e00 43
yifeng021 2:75fb721a5b86 44 void scan_row();
yifeng021 2:75fb721a5b86 45 void print_key();
yifeng021 2:75fb721a5b86 46 void key_release();
yifeng021 2:75fb721a5b86 47
yifeng021 0:7c6b15d40e00 48 int main()
yifeng021 0:7c6b15d40e00 49 {
yifeng021 2:75fb721a5b86 50 //usb.printf("hello world!");
yifeng021 2:75fb721a5b86 51 float dur_row = 4000.0; //time to scan each row in us
yifeng021 2:75fb721a5b86 52 global_count = 0;
yifeng021 2:75fb721a5b86 53 global_flag_row = 0;
yifeng021 2:75fb721a5b86 54 global_key_index = 16;
yifeng021 2:75fb721a5b86 55
yifeng021 2:75fb721a5b86 56 row8 = 1;
yifeng021 2:75fb721a5b86 57 row1 = 1;
yifeng021 2:75fb721a5b86 58 row2 = 1;
yifeng021 2:75fb721a5b86 59 row4 = 1;
yifeng021 2:75fb721a5b86 60
yifeng021 2:75fb721a5b86 61 t.attach_us(&scan_row, dur_row);
yifeng021 0:7c6b15d40e00 62
yifeng021 0:7c6b15d40e00 63 while (1) {
yifeng021 2:75fb721a5b86 64 usb.printf("%d",global_key_index);
yifeng021 2:75fb721a5b86 65 //print_key();
yifeng021 2:75fb721a5b86 66 //wait(0.2);
yifeng021 0:7c6b15d40e00 67 }
yifeng021 0:7c6b15d40e00 68 }
yifeng021 0:7c6b15d40e00 69
yifeng021 1:1260dba917b0 70 // The following functions determine which key is pressed by changing global variable 'global_key_index'
yifeng021 1:1260dba917b0 71 //indice:
yifeng021 1:1260dba917b0 72 //key-[index]
yifeng021 1:1260dba917b0 73 //1-[0],2-[1],3-[2],A-[3],4-[4],5-[5],6-[6],B-[7],7-[8],8-[9],9-[10],C-[11],*-[12],0-[13],#-[14],D-[15]
yifeng021 2:75fb721a5b86 74 void key_1(){global_key_index = 0;}
yifeng021 2:75fb721a5b86 75 void key_2(){global_key_index = 1;}
yifeng021 2:75fb721a5b86 76 void key_3(){global_key_index = 2;}
yifeng021 2:75fb721a5b86 77 void key_A(){global_key_index = 3;}
yifeng021 2:75fb721a5b86 78 void key_4(){global_key_index = 4;}
yifeng021 2:75fb721a5b86 79 void key_5(){global_key_index = 5;}
yifeng021 2:75fb721a5b86 80 void key_6(){global_key_index = 6;}
yifeng021 2:75fb721a5b86 81 void key_B(){global_key_index = 7;}
yifeng021 2:75fb721a5b86 82 void key_7(){global_key_index = 8;}
yifeng021 2:75fb721a5b86 83 void key_8(){global_key_index = 9;}
yifeng021 2:75fb721a5b86 84 void key_9(){global_key_index = 10;}
yifeng021 2:75fb721a5b86 85 void key_C(){global_key_index = 11;}
yifeng021 2:75fb721a5b86 86 void key_str(){global_key_index = 12;}
yifeng021 2:75fb721a5b86 87 void key_0(){global_key_index = 13;}
yifeng021 2:75fb721a5b86 88 void key_pd(){global_key_index = 14;}
yifeng021 2:75fb721a5b86 89 void key_D(){global_key_index = 15;}
yifeng021 2:75fb721a5b86 90
yifeng021 2:75fb721a5b86 91 void scan_row()
yifeng021 2:75fb721a5b86 92 {
yifeng021 2:75fb721a5b86 93 global_flag_row = global_count % 4;
yifeng021 2:75fb721a5b86 94 switch(global_flag_row) {
yifeng021 2:75fb721a5b86 95 case 0:
yifeng021 2:75fb721a5b86 96 //printf("case0");
yifeng021 2:75fb721a5b86 97 row8 = 0;
yifeng021 2:75fb721a5b86 98 row1 = 1;
yifeng021 2:75fb721a5b86 99 row2 = 1;
yifeng021 2:75fb721a5b86 100 row4 = 1;
yifeng021 2:75fb721a5b86 101 col3.rise(&key_1);
yifeng021 2:75fb721a5b86 102 col5.rise(&key_2);
yifeng021 2:75fb721a5b86 103 col6.rise(&key_3);
yifeng021 2:75fb721a5b86 104 col7.rise(&key_A);
yifeng021 2:75fb721a5b86 105 col3.fall(&key_release);
yifeng021 2:75fb721a5b86 106 col5.fall(&key_release);
yifeng021 2:75fb721a5b86 107 col6.fall(&key_release);
yifeng021 2:75fb721a5b86 108 col7.fall(&key_release);
yifeng021 2:75fb721a5b86 109 break;
yifeng021 2:75fb721a5b86 110
yifeng021 2:75fb721a5b86 111 case 1:
yifeng021 2:75fb721a5b86 112 //printf("case1");
yifeng021 2:75fb721a5b86 113 row8 = 1;
yifeng021 2:75fb721a5b86 114 row1 = 0;
yifeng021 2:75fb721a5b86 115 row2 = 1;
yifeng021 2:75fb721a5b86 116 row4 = 1;
yifeng021 2:75fb721a5b86 117 /*
yifeng021 2:75fb721a5b86 118 col3.rise(&key_4);
yifeng021 2:75fb721a5b86 119 col5.rise(&key_5);
yifeng021 2:75fb721a5b86 120 col6.rise(&key_6);
yifeng021 2:75fb721a5b86 121 col7.rise(&key_B);
yifeng021 2:75fb721a5b86 122 col3.fall(&key_release);
yifeng021 2:75fb721a5b86 123 col5.fall(&key_release);
yifeng021 2:75fb721a5b86 124 col6.fall(&key_release);
yifeng021 2:75fb721a5b86 125 col7.fall(&key_release);
yifeng021 2:75fb721a5b86 126 */
yifeng021 2:75fb721a5b86 127 break;
yifeng021 2:75fb721a5b86 128 case 2:
yifeng021 2:75fb721a5b86 129 //printf("case2");
yifeng021 2:75fb721a5b86 130 row8 = 1;
yifeng021 2:75fb721a5b86 131 row1 = 1;
yifeng021 2:75fb721a5b86 132 row2 = 0;
yifeng021 2:75fb721a5b86 133 row4 = 1;
yifeng021 2:75fb721a5b86 134 /*
yifeng021 2:75fb721a5b86 135 col3.rise(&key_7);
yifeng021 2:75fb721a5b86 136 col5.rise(&key_8);
yifeng021 2:75fb721a5b86 137 col6.rise(&key_9);
yifeng021 2:75fb721a5b86 138 col7.rise(&key_C);
yifeng021 2:75fb721a5b86 139 col3.fall(&key_release);
yifeng021 2:75fb721a5b86 140 col5.fall(&key_release);
yifeng021 2:75fb721a5b86 141 col6.fall(&key_release);
yifeng021 2:75fb721a5b86 142 col7.fall(&key_release);
yifeng021 2:75fb721a5b86 143 */
yifeng021 2:75fb721a5b86 144 break;
yifeng021 2:75fb721a5b86 145 case 3:
yifeng021 2:75fb721a5b86 146 //printf("case3");
yifeng021 2:75fb721a5b86 147 row8 = 1;
yifeng021 2:75fb721a5b86 148 row1 = 1;
yifeng021 2:75fb721a5b86 149 row2 = 1;
yifeng021 2:75fb721a5b86 150 row4 = 0;
yifeng021 2:75fb721a5b86 151 /*
yifeng021 2:75fb721a5b86 152 col3.rise(&key_str);
yifeng021 2:75fb721a5b86 153 col5.rise(&key_0);
yifeng021 2:75fb721a5b86 154 col6.rise(&key_pd);
yifeng021 2:75fb721a5b86 155 col7.rise(&key_D);
yifeng021 2:75fb721a5b86 156 col3.fall(&key_release);
yifeng021 2:75fb721a5b86 157 col5.fall(&key_release);
yifeng021 2:75fb721a5b86 158 col6.fall(&key_release);
yifeng021 2:75fb721a5b86 159 col7.fall(&key_release);
yifeng021 2:75fb721a5b86 160 */
yifeng021 2:75fb721a5b86 161 break;
yifeng021 2:75fb721a5b86 162
yifeng021 2:75fb721a5b86 163 }
yifeng021 2:75fb721a5b86 164 global_count += 1;
yifeng021 1:1260dba917b0 165 }
yifeng021 2:75fb721a5b86 166
yifeng021 2:75fb721a5b86 167 void print_key()
yifeng021 2:75fb721a5b86 168 {
yifeng021 2:75fb721a5b86 169 switch(global_key_index) {
yifeng021 2:75fb721a5b86 170 case 0:
yifeng021 2:75fb721a5b86 171 usb.printf("1");
yifeng021 2:75fb721a5b86 172 break;
yifeng021 2:75fb721a5b86 173 case 1:
yifeng021 2:75fb721a5b86 174 usb.printf("2");
yifeng021 2:75fb721a5b86 175 break;
yifeng021 2:75fb721a5b86 176 case 2:
yifeng021 2:75fb721a5b86 177 usb.printf("3");
yifeng021 2:75fb721a5b86 178 break;
yifeng021 2:75fb721a5b86 179 case 3:
yifeng021 2:75fb721a5b86 180 usb.printf("A");
yifeng021 2:75fb721a5b86 181 break;
yifeng021 2:75fb721a5b86 182 case 4:
yifeng021 2:75fb721a5b86 183 usb.printf("4");
yifeng021 2:75fb721a5b86 184 break;
yifeng021 2:75fb721a5b86 185 case 5:
yifeng021 2:75fb721a5b86 186 usb.printf("5");
yifeng021 2:75fb721a5b86 187 break;
yifeng021 2:75fb721a5b86 188 case 6:
yifeng021 2:75fb721a5b86 189 usb.printf("6");
yifeng021 2:75fb721a5b86 190 break;
yifeng021 2:75fb721a5b86 191 case 7:
yifeng021 2:75fb721a5b86 192 usb.printf("B");
yifeng021 2:75fb721a5b86 193 break;
yifeng021 2:75fb721a5b86 194 case 8:
yifeng021 2:75fb721a5b86 195 usb.printf("7");
yifeng021 2:75fb721a5b86 196 break;
yifeng021 2:75fb721a5b86 197 case 9:
yifeng021 2:75fb721a5b86 198 usb.printf("8");
yifeng021 2:75fb721a5b86 199 break;
yifeng021 2:75fb721a5b86 200 case 10:
yifeng021 2:75fb721a5b86 201 usb.printf("9");
yifeng021 2:75fb721a5b86 202 break;
yifeng021 2:75fb721a5b86 203 case 11:
yifeng021 2:75fb721a5b86 204 usb.printf("C");
yifeng021 2:75fb721a5b86 205 break;
yifeng021 2:75fb721a5b86 206 case 12:
yifeng021 2:75fb721a5b86 207 usb.printf("*");
yifeng021 2:75fb721a5b86 208 break;
yifeng021 2:75fb721a5b86 209 case 13:
yifeng021 2:75fb721a5b86 210 usb.printf("0");
yifeng021 2:75fb721a5b86 211 break;
yifeng021 2:75fb721a5b86 212 case 14:
yifeng021 2:75fb721a5b86 213 usb.printf("#");
yifeng021 2:75fb721a5b86 214 break;
yifeng021 2:75fb721a5b86 215 case 15:
yifeng021 2:75fb721a5b86 216 usb.printf("D");
yifeng021 2:75fb721a5b86 217 break;
yifeng021 2:75fb721a5b86 218 case 16:
yifeng021 2:75fb721a5b86 219 //usb.printf("default!");
yifeng021 2:75fb721a5b86 220 break;
yifeng021 2:75fb721a5b86 221 }
yifeng021 1:1260dba917b0 222 }
yifeng021 2:75fb721a5b86 223
yifeng021 2:75fb721a5b86 224 void key_release()
yifeng021 2:75fb721a5b86 225 {
yifeng021 2:75fb721a5b86 226 global_key_index = 16;
yifeng021 1:1260dba917b0 227 }