Bogusław Kempny

Zliczamy impulsy

×
Autor English
Początek HC-SR04 LCD Kamera fork() sms strfry() GPIO impulsy Klawiatura Brama GPIO PWM SG90 RFID Grafolog RCP Shutdown Temperatura ....











No więc jak to się robi?

Kluczem jest właściwe oprogramowanie pinu GPIO na który podajemy zliczane impulsy.

Korzystając z funkcji biblioteki wiringPi programujemy wybrany przez nas pin jako wejściowy:

   pinMode(28, INPUT);

I programujemy przerwania. W chwili zmiany stanu sygnału na tym pinie wygenerowane zostanie przerwanie, które zostanie obsłużone przez wskazaną procedurę, w tym przypadku int_impuls.

Przerwanie może zostać wygenerowane przy opadającym zboczu sygnału, jak w tym przykładzie, przy narastającym (INT_EDGE_RISING), lub narastającym i opadającym (INT_EDGE_BOTH).

    wiringPiISR (28, INT_EDGE_FALLING, &int_impuls);

Jeśli źródłem impulsów jest mechaniczny wyłącznik lub czujnik z wyjściem otwarty kolektor włączamy opornik zwierający pin z napięciem zasilającym. W naszym przykładzie linia ta opatrzona jest komentarzem, bo źródłem impulsów będzie inny pin GPIO:

//    pullUpDnControl (28, PUD_UP) ;

Procedura obsługująca przerwania w naszym przypadku jest prosta, po każdym przerwaniu zwieksza o jeden wartość zmiennej globalnej impulsow i co dziesięć impulsów wyświetla aktualny jej stan, tak żeby nam się nie nudziło podczas eksperymentów:

int impulsow;

void int_impuls(void)
{
   impulsow++;
   if(impulsow%10 == 0)
    {
     printf ("Bieżący stan licznika: %d\r", impulsow);
     fflush(0);
    }
}