Et eksempel på hvordan man kan lese inn et 8-knapp keypad og konverter inngangs-bittene til verdier som kan brukes i programmet

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
benrammok
Date:
Fri Nov 06 22:29:52 2015 +0000
Commit message:
8-button keypad, can be extended

Changed in this revision

main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 4c68dc485cb8 main.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Fri Nov 06 22:29:52 2015 +0000
@@ -0,0 +1,75 @@
+#include "mbed.h"
+
+//Definerer BusIn
+BusIn numpad(PA_10, PB_3, PB_5,PB_4, PB_10, PA_8, PA_9, PB_6);
+
+//Funksjonsprototyper
+int returnValueKeyPressed(int, int);
+ 
+int main() {
+  numpad.mode(PullUp);
+  int sum;
+  int tall1, tall2;
+  while(1) {
+  sum = 0;
+  printf("Press first number: ");
+  
+  //Så lenge ingen av knappene trykkes
+  while(returnValueKeyPressed(numpad.read(), 1)==0){};
+  
+  //Bruker funksjonen returnValueKeyPressed som gjør om BusIn signal til korrensponderende tall
+  tall1 = returnValueKeyPressed(numpad.read(), 1);
+  printf(" %d\r\n", returnValueKeyPressed(numpad.read(), 1));
+  
+  //Så lenge en eller fler av knappene ikke er sluppet
+  while(returnValueKeyPressed(numpad.read(), 1)!=0){};
+  printf("Press second number: ");
+  
+   //Så lenge ingen av knappene trykkes
+  while(returnValueKeyPressed(numpad.read(), 1)==0){};
+  
+  tall2 = returnValueKeyPressed(numpad.read(), 1);
+  printf(" %d\r\n", returnValueKeyPressed(numpad.read(), 1)); 
+   
+  //Så lenge en eller fler av knappene ikke er sluppet
+  while(returnValueKeyPressed(numpad.read(), 1)!=0){};
+  sum = tall1 + tall2;
+  printf("The sum of the two numbers is %d\r\n", sum);
+  wait(1);
+  }
+  
+}
+
+
+//Funksjon for å konvertere inngangsbit til tilhørende verdi på et 8-knapper numpad, kan utvides til 12-knapper 
+int returnValueKeyPressed(int key, int inv = 0){
+    int opKey;
+    
+    //Betingelse som sjekker om det er snakk om inverterte innganger
+    if(inv){
+    opKey = ~key & 0xFF; //Inverterer Key og masker for 8-bit, kan forandres til flere bit
+    }else{
+    opKey = key & 0xFF;  //Masker for 8-bit, kan forandres til flere bit   
+    } 
+    
+    switch(opKey){
+        case 1: // 0000 0001
+            return 1;
+        case 2: // 0000 0010
+            return 2;
+        case 4: // 0000 0100
+            return 3;
+        case 8: // 0000 1000
+            return 4; 
+        case 16: // 0001 0000
+            return 5;
+        case 32: // 0010 0000
+            return 6;      
+        case 64: // 0100 0000
+            return 7;
+        case 128: // 1000 0000
+            return 8;
+        default:
+            return 0;       
+    }
+}
\ No newline at end of file
diff -r 000000000000 -r 4c68dc485cb8 mbed.bld
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Fri Nov 06 22:29:52 2015 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/8ed44a420e5c
\ No newline at end of file