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
Diff: main.cpp
- Revision:
- 0:4c68dc485cb8
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