Jak w innych opisach, przygotowałem gotowy, działający, przykładowy program keyb.c i prosty skrypt do jego skompilowania ck
No to teraz jak to działa.
Definiujemy, do których pinów GPIO podłączyliśmy wyprowadzenia wierszy i kolumn klawiatury:
#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();W tej zmiennej zapamiętamy ostatnio naciśnięty i jeszcze nie puszczony klawisz - nie chcemy przecież po jednym naciśnięciu klawisza tysięcy odczytów!
int last;No i główna procedura:
int main (void) { int k; if (wiringPiSetup () == -1) exit (1) ;Piny GPIO podłączone do wierszy klawiatury programujemy na wyjście i ustawiamy na nich zero logiczne:
pinMode(IN1, OUTPUT); digitalWrite (IN1, 0); pinMode(IN2, OUTPUT); digitalWrite (IN2, 0); pinMode(IN3, OUTPUT); digitalWrite (IN3, 0); pinMode(IN4, OUTPUT); digitalWrite (IN4, 0);Piny kolumn ustawiamy na wejście i wbudowanym rezystorem przywieramy je do masy:
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) ;Teraz w nie kończącej się petli czytamy klawiaturę wyświetlając jaki klawisz naciśnięto:
for(;;) { if (k=read_key() ) printf("%c", k); } }Sam odczyt klawiszy wykonuje funkcja read_key którą opiszemy dalej.