Yifeng Yuan
/
ese519_lab2_part3_v3_ticker
part3 version3, not working, found some issues
Diff: main.cpp
- Revision:
- 0:2f671925ad58
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Sun Feb 15 01:26:42 2015 +0000 @@ -0,0 +1,227 @@ +// This version does not work. +// The issue is: if I only scan first row, it works. However, when I essentially copy +// the first case to the rest of the cases(or rows), program does not recognize any +// input anymore. + +#include "mbed.h" +#include "string.h" +// speaker sound effect demo using PWM hardware output +PwmOut keytone_row(p21);//pwm output for key tone table row freq +PwmOut keytone_col(p22);//pwm output for key tone table column freq +Serial usb(USBTX, USBRX);//serial comm +DigitalOut row8(p8);//pin8 on keypad board->row1(top) +DigitalOut row1(p5);//pin1 ...->row2 +DigitalOut row2(p6);//pin2->row3 +DigitalOut row4(p7);//pin4->row4 +InterruptIn col7(p27);//pin7->column 1(right-most column) +InterruptIn col6(p28);//pin6->column 2 +InterruptIn col5(p29);//pin5->column 3 +InterruptIn col3(p30);//pin3->column 4 +Ticker t; + +int global_key_index;//global variable, value range:0 - 15, represents for 16 keys +unsigned short global_flag_row; +int global_count; + +// The following functions determine which key is pressed by changing global variable 'global_key_index' +void key_1(); +void key_2(); +void key_3(); +void key_A(); +void key_4(); +void key_5(); +void key_6(); +void key_B(); +void key_7(); +void key_8(); +void key_9(); +void key_C(); +void key_str(); +void key_0(); +void key_pd(); +void key_D(); + +void scan_row(); +void print_key(); +void key_release(); + +int main() +{ + //usb.printf("hello world!"); + float dur_row = 4000.0; //time to scan each row in us + global_count = 0; + global_flag_row = 0; + global_key_index = 16; + + row8 = 1; + row1 = 1; + row2 = 1; + row4 = 1; + + t.attach_us(&scan_row, dur_row); + + while (1) { + usb.printf("%d",global_key_index); + //print_key(); + //wait(0.2); + } +} + +// The following functions determine which key is pressed by changing global variable 'global_key_index' +//indice: +//key-[index] +//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] +void key_1(){global_key_index = 0;} +void key_2(){global_key_index = 1;} +void key_3(){global_key_index = 2;} +void key_A(){global_key_index = 3;} +void key_4(){global_key_index = 4;} +void key_5(){global_key_index = 5;} +void key_6(){global_key_index = 6;} +void key_B(){global_key_index = 7;} +void key_7(){global_key_index = 8;} +void key_8(){global_key_index = 9;} +void key_9(){global_key_index = 10;} +void key_C(){global_key_index = 11;} +void key_str(){global_key_index = 12;} +void key_0(){global_key_index = 13;} +void key_pd(){global_key_index = 14;} +void key_D(){global_key_index = 15;} + +void scan_row() +{ + global_flag_row = global_count % 4; + switch(global_flag_row) { + case 0: + //printf("case0"); + row8 = 0; + row1 = 1; + row2 = 1; + row4 = 1; + col3.rise(&key_1); + col5.rise(&key_2); + col6.rise(&key_3); + col7.rise(&key_A); + col3.fall(&key_release); + col5.fall(&key_release); + col6.fall(&key_release); + col7.fall(&key_release); + break; + + case 1: + //printf("case1"); + row8 = 1; + row1 = 0; + row2 = 1; + row4 = 1; + /* + col3.rise(&key_4); + col5.rise(&key_5); + col6.rise(&key_6); + col7.rise(&key_B); + col3.fall(&key_release); + col5.fall(&key_release); + col6.fall(&key_release); + col7.fall(&key_release); + */ + break; + case 2: + //printf("case2"); + row8 = 1; + row1 = 1; + row2 = 0; + row4 = 1; + /* + col3.rise(&key_7); + col5.rise(&key_8); + col6.rise(&key_9); + col7.rise(&key_C); + col3.fall(&key_release); + col5.fall(&key_release); + col6.fall(&key_release); + col7.fall(&key_release); + */ + break; + case 3: + //printf("case3"); + row8 = 1; + row1 = 1; + row2 = 1; + row4 = 0; + /* + col3.rise(&key_str); + col5.rise(&key_0); + col6.rise(&key_pd); + col7.rise(&key_D); + col3.fall(&key_release); + col5.fall(&key_release); + col6.fall(&key_release); + col7.fall(&key_release); + */ + break; + + } + global_count += 1; +} + +void print_key() +{ + switch(global_key_index) { + case 0: + usb.printf("1"); + break; + case 1: + usb.printf("2"); + break; + case 2: + usb.printf("3"); + break; + case 3: + usb.printf("A"); + break; + case 4: + usb.printf("4"); + break; + case 5: + usb.printf("5"); + break; + case 6: + usb.printf("6"); + break; + case 7: + usb.printf("B"); + break; + case 8: + usb.printf("7"); + break; + case 9: + usb.printf("8"); + break; + case 10: + usb.printf("9"); + break; + case 11: + usb.printf("C"); + break; + case 12: + usb.printf("*"); + break; + case 13: + usb.printf("0"); + break; + case 14: + usb.printf("#"); + break; + case 15: + usb.printf("D"); + break; + case 16: + //usb.printf("default!"); + break; + } +} + +void key_release() +{ + global_key_index = 16; +}