Zaczynając od początku:
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
x i y określają współrzędne pixela, wartość bw określa czy pixel ma zostać aktywowany(wartość bw różna od zera), czy wygaszony (wartość bw równa zero).
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Prosty warunek, sprawdzający czy podane współrzędne nie wykraczają poza zadeklarowany rozmiar wyświetlacza i czy nie są ujemne.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
Tutaj dzieje się cała "magia".
Warunek określa, czy pixel chcemy zapalić, czy zgasić, ale to chyba oczywiste.
Pierwsza ważna informacja, że bajty "ułożone są" pionowo, a każdy bit reprezentuje jeden pixel.
Przyda się taki prowizoryczny rysunek wycinka wyświetlacza o rozmiarze 128x16
![Obrazek](https://obrazkiforum.atnel.pl/thumb/3542/d8105097ab7bc2e9ca5ff412d03c82ac.png)
Kolorem pomarańczowym zaznaczyłem Ci jeden bajt, dokładnie odwzorowany przez ssd1306_buf[0]
Każda kratka to jeden pixel.
Kolorem żółtym zaznaczyłem pixel, który chcemy zapalić, który ma współrzędne
y = 10
x = 4
Liczby na dole i na górze oznaczają kolejne indeksy tablicy bufora.
Teraz musimy policzyć, pod którym indeksem znajduje się nasz bajt, którego bit chcemy ustawić na 1.
Z rysunku widać, że jest to numer 132, więc musimy uzyskać
ssd1306_buf[132], do tego jest te równanie:
x+ (y/8)*SSD1306_WIDTH
x zawiera się z przedziału 0-127, więc bezpośrednio wskazuje na interesującą nas kolumnę.
y, tutaj jest trochę trudniej, gdyż pracujemy na całych bajtach i obliczyć musimy, w którym bajcie znajduje się interesujący nas bit, w tym celu dzielmy te wartość przez 8, tj ilość bitów w bajcie.
SSD1306_WIDTH określa szerokość wyświetlacza, tutaj 128. Wykorzystany jest w oczywistym celu. Jeśli chcemy wybrać drugą linię bajtów, musimy wpierw "przeskoczyć" 128 indeksów pierwszej linii bajtów (podkreślam, bajtów oddzielonych na rysunku linią zieloną a nie bitów).
Także policzmy dla naszego przykładu, aby zaświecić żółty pixel:
4+(10/8)*128
Pamiętając, że dzielimy na liczbach całkowitych
indeks = 4+1*128
indeks = 128+4
indeks = 132
Zgadza się z wartością wcześniej odczytaną z rysunku.
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.
To już jest oczywiste, za pomocą modulo (reszta z dzielenia), wyznaczamy który bit z całego bajtu chcemy zmienić.
Z rysunku widzimy, że jest to bit 2 (liczmy od zera) bajtu 132
Nasz y wynosił 10 więc
10 mod 8 = 2
Również się zgadza, z odczytanym przez nas 2 z rysunku.
Jeśli dalej do końca nie rozumiesz, popatrz do noty SSD1306 pod hasłem GDDRAM