Keypad Project

Dependencies:   FPointer keypad mbed-rtos mbed

Revision:
0:6db970f1f785
Child:
1:8b931e33f8e3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Nov 18 14:35:29 2015 +0000
@@ -0,0 +1,288 @@
+#include "mbed.h"
+#include "rtos.h"
+ 
+#include "Keypad.h"
+ 
+Serial        PC(USBTX, USBRX);
+RtosTimer    *LedTimer;
+DigitalOut    Led1(LED1);
+DigitalOut    Led2(LED2);
+int input;
+int break1;
+bool start = false;
+int freq = 1;
+int wave = 1;
+int range = 1;
+int group_num = 0;
+char id = '0'; 
+CAN can1(p9,p10);
+CANMessage talk;
+// Define your own keypad values
+char Keytable[] = { 
+    '1', '2', '3', // r0
+    '4', '5', '6', // r1
+    '7', '8', '9', // r2
+    '*', '0', '#' // r3
+  // c0   c1  c2
+ };
+ 
+int32_t       Index = -1;
+char           state='0';
+ 
+uint32_t cbAfterInput(uint32_t _index)
+{
+    Index = _index;
+    return 0;
+}
+
+void Send_Message() {
+ 
+    PC.printf("\n Message Sending...\n");
+    talk.data[0] = id;
+    talk.data[1] = state;
+    can1.write(talk);
+    
+    if(can1.write(talk))
+    {
+        PC.printf("Sent to id = %c with state = %c\n", talk.data[0], talk.data[1]);
+        }
+
+ }
+ 
+void menu(){
+    PC.printf("1. DAC Input\n");
+    PC.printf("2. DigiPot Input\n");
+    PC.printf("3. ADC Input\n");
+}
+
+int ADC()
+{
+    break1 = 0;
+    Index = -1;
+    PC.printf("Select Start/Stop\n");
+    PC.printf("1. Start\n");
+    PC.printf("2. Stop\n");
+    PC.printf("Press # to go to main menu\n");
+    while (break1 != 1) {
+        __wfi();
+        if (Index > -1) {
+            PC.printf("Index:%d => Key:%c\r\n", Index, Keytable[Index]);
+            input = Index + 1;
+            switch (input){
+                case 1:
+                    // start
+                    state = '0';
+                    PC.printf("Start case 1\n");
+                    Send_Message();
+                    break;
+                case 2:
+                    // stop
+                    state = '1';
+                    PC.printf("Stop case 2\n");
+                    Send_Message();
+                    break;
+                case 12:
+                    break1 =1;
+                    menu();
+                    break;
+                default:
+                    PC.printf("Please Select a Valid Input\n");
+                    PC.printf("Select Start/Stop\n");
+                    PC.printf("1. Start\n");
+                    PC.printf("2. Stop\n");
+                    PC.printf("Press # to go to main menu\n");
+                    break;
+                }
+            
+            
+            Index = -1;
+            
+        }
+        
+    }
+    return 0;
+}
+ 
+
+
+int DAC()
+{
+    break1 = 0;
+    Index = -1;
+    PC.printf("Select Waveform Type\n");
+    PC.printf("1. Turn Off\n");
+    PC.printf("2. 1 Hz Square Wave\n");
+    PC.printf("3. 10 Hz Square Wave\n");
+    PC.printf("4. 1 Hz Sinusoidal Wave\n");
+    PC.printf("5. 10 Hz Sinusoidal Wave\n");
+    PC.printf("Press # to go to main menu\n");
+    
+    while (break1 != 1) {
+        __wfi();
+        if (Index > -1) {
+            PC.printf("Index:%d => Key:%c\r\n", Index, Keytable[Index]);
+            input = Index + 1;
+            switch (input){
+                case 1:
+                    state = '1';
+                    PC.printf("DAC = OFF\n");
+                    Send_Message();
+                    break;
+                case 2:
+                    state = '2';
+                    PC.printf("1 Hz Square Wave\n");
+                    Send_Message();
+                    break;
+                case 3:
+                    state = '3';
+                    PC.printf("10 Hz Square Wave\n");
+                    Send_Message();
+                    break;
+                case 4:
+                    state = '4';
+                    PC.printf("1 Hz Sinusoidal Wave\n");
+                    Send_Message();
+                    break;
+                case 5:
+                    state = '5';
+                    PC.printf("10 Hz Sinusoidal Wave\n");
+                    Send_Message();
+                    break;
+                case 12:
+                    break1 =1;
+                    menu();
+                    break;
+                default:
+                    PC.printf("Please Input a Valid Input\n");
+                    PC.printf("Select Waveform Type\n");
+                    PC.printf("1. Turn Off\n");
+                    PC.printf("2. 1 Hz Square Wave\n");
+                    PC.printf("3. 10 Hz Square Wave\n");
+                    PC.printf("4. 1 Hz Sinusoidal Wave\n");
+                    PC.printf("5. 10 Hz Sinusoidal Wave\n");
+                    PC.printf("Press # to go to main menu\n");
+                    break;
+                }
+            
+            
+            Index = -1;
+            
+        }
+        
+    }
+    return 0;
+}
+
+int DigiPot(){
+    break1 = 0;
+    Index = -1;
+    PC.printf("Select Range\n");
+    PC.printf("1. Between 0 to 1\n");
+    PC.printf("2. Between 0 to 2\n");
+    PC.printf("3. Between 0 to 3\n");
+    PC.printf("4. Between 0 to 4\n");
+    PC.printf("5. Between 0 to 5\n");
+    PC.printf("Press # to go to main menu\n");
+    while (break1 != 1) {
+        __wfi();
+        if (Index > -1) {
+            PC.printf("Index:%d => Key:%c\r\n", Index, Keytable[Index]);
+            input = Index + 1;
+            switch (input){
+                case 1:
+                    state = '1';
+                    PC.printf("0V to 1V\n");
+                    Send_Message();
+                    break;
+                case 2:
+                    state = '2';
+                    PC.printf("0V to 2V\n");
+                    Send_Message();
+                    break;
+                case 3:
+                    state = '3';
+                    PC.printf("0V to 3V\n");
+                    Send_Message();
+                    break;
+                case 4:
+                    state = '4';
+                    PC.printf("0V to 4V\n");
+                    Send_Message();
+                    break;
+                case 5:
+                    state = '5';
+                    PC.printf("0V to 5V\n");
+                    Send_Message();
+                    break;
+                case 12:
+                    break1 =1;
+                    menu();
+                    break;
+                default:
+                    PC.printf("Please Input a Valid Input\n");
+                    PC.printf("Select Range\n");
+                    PC.printf("1. Between 0 to 1\n");
+                    PC.printf("2. Between 0 to 2\n");
+                    PC.printf("3. Between 0 to 3\n");
+                    PC.printf("4. Between 0 to 4\n");
+                    PC.printf("5. Between 0 to 5\n");
+                    PC.printf("Press # to go to main menu\n");
+                    break;
+                }
+            
+            
+            Index = -1;
+            
+        }
+        
+    }
+    return 0;
+}
+
+ 
+int main()
+{
+    PC.printf("Control Menu\r\n");  
+    menu();
+    
+    //             r0   r1   r2   r3   c0   c1   c2   c3
+    Keypad keypad(p21, p22,  p23,  p24, p25, p26,  p27,  NC);
+    keypad.attach(&cbAfterInput);
+    keypad.start();  // energize the columns c0-c3 of the keypad
+ 
+    while (1) {
+        __wfi();
+         
+    
+        if (Index > -1) {
+            PC.printf("Index:%d => Key:%c\r\n", Index, Keytable[Index]);
+            group_num = Index + 1;
+            switch (group_num){
+                case 1:
+                    PC.printf("Calling DAC()... \n");
+                    id = '1';
+                    DAC();
+                    
+                    break;
+                case 2:
+                    PC.printf("Calling DigiPot()... \n");
+                    id = '2';
+                    DigiPot();
+                    break;
+            
+                case 3:
+                    PC.printf("Calling ADC()... \n");
+                    id = '3';
+                    ADC();
+                    break;
+                default:
+                    PC.printf("Please Enter a Valid Input between 1 - 3\n");
+                    menu();
+                    break;
+            }
+            
+            Index = -1;
+            
+        }
+    }
+}
\ No newline at end of file