[142] Arduino i mierniki panelowe cz. 4
![[142] Arduino i mierniki panelowe cz. 4](/_next/image?url=https%3A%2F%2Farduino.pl%2Fimgproxy%2FwHgYaRtFy1Y5X6nBAtoR8X_v5uyGM1OgX5TyHdcfIZo%2Ff%3Awebp%2Fw%3A1200%2FbG9jYWw6Ly8vaW1hZ2VzLzQtNjk0L2JmZTM3L2QxZjM2LzQtNjk0YmZlMzdkMWYzNjk0OTMxOTcwMy5wbmc%3D.webp&w=3840&q=75)
Czas na drugą zabawkę związaną z wykorzystaniem miernika panelowego: zbudujemy sobie elektroniczną kostkę do gry. W tym celu podmienię tarczę na inną, nie tylko graficznie, ale też ideą. W wypadku zegara wartości były rozłożone na skali nieliniowo, ale liniowo elektrycznie. Teraz będzie na odwrót: podzieliłem skalę na równe części, co 12 stopni, symetrycznie względem środka i ustawiłem tam pozycje: sześć – jak w kostce do gry, bo będzie to właśnie kostka, tyle że elektroniczna.

Skrajne pozycje nie są opisane. Po lewej – wiadomo, mamy pozycję spoczynkową. Po prawej – maksymalne wychylenie podczas animacji związanej z losowaniem. Ale konkrety to już zobaczmy w programie.
Najpierw jednak uruchomimy kalibrator z poprzedniego artykułu i za pomocą potencjometru odpiszemy wartości PWM dla wskazówki ustawionej na wybranych pozycjach. Zapamiętajmy je, przydadzą się za chwilę. A konkretnie tutaj: oto szkic naszej elektronicznej kostki.
const byte miernik = 11; // Adres portu, do którego podłączony jest miernik.
const byte losuj = 8; // Przycisk uruchamiający losowanie.
const byte kostka[6] = { 41, 74, 107, 139, 174, 208 }; // Wartości "kostki" na panelu miernika.
void setup() {
pinMode(miernik, OUTPUT); // Deklaruj porty.
pinMode(losuj, INPUT_PULLUP);
}
void loop() {
if (digitalRead(losuj) == HIGH) { // Jeśli przycisk losowania zostanie wciśnięty...
analogWrite(miernik, 0); // Przenieś wskazówkę na początek zakresu z pełną szybkością.
delay(200); // Zaczekaj.
for (byte x = 0; x < 255; x++) { // Przenieś wskazówkę na koniec zakresu ze zwolnioną szybkością.
analogWrite(miernik, x);
delay(3); // Opóźnienie związane ze zwolnioną szybkością.
}
analogWrite(miernik, kostka[random(6)]); // Przenieś wskazówkę na wylosowaną pozycję.
}
}Wykorzystam teraz środkowy przycisk klawiaturki płytki edukacyjnej TME, który będzie włączał „rzut kostką”. Zaraz niżej mamy tablicę, w której siedzą pomierzone wartości.
const byte kostka[6] = { 41, 74, 107, 139, 174, 208 };Gdyby się nam rozkalibrowały, zawsze można je podmienić. W głównej pętli nie będzie się dziać za wiele. Po wciśnięciu przycisku losowania wyzerujemy strzałkę, zaczekamy chwilę, by się ustabilizowała i będziemy ją przesuwać aż do końca zakresu. Wartości opóźnień dobrałem na oko, każdy może sobie wpisać własne. Na końcu do rejestru PWM wpiszemy wylosowaną wartość z tablicy i to już wszystko. Wskazówka pozostanie ustawiona na wylosowanej pozycji do momentu kolejnego wciśnięcia przycisku losującego.
Gdyby ktoś myślał, że da się tu oszukiwać – nie ma szans. Wyzwalanie mamy ręczne, więc kolejne losowania nie pozostają ze sobą w jakimkolwiek związku. Na dobrą sprawę w takim wypadku nie potrzeba nawet funkcji random, a wystarczyłoby szybkie liczenie modulo sześć, o rzędy wielkości szybsze od umiejętności człowieka do odliczania stałych interwałów. Przy kilkudziesięciu hercach nikt już nie dałby rady niczego przewidzieć.
To tylko przykłady prostych zabawek. W ten sposób można tworzyć różnego rodzaju gry losowe, ruletki i inne urządzenia, bezpieczne jeśli używamy ich w domu i co najwyżej obstawiamy cukierki. A sam miernik możemy użyć do zbudowania minutnika czy wskaźnika jakiejkolwiek wartości mierzonej, z możliwością linearyzowania wyników – jak w ostatnim przykładzie. Rozdzielczość dziesięciobitowa jest w praktyce wystarczająca nawet dla najbardziej precyzyjnych mierników.















































