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.
English