Pomoc se výkladem kodu
Re: Pomoc se výkladem kodu
Už je to jasné colorWipe chtělo jen důkladněji prostudovat.
-
- Příspěvky: 385
- Registrován: 02 dub 2014, 15:30
Re: Pomoc se výkladem kodu
a ja mam opet jednu laickou otazku..
jak se ulozi ten prvni parametr strip.Color(0, 25, 0) do promenne uint32_t c ?
bude to 000 000 025 000 ?
-V66
jak se ulozi ten prvni parametr strip.Color(0, 25, 0) do promenne uint32_t c ?
bude to 000 000 025 000 ?
-V66
Re: Pomoc se výkladem kodu
To ví jen knihovník z knihovnyVladimir66 píše: ↑21 lis 2018, 21:15 a ja mam opet jednu laickou otazku..
jak se ulozi ten prvni parametr strip.Color(0, 25, 0) do promenne uint32_t c ?
<Adafruit_NeoPixel.h>
Od té tu kód nemáme. Ale pokud je to například TAHLE, tak to bude asi na řádku 2108
return ((uint32_t)r << 16) | ((uint32_t)g << 8) | b;
a potom to tedy bude 6400.
(což je tedy 152,4× víc než 42)
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
Re: Pomoc se výkladem kodu
No a ted se tedy zase zeptám já, můžeš prosím ten výraz přeložit tak, abych věděl jak jsi k tomu 6400 došel?
Re: Pomoc se výkladem kodu
Já jsem jen udělal 25*256, ale to je jen zkratka pro hloupé kalkulačky a líné prsty.
Správně bych měl udělat 0 << 16 (číslo 0, rotace doleva o 16 bitů) + 25 << 8 (číslo 25, rotace doleva o 8 bitů) + 0.
Teď nevím do jaké jít hloubky. To že 0, 25, 0 jsou parametry té funkce v pořadí r,g,b je asi jasné, takže máme dvě nuly, ty jsou jasné a přeskočíme je.
Zůstalo nám 25 (desítkově) posunuto doleva o 8 bitů (bitový posun je nutné dělat dvojkově).
Takže matematikou bez násobení, ale s převodem si vezmeme číslo 25 desítkově a převedeme si jej na dvojkové 00000000000000000000000000011001.
Posun doleva znamená, že na levé straně ubíráme nuly a vracíme je na pravou stranu.
dostaneme číslo: 00000000000000000001100100000000 a to je desítkově 6400
Nebo matematikou s násobením - posun doleva o jeden bit znamená násobení 2. (sleduj rozdíl mezi 01 a 10 binárně), takže vezmeme číslo 25 a 8× jej vynásobíme *2
Mno a já jsem si jednou předpočítal, že když něco 8× udělám *2, tak je to vlastně jako 2^8 a to ke 256, takže proto 25*256
Ono by to bylo mnohem čitelnější, pokud by to celé proběhlo hexa. To bychom měli 0x00, 0x19, 0x00 přepsáno na 0x00001900 protože posun o 8 bitů je jednoduše následující bajt.
Správně bych měl udělat 0 << 16 (číslo 0, rotace doleva o 16 bitů) + 25 << 8 (číslo 25, rotace doleva o 8 bitů) + 0.
Teď nevím do jaké jít hloubky. To že 0, 25, 0 jsou parametry té funkce v pořadí r,g,b je asi jasné, takže máme dvě nuly, ty jsou jasné a přeskočíme je.
Zůstalo nám 25 (desítkově) posunuto doleva o 8 bitů (bitový posun je nutné dělat dvojkově).
Takže matematikou bez násobení, ale s převodem si vezmeme číslo 25 desítkově a převedeme si jej na dvojkové 00000000000000000000000000011001.
Posun doleva znamená, že na levé straně ubíráme nuly a vracíme je na pravou stranu.
dostaneme číslo: 00000000000000000001100100000000 a to je desítkově 6400
Nebo matematikou s násobením - posun doleva o jeden bit znamená násobení 2. (sleduj rozdíl mezi 01 a 10 binárně), takže vezmeme číslo 25 a 8× jej vynásobíme *2
Mno a já jsem si jednou předpočítal, že když něco 8× udělám *2, tak je to vlastně jako 2^8 a to ke 256, takže proto 25*256
Ono by to bylo mnohem čitelnější, pokud by to celé proběhlo hexa. To bychom měli 0x00, 0x19, 0x00 přepsáno na 0x00001900 protože posun o 8 bitů je jednoduše následující bajt.
Za pravopisné chyby v této zprávě může moje učitelka češtiny.
-
- Příspěvky: 385
- Registrován: 02 dub 2014, 15:30
Re: Pomoc se výkladem kodu
tak to vim,
je to cislo 25, ktere je odrolovano o 8 pozic doleva (nahoru).
prepni si kalkulacku ve windows na programatorskou a udelej 8x RoL s cislem 25
a je to tak, jak jsem si myslel 000 000 025 000 (ctyri bajty) = 00 00 19 00 hex
je to cislo 25, ktere je odrolovano o 8 pozic doleva (nahoru).
prepni si kalkulacku ve windows na programatorskou a udelej 8x RoL s cislem 25
a je to tak, jak jsem si myslel 000 000 025 000 (ctyri bajty) = 00 00 19 00 hex
Re: Pomoc se výkladem kodu
Jasně matematiku bych asi zvládl ale ta syntaxe toho výrazu... tam jsem nevěděl. Tak moc dík za úplný výklad
Re: Pomoc se výkladem kodu
Zdravím
dnes se to trochu vymkne nadpisu ale při troše dobré vůle se to tam dá napasovat. Potřeboval bych poradit s decrementem. Napsal jsem program kde se postupně rozsvěcí dvě a dvě neoled a taky tak se mají zhášet. Jenže to nepracuje do konce. Rozsvítí se dobře první dvě zhasnou také ale ty dvě poslední ne a ne donutit zhasnout tak maximálně jen tu jednu ale poslední se nechce zhášet. Myslím že mám něco špatně v cyklu for ale nemohu přijít na to co. Mohl by mi s tím někdo pomoci ?
dnes se to trochu vymkne nadpisu ale při troše dobré vůle se to tam dá napasovat. Potřeboval bych poradit s decrementem. Napsal jsem program kde se postupně rozsvěcí dvě a dvě neoled a taky tak se mají zhášet. Jenže to nepracuje do konce. Rozsvítí se dobře první dvě zhasnou také ale ty dvě poslední ne a ne donutit zhasnout tak maximálně jen tu jednu ale poslední se nechce zhášet. Myslím že mám něco špatně v cyklu for ale nemohu přijít na to co. Mohl by mi s tím někdo pomoci ?
Kód: Vybrat vše
#include <Adafruit_NeoPixel.h>
#define PIN 6
Adafruit_NeoPixel strip = Adafruit_NeoPixel(4, PIN, NEO_GRB + NEO_KHZ800);
void setup() {
strip.begin();
strip.show();
}
void loop() {
//pásek napůl
for(uint16_t i=0; i<2; i++) {
strip.setPixelColor(i, 655360) ;
strip.show();
delay(500);}
delay (2000);
for(uint16_t i=1; i<4; i++) {
strip.setPixelColor(i, 655360) ;
strip.show();
delay(500);}
delay (2000);
for(uint16_t i=3; i>1; i--) {
strip.setPixelColor(i,0) ;
strip.show();
delay(500);}
delay (2000);
for(uint16_t i=1; i<0; i--) {
strip.setPixelColor(i,0) ;
strip.show();
delay(500);}
delay(1000);
}
Re: Pomoc se výkladem kodu
Jestli mě paměť neklame, neopixely jsou počítané od 0 do počet-1, 0 je nejblíž Arduinu. Tak jak to máš napsané, tak první cyklus rozsvítí první dvě, počká se 2s, rozsvítí se druhá, třetí, čtvrtá, počká se 2s, zhasne se čtvrtá, třetí, počká se 2sec a pak to je blbě, protože to startuješ s 1, ale test je jestli to je <0 a to není nikdy, protože proměnná i je typu uint16_t neboli nezáporné číslo, 0-něco, tedy nikdy není <0.
Naposledy upravil(a) DavidO dne 22 lis 2018, 19:40, celkem upraveno 1 x.
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.
Re: Pomoc se výkladem kodu
Jo a do funkce setPixelColor můžeš posílat jednotlivé složky, to je pro tebe asi jednodušší:
strip.setPixelColor(n, red, green, blue);
Nikoho plánovaně neurážím. Jestli se Vám nelíbí co píšu, tak to nečtěte. A ostatně, třeba za to nemůžu - Researchers believe that dark humor can be a significant symptom of dementia.