Artykuły
W poprzednich artykułach toczyliśmy boje z pewnym monitorem, chcąc przejąć nad nim kontrolę za pomocą interfejsu podpinającego się pod klawiaturę urządzenia. W końcu udało się nam i możemy zająć się oprogramowaniem naszego interfejsu. Ponieważ jednak odrzuciliśmy potencjometr, musimy jeszcze ustalić najkrótszy czas pomiędzy wciśnięciami przycisków, które będą rejestrowane jako oddzielne. Musimy więc powrócić na chwilę do poprzedniego układu z potencjometrem i ustalić minimalny czas między impulsami, ignorując ich sporadyczne gubienie, a skupiając się na sytuacji, gdy impulsy masowo zaczną się ze sobą scalać. Poznaną już metodą dzieleń przez dwa określamy okolice, w których wyraźnie zwiększa się ilość gubionych impulsów. Szukamy wartości, która nie wykazuje tej cechy, lekko ją powiększamy i otrzymujemy wynik: w wypadku tego urządzenia jest to 20 ms. Co oznacza, że przewinięcie całego zakresu zajmie nieco ponad dwie sekundy (20 ms przerwy plus 3 ms na wciśnięcie razy 101). W przypadku użycia klawiaturki monitora trwa to znacznie dłużej i tutaj już mamy konkretny profit.
…Struktura klawiaturki hackowanego w poprzednim artykule monitora jest bardziej chytra, niż się wydaje. Tak naprawdę mamy tutaj dwie linie, a nie sześć i dzielniki rezystorowe, tak dobrane, że zwieranie tych linii wymusza pojawienie się trzech przedziałów napięć. Więc wystarczyłoby nam się podłączyć dwoma liniami, ale analogowymi. Podawalibyśmy konkretne napięcie i układ interpretowałby to jak wciśnięcie konkretnego przycisku. To jest sposób, ale nieco skomplikowany. Należałoby scałkować przebiegi PWM i dobrać szybkość zmian tak, by nie były rejestrowane napięcia przejściowe. Zrezygnowałem z tego pomysłu na rzecz sześciu linii sterowanych transoptorami.
…Czym jest hackowanie? Właściwie to nikt do końca nie wie, bo tak określa się wszystko, co jest związane z włamywaniem się do programów czy systemów i zmienianiem ich zachowania na swoją modłę. Tak więc pojęcie to jest szerokie, podobnie jak motywy – od ciekawości, usprawnień, przez omijanie ograniczeń, czasem postawionych świadomie, po działalność już stricte nielegalną. Ponieważ mówimy tutaj o Arduino, poprzestanę na węższym nieco znaczeniu hackowania i celu: będziemy włamywać się do sprzętu, by uczynić jego pracę wygodniejszą. W każdym razie – na początek.
…Najmniejszą komórką społeczną świata komputerów jest bit. Zawiera zmienną, która może przyjmować dwa stany: zero i jeden. Być może, żeby nie było mu smutno, można go też obsługiwać na dwa inne sposoby, zadając pytania o stany LOW i HIGH oraz fałsz i prawdę. O tym pisałem w kontekście zmiennych i tę określono jako bool.
…Tablica – rzecz niezwykle przydatna, a z doświadczenia wiem, że tu zaczynają się schody. Spróbujmy tak: tablica jest zbiorem elementów, których jest za dużo, żeby wybierać je serią instrukcji if, czy nawet switch case. Jak pisałem w poprzednim artykule, ta ostatnia funkcja nadaje się do wyliczanek kilkunastu, góra kilkudziesięciu warunków. Z reguły jednak tak duże wyliczanki dotyczą sytuacji, gdy warunki tworzą działania niepodobne do siebie. Na przykład gdy jedno, to „zapal światło”, a drugie – „zakręć silniczkiem”.
…I znowu instrukcja, której w zasadzie mogłoby nie być, ale w określonych warunkach stracilibyśmy na czytelności i szybkości działania programu. Napiszmy kolejny nieużyteczny szkic, który będzie mieć jednak znaczenie szkoleniowe, a który wykorzysta Płytkę Edukacyjną TME
…Przypomnę: omawiałem dotąd takie instrukcje sterujące jak if w różnych formach rozbudowania (występująca także z else) oraz while. Pozostała nam niezbędna for, przydatna switch i pozostałe, już o wiele rzadziej używane, których w zasadzie mogłoby nie być. Ale nie dotyczy to for, bez której nie ma programowania, choć nie do końca, bo teoretycznie można by ją uczynić z funkcji if, acz byłoby to nieeleganckie.
…W poprzednim artykule opisałem cztery tryby pracy portów: praca dwustanowa i pseudoanalogowa w obie strony. Jednak wybrane piny mogą być portami bardziej zaawansowanymi. Najbardziej popularną i najprostszą realizacją takiego działania jest port szeregowy. Występuje zwykle w parze, jeden pin nadaje, drugi – odbiera i Uno realizuje to sprzętowo na pinie zerowym i pierwszym. Podczas programowania układu tędy przychodzą dane, ale potem można ów port wykorzystać do własnych celów, nie przejmując się koniecznością pisania programowej realizacji transmisji. Będzie to natomiast konieczne, gdybyśmy chcieli mieć więcej takich portów. Oczywiście ten prastary typ portu szeregowego to nie wszystko. Możemy korzystać z nowocześniejszych i szybszych tworów, które są współczesnymi standardami: a więc I2C i SPI, a także inne, które można znaleźć zwłaszcza w nowoczesnych realizacjach płytek.
…Przykłady w poprzednich artykułach zawierały tajemnicze wyrażenia włączające świecenie diod i sprawdzanie pstryczków. Mówiłem, że do tego powrócę i teraz będzie czas na przyjrzenie się temu krok po kroku. Każde Arduino ma pewną liczbę pinów, z których możemy tworzyć funkcjonalne porty: do włączania światła, analizy stanu przełącznika, pomiaru napięcia i wielu innych rzeczy. Jeśli przeanalizujemy wszystkie zadania z tym związane, okaże się, że wcale aż tak wiele tego nie ma.
Po pierwsze: każdy port może być wyjściowy, czyli będzie oferował jakieś napięcia albo wejściowy – w tym wypadku napięcia będą musiały być doprowadzone. Po włączeniu prądu czy po resecie możemy wszystkie piny traktować jak nieokreślone i te, z których mamy zamiar korzystać, należy koniecznie zdefiniować. Teoretycznie może to być uczynione kiedykolwiek, byle przed pierwszym użyciem pinu, ale przyjęło się to robić na początku programu, w bloku setup. Piny możemy zdefiniować na trzy sposoby. Pierwszym jest wyjście.
…Po naszych przygodach ze wszystkimi odmianami funkcji if czas na kolejny krok. Przyjrzyjmy się teraz instrukcji while Kolejny szkic ukaże nam modelowe sterowanie klawiaturą typu: plus-minus. Do takich rzeczy właśnie ta instrukcja świetnie się nadaje.
…