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

main.cpp

Committer:
benrammok
Date:
2015-11-06
Revision:
0:4c68dc485cb8

File content as of revision 0:4c68dc485cb8:

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