Saul pisze: Pyra, dziękuję za podpowiedź z tymi drucikami. Takie proste rozwiązania jakoś mi do głowy przychodzą jako ostatnie
No nie ma sprawy, sam wiem, że najprostsze rzeczy na końcu wpadają do głowy
Czyli 1 bajt reprezentuje jasność pojedynczego LEDa, a ta jest wyrażona stosunkiem ilości zer do jedynekSaul pisze:Na początku wygląda to tak:
0,0,255,255,255,0,0,0|0,0,0,0,0,0,0,0|0,0,0,0,0,0,0,0|0,0,0,0,0,0,0,0|0,0,0,0,0,0,0,0
Trzy "diody" zapalone, ale poza obszarem widzialnym.
Teraz w pętli zaczynam sprawdzać od początku kolejne bajty. Jeśli = 0 to sprawdzam kolejny. Jeśli różny od 0 to robię jemu przesunięcie bitowe w prawo i wstawiam w to samo miejsce. Następnie w kolejne dwa bajty wstawiam 255, a w następny wstawiam ten pierwszy bajt, na którym robiłem przesunięcie bitowe, z tym że w postaci zanegowanego odbicia lustrzanego. Tak bitowo wygląda cała sekwencja:
11111111,11111111,11111111,00000000
01111111,11111111,11111111,00000001
00111111,11111111,11111111,00000011
00011111,11111111,11111111,00000111
00001111,11111111,11111111,00001111
00000111,11111111,11111111,00011111
00000011,11111111,11111111,00111111
00000001,11111111,11111111,01111111
00000000,11111111,11111111,11111111
i tak w kółko, aż śnieżynka nie spadnie w obszar pamięci nie odwzorowanej na diodach. Algorytm pewnie niezbyt wyszukany, ale taki obmyśliłem
Teraz zapalasz LEDa jeśli w kolejnym bicie jest 1 a nie zapalasz jeśli zero, czyli wyświetlanie jest w pętli 8 przebiegowej i po kolei obrazujesz bity wszystkich bajtów, uzyskując w ten sposób PWM 1:8. Sprytne, jeśli dobrze rozumuję
Co do bajtów startowych, to na początku też je chciałem umieszczać bezpośrednio w "niewidocznych" miejscach pamięci, ale potem stwierdziłem, że będę je robił na bieżąco w pętli, przez co zyskuję możliwość dowolnego kształtowania długości śnieżynki, tylko przez zmianę długości pętli.
Pozdrawiam