Serwisy partnerskie:
Close icon
Serwisy partnerskie

Ekscytacje Maxa. Migające diody LED i śliniący się inżynierowie (13)

Article Image
Ojej! Nie mogę uwierzyć, że jesteśmy już w 13 części tej wspaniałej mini-mega-serii. Hmmm, „trzynaście”. Mam przyjaciela, który odmawia wychodzenia z domu w piątek trzynastego, chociaż są też i tacy, którzy twierdzą, że to ich szczęśliwa liczba.

Jesteś zdezorientowany?

Gdy mamy piksele (w postaci trójkolorowych diod LED, w naszym przypadku) ułożone w pierścienie, jedną z rzeczy, które często chcemy zrobić, jest cykliczne włączanie nowego piksela i wyłączanie starego piksela w tym samym czasie. W poprzednich odcinkach mówiliśmy o różnych technikach, których możemy użyć, aby to osiągnąć. Z przykrością muszę jednak stwierdzić, że kilku czytelników wysłało do mnie e-maile z informacją, że nadal są zaskoczeni, zdezorientowani i zakłopotani – być może dlatego, że nie mogliśmy powstrzymać się od wprowadzenia i zbadania rogu obfitości alternatywnych podejść w trakcie naszej wędrówki. Poświęćmy więc chwilę, aby zebrać wszystkie te taktyki w jednym miejscu i zróbmy wszystko, co w naszej mocy, aby je zdemistyfikować.

W przypadku mojego projektu Silnika Prognostycznego pierścienie mają po 16 pikseli. Jednakże, jak zauważyłem w poprzednim odcinku (EdW08/2024), kiedy próbuję coś ogarnąć, najpierw lubię uprościć problem, co – w tym przypadku – oznacza zmniejszenie liczby pikseli. Mając wybór, chcemy znaleźć ogólne rozwiązanie, które może działać dla dowolnej liczby pikseli, więc zazwyczaj wybieram małą liczbę pierwszą, wychodząc z założenia, że jeśli nasze rozwiązanie działa w tym przypadku, to będzie działać we wszystkim.

Tak więc, wyłącznie na potrzeby naszych eksperymentów myślowych, załóżmy, że mamy 5-pikselowy pierścień i że nasze piksele są ponumerowane zgodnie z ruchem wskazówek zegara, zaczynając od 0 na górze (rysunek 1a). Czasami możemy chcieć ustawić pojedynczy piksel ścigający się wokół pierścienia w kierunku zgodnym z ruchem wskazówek zegara (rysunek 1b); innym razem możemy zdecydować się na obrót w kierunku przeciwnym do ruchu wskazówek zegara (rysunek 1c).

Aby zachować ogólność tych dyskusji, załóżmy, że liczba pikseli, którymi gramy, jest zdefiniowana jako NUM_P, która w tym przykładzie będzie wynosić 5. Ponadto, ponieważ nasze piksele są ponumerowane od 0 do 4, załóżmy również, że zdefiniowaliśmy MAX_P jako (NUM_P – 1), ponieważ pozwoli nam to uniknąć konieczności ciągłego odejmowania 1.

Jak omówiliśmy we wcześniejszych odcinkach, jeśli wykonujemy obrót zgodnie z ruchem wskazówek zegara i jeśli jesteśmy obecnie gotowi do aktywacji piksela P, to przez większość czasu chcemy dezaktywować piksel (P – 1). Tylko wtedy, gdy chcemy aktywować piksel 0, musimy dezaktywować piksel MAX_P. Podobnie, jeśli wykonujemy obrót w kierunku przeciwnym do ruchu wskazówek zegara i jeśli obecnie chcemy aktywować piksel P, to przez większość czasu chcemy dezaktywować piksel (P + 1). Tylko wtedy, gdy chcemy aktywować piksel MAX_P, musimy dezaktywować piksel 0.

Rysunek 1. Obroty zgodne i przeciwne do ruchu wskazówek zegara
Aby przeczytać ten artykuł kup e-wydanie
Kup teraz
Firma:
Tematyka materiału: Czas testów (instrukcji warunkowych), Kurczaki i jajka, Kręte tabele, delay(), loop(), for(), cWise, acWise, PixelPtrs[], PadDelay
AUTOR
Źródło
Elektronika dla Wszystkich październik 2024
Udostępnij
Zobacz wszystkie quizy
Quiz weekendowy
Czujniki temperatury
1/10 Temperatura to
UK Logo
Elektronika dla Wszystkich
Zapisując się na nasz newsletter możesz otrzymać GRATIS
najnowsze e-wydanie magazynu "Elektronika dla Wszystkich"