Bogusław Kempny

Zwarcie/rozwarcie

Autor adres
Początek HC-SR04 LCD Kamera fork() sms strfry() GPIO impulsy Klawiatura Brama GPIO PWM SG90 ....











Piny GPIO wyposażone są w rezystory (umówmy się, że 50kΩ, choć różne źródła podają zakres 40 - 100 kΩ - nie jest to szczególnie istotne), którymi możemy je połączyć z masą lub zasilaniem (3,3V). Rezystory te są częścią układu BCM2xxx (x - różne dla różnych wersji Raspberry), można je włączać i wyłączać programowo. Niestety nie można programowo odczytać które z nich aktualnie są aktywne.

Pewnym wyjątkiem są piny 8 i 9 WiringPi (2 i 3 według BCM w Raspberry rev.2), które mają dodatkowe zewnętrzne rezystory 1,8 kΩ przyłączone na stałe do napięcia zasilania. Są one używane do sterowania magistralą I2C. Pinów tych nie możemy programowo zewrzeć do masy.

Jeśli więc pin GPIO zaprogramujemy na wejście i włączymy rezystor zwierający go do napięcia zasilania, odczytamy na nim jedynkę logiczną, jeśli nie wymusimy zewnętrznym sygnałem innego stanu. Analogicznie, jeśli włączymy rezystor zwierający do masy, odczytamy zero logiczne).

Takie to proste. Wybieramy sobie jakiś wolny pin, włączamy nasz wyłącznik (styki przekaźnika) do tego pinu oraz masy i hardware gotowy.

Teraz software.

Jak w innych przykładach, użyjemy biblioteki wiringPi. Jeśli jej nie masz i nie wiesz jak zainstalować, zerknij na tę stronę.

Korzystając z tej biblioteki możemy zaprogramować pin na wejście lub wyjście:

void pinMode (int pin, int mode) ;

pin to oczywiście numer pinu GPIO, jako mode użyć możemy INPUT, OUTPUT lub PWM_OUTPUT.

Dwa pierwsze parametry są pewnie zrozumiałe, trzeci to modulacja szerokości impulsu (Pulse Width Modulation).

Druga funkcja która nas zainteresuje to

void pullUpDnControl (int pin, int pud) ;

Włączy nam rezystor do zasilania (PUD_UP), do masy (PUD_DOWN) lub wyłączy oba (PUD_OFF).

Jeszcze tylko

int digitalRead (int pin) ;

Funkcja ta zwróci nam stan logiczny (0 lub 1) wskazanego pinu.