• Witaj na Forum Arduino Polska! Zapraszamy do rejestracji!
  • Znajdziesz tutaj wiele informacji na temat hardware / software.
Witaj! Logowanie Rejestracja


Ocena wątku:
  • 0 głosów - średnia: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Czy mógłby mi ktoś wytłumaczyć co oznacza ten fragment kodu?
#1
Hej! Mam problem ze zrozumieniem tego konkretnego kawałka kodu:

Kod:
uint32_t rgb = (uint32_t) strtol((const char *) &payload[1], NULL, 16);

                analogWrite(LED_RED,    ((rgb >> 16) & 0xFF));
                analogWrite(LED_GREEN,  ((rgb >> 8) & 0xFF));
                analogWrite(LED_BLUE,   ((rgb >> 0) & 0xFF));


Dokładnie chodzi mi o całą pierwszą linijkę oraz argumenty typu:
Kod:
((rgb >> 16) & 0xFF));


Mógłby ktoś na szybko powiedzieć co to robi lub chociaż poratować jakimś linkiem? Gdyż nawet nie bardzo wiem pod jakim hasłem wyszukać informacji w tym temacie. 

Z góry dzięki za pomoc Smile
 
Odpowiedź
#2
Poczytaj o przesunięciach bitowych, czyli szybkim mnożeniu i dzieleniu..

rgb >>16 przesuwa w prawo o 16 bitów czyli dzieli RGB/ 2^4 dany wynik jest porównywany "&" 0xFF (czyli z 255) operacje bitowe

0xFF w formie binarnej to 0000000011111111 kiedy rgb podzielone da nam wynik np,100 to w formie binarnej 0000000001100100 i to porównanie da nam wynik

0000000011111111
0000000001100100
0000000001100100 wynik 100

Te "& 0xFF" jest tylko po to żeby zawsze podzielona liczba dała nam max 255...

Bo jeśli jakimś cudem podzielone RGB da nam więcej niż 255 dajmy na to 300 wiec w postaci binarnej 0000000100101100

0000000011111111
0000000100101100
0000000000101100 to porównanie skróci nam do 44
Arduino zostało wymyślone po to, by robić dobrze jedną prostą rzecz – migać diodą. 
 
Odpowiedź
  


Skocz do:


Przeglądający: 1 gości