Sunday, December 13, 2015

Dr. Mayhew's Keypad Program - 12/12/2015

#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>


void
blink(){

    digitalWrite(0,1);
    delay(300);
    digitalWrite(0,0);

}

char
get_key(){
   
    int        i;
    int        j;

    for (j = 21; j < 25; ++j) {
        digitalWrite(j, 1);   
    }
    for (;;) {
        for (i = 25; i < 29; ++i) {
            if (digitalRead(i))     {
                for (j = 21; j < 25; ++j) {
                    digitalWrite(j, 0);   
                    if (!digitalRead(i)) {
                        blink();
                        switch (((i - 25) << 2) | (j - 21)) {
                            case  0: return '1';
                            case  1: return '4';
                            case  2: return '7';
                            case  3: return 'C';
                            case  4: return '2';
                            case  5: return '5';
                            case  6: return '8';
                            case  7: return '0';
                            case  8: return '3';
                            case  9: return '6';
                            case 10: return '9';
                            case 11: return '#';
                            case 12: return 'A';
                            case 13: return 'B';
                            case 14: return 'C';
                            case 15: return 'D';
                        }
                    }
                }
            }
        }   
    }   
}       




int
get_num (
    int count,
    int x
){
    char    k;
   
    printf("in get number");

    while(count){   
        printf ("\ncount = %d", count);
        k = get_key();
        printf ("key = %c\n", k);
        if (k == '#') return x;
        if (('0' <= k) && (k <= '9')){
            x    = (x * 10) + (k - '0') ;
        }
        else return -1;
        --count;
        }
   
    k = get_key();
    if (k == '#') return x;
    else return         -1;
    }

int
main()
{
    int     a;
    int     i,j;
    int     x,y,z;
    int     count;


    wiringPiSetup();

    pinMode(21, OUTPUT);
    pinMode(22, OUTPUT);
    pinMode(23, OUTPUT);
    pinMode(24, OUTPUT);
    pinMode(25, INPUT);
    pinMode(26, INPUT);
    pinMode(27, INPUT);
    pinMode(28, INPUT);

    pinMode(0, OUTPUT);

    x = get_num( 6,0 );
    printf("\nthe number = %d\n" , x );

}

No comments:

Post a Comment