part3 version3, not working, found some issues

Dependencies:   mbed

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;
+}