Béton brut

Mrygaj, mrygaj mała gwiazdko

2019-11-16

Człowiek potrafi się nabawić kompleksów. Bez względu na wiek, dokonania czy stancję w życiu w głębi duszy wiemy, że dookoła są ludzie mądrzejsi, ładniejsi i lepiej poukładani. W mojej prywatnej księdze przewin i uchybień dodałem kilka lat temu paragraf pt. „nawet dzieci teraz robią rzeczy elektroniczne podłączone do Raspberry, a Ty może przeczytałeś kiedyś na Wikipedii opis SPI i tyle”.

Czułem się z tym po dwójnasób źle, że od elektroniki zaczęła się moja przygoda z byciem dziwakiem. Jak zapomnienie pierwszej miłości tak bardzo, że nie możesz przywołać jak miała na imię. I ta nękająca wątpliwość: może jej nigdy nie kochałem? A może nawet nie istniała?

Podczas grzebania na Allegro trafiłem na segment diod LED. Zagooglałem za symbolem i widzę, że ktoś już odwalił za mnie całą robotę i jestem jedno PIP-nięcie od wejścia w posiadanie działającego sterownika. Dziewięć nowych polskich złotych zmieniło ręce. Przyszła paczka. Otwieram. Jedyną dokumentacją załączoną do płytki był paragon fiskalny, a one zwykle niewiele pomagają w podłączaniu elektroniki. No trudno, zalogowałem się na Raspberry, która leży pod moim łóżkiem i powiedziałem poweroff.

Na szczęście dokumentacja biblioteki zawierała instrukcje podłączenia. Pomyliłem się tylko raz, co było spowodowane w większości przez moje grube pazury. Zainstalowałem biblitekę odpowiedzialną za gadanie do MAX7219 i sklonowałem repozytorium żeby mieć katalogów przykładów pod ręką.

I ruszyło! Lecą napisy, pięknie. Polałem sobie drinka żeby dołączyć do setek tysięcy równie uzdolnionych dzieci ze szkół podstawowych. Po krótkiej zabawie stwierdziłem, że przesuwanie tekstów niezbyt mnie cieszy, a nawet wywołuje przykre skojarzenia z <marquee>1 i szyldami reklamowymi. Przy matrycy 8x8 jest to trochę komiczne. Oczywiście będę indywidualnie zapalał piksele. Tylko jak? Wyniki wyszukiwań prowadziły do przykładów, które nie działają już w obecnej wersji. Ale przecież musi być jakiś sposób.

Zerknąłem do kodu źródłowego i oczywiście! Jest metoda display, która przyjmuje monochromatyczny obraz reprezentowany przez PIL.Image. A skoro tak, to mogę przecież od ręki zrobić obrazek i go wstawić.

x = randint(0, 7)
y = randint(0, 7)
image = Image.new("1", (8, 8))
image.putpixel((x, y), 255)

Wcisnąłem to do mojego skrawka kodu i zaświeciły mi się losowo diody. Czułem jak pnę się po drabinie kompetencji. Już widzę jak ze szczytu macha mi Wielki Elektronik. No to teraz trzeba zaprogramować jakieś obrazki. I tu stał się problem. Mam gust, ale nie mam talentu. Bez wątpienia należy ten problem zwalić na kogoś innego.

Napisałem więc „interpretator”, który potrafi zamienić tekst w obrazek i oddałem sprawę mojemu demoscenowemu przyjacielowi, thungowi. On akurat nie miał czasu, ale „narysował” mi ludka.

...**...
..*..*..
...**...
.******.
...**...
..*..*..
..*..*..
........

Prawdziwa sztuka!

Następnego dnia przybyłem na stadion siatkarek ełkaesu godzinę za wcześnie.2 To był dobry czas żeby zrobić z wcześniejszego kodu „format animacji”, tak żebym mógł wyprodukować serię obrazów z jednego pliku. Jak postanowiłem, tak zrobiłem i chwilę przed gwizdkiem sędziny miałem już gotowy prymitywny generator serii obrazków.

Wlazłem znów pod łóżko żeby odpiąć Jeżynę i zniosłem ją na biurko. Stosując metodologię Sir Copy’ego i Lorda Paste nawtykałem jeden kod w drugi.

I stało się. Eppur si muove, parabole tańczą, ludek skacze.

To prawie krępujące chwalić się takimi bzdurami, ale na serio byłem z siebie zadowolony. Nie tylko zabrałem się za coś od razu, ale nawet osiągnąłem wszystko co chciałem i nikt nie musiał nade mną stać i obijać kijem. Pomyślałem: zaskoczę wszystkich jeszcze bardziej jak napiszę notkę. Prawdziwy hat-trick zdziwienia.

Gdy żyjesz życie pełne Logiki Biznesowej, Formatów Wymiany Danych, Garbage In / Kłopoty Out, każda dioda LED świeci jak prywatne słońce, co budzi do życia florę i faunę, która żyje w mojej głowie.


  1. kiedy zagooglacie za <marquee> bo nie jesteście pewni pisowni zwróćcie uwagę, że górny status wyników wyszukiwania przesuwa się w dobrze znany sposób. 

  2. po ekscytującym meczu wygraliśmy 3:1