#include #include #include #include #include #include #define IN1 26 #define IN2 27 #define IN3 28 #define IN4 29 #define OU1 22 #define OU2 23 #define OU3 24 #define OU4 25 void Delay(); int last; int main (void) { int k; if (wiringPiSetup () == -1) exit (1) ; pinMode(IN1, OUTPUT); digitalWrite (IN1, 0); pinMode(IN2, OUTPUT); digitalWrite (IN2, 0); pinMode(IN3, OUTPUT); digitalWrite (IN3, 0); pinMode(IN4, OUTPUT); digitalWrite (IN4, 0); pinMode(OU1, INPUT); pullUpDnControl (OU1, PUD_DOWN) ; pinMode(OU2, INPUT); pullUpDnControl (OU2, PUD_DOWN) ; pinMode(OU3, INPUT); pullUpDnControl (OU3, PUD_DOWN) ; pinMode(OU4, INPUT); pullUpDnControl (OU4, PUD_DOWN) ; for(;;) { if (k=read_key() ) printf("%c", k); } } int read_key() { int kod=0; digitalWrite (IN1, 1); Delay(5); if (digitalRead(OU1)==1) {kod=0x44;} if (digitalRead(OU2)==1) {kod=0x23;} if (digitalRead(OU3)==1) {kod=0x30;} if (digitalRead(OU4)==1) {kod=0x2A;} digitalWrite (IN1, 0); digitalWrite (IN2, 1); Delay(5); if (digitalRead(OU1)==1) {kod=0x43;} if (digitalRead(OU2)==1) {kod=0x39;} if (digitalRead(OU3)==1) {kod=0x38;} if (digitalRead(OU4)==1) {kod=0x37;} digitalWrite (IN2, 0); digitalWrite (IN3, 1); Delay(5); if (digitalRead(OU1)==1) {kod=0x42;} if (digitalRead(OU2)==1) {kod=0x36;} if (digitalRead(OU3)==1) {kod=0x35;} if (digitalRead(OU4)==1) {kod=0x34;} digitalWrite (IN3, 0); digitalWrite (IN4, 1); Delay(5); if (digitalRead(OU1)==1) {kod=0x41;} if (digitalRead(OU2)==1) {kod=0x33;} if (digitalRead(OU3)==1) {kod=0x32;} if (digitalRead(OU4)==1) {kod=0x31;} digitalWrite (IN4, 0); if (kod != last) { last = kod; return kod ; } else { return 0; } } void Delay(int microsec) { struct timespec tim; tim.tv_sec = 0; tim.tv_nsec = microsec * 1000; while(nanosleep(&tim,&tim)==-1) continue; }