To tě jako uživatele nemusí zajímat tobě může stačit vědět, že to tam ta knihovna nějak udělá. Ale víme, že jseš člověk zvídavej, tak jo, je to jak Dex píše - že v nejnižším bajtu bude hodnota modré složky, v dalším zelené, v dalším červené a v nejvyšším bajtu bude 0. (uint32_t je 32 bitů tj. 4 byty a tak holt jeden zbývá (tam se ukládá bílá, kdybys použil všechny 4 složky)).Vladimir66 píše: ↑21 lis 2018, 21:15 jak se ulozi ten prvni parametr strip.Color(0, 25, 0) do promenne uint32_t c ?
Pomoc se výkladem kodu
Re: Pomoc se výkladem kodu
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
Ahoj
no to mne taky napadlo tak jsem tam zkusil dat int jako proměnou i float a stejný výsledek ale když tam napiši
tak to zhasne jak má, tedy postupně.
Mě jen zajímalo a stále zajímá proč nejde použít ten cyklus ke zhasnutí u těch posledních dvou. S tou proměnou máš pravdu ale pokud by tam byl float nebo int tak by to mělo chodit ne? V to příkazu pro neopixel to asi nebude.
no to mne taky napadlo tak jsem tam zkusil dat int jako proměnou i float a stejný výsledek ale když tam napiši
Kód: Vybrat vše
strip.setPixelColor(1,0) ;strip.show();
delay(500);
strip.setPixelColor(0,0) ;strip.show();
delay(500);
Mě jen zajímalo a stále zajímá proč nejde použít ten cyklus ke zhasnutí u těch posledních dvou. S tou proměnou máš pravdu ale pokud by tam byl float nebo int tak by to mělo chodit ne? V to příkazu pro neopixel to asi nebude.
Re: Pomoc se výkladem kodu
No tak já ti to řeknu polopatě: protože tam máš v podmínce i<0 ty lopato
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
Jasně Mirku Dušíne ale i když tam dám i<1 tak to taky nechodí ... je to rozbitý a nevim co stím
Re: Pomoc se výkladem kodu
<
Nastavíš i na jedničku. Uděláš akci. Zmenšíš i o jedničku. Pokud je i MENŠÍ než nula (nebo jedna jak jsi to napsal teď), jdeš do dalšího kola. Kolikrát to tedy uděláš?
Pardon, jsem lopata:
Nastavíš i na jedničku. Pokud je i MENŠÍ než nula (nebo jedna jak jsi to napsal teď), uděláš akci. Zmenšíš i o jedničku. Jdeš do dalšího kola na ten test. Kolikrát to tedy uděláš?
Nastavíš i na jedničku. Uděláš akci. Zmenšíš i o jedničku. Pokud je i MENŠÍ než nula (nebo jedna jak jsi to napsal teď), jdeš do dalšího kola. Kolikrát to tedy uděláš?
Pardon, jsem lopata:
Nastavíš i na jedničku. Pokud je i MENŠÍ než nula (nebo jedna jak jsi to napsal teď), uděláš akci. Zmenšíš i o jedničku. Jdeš do dalšího kola na ten test. Kolikrát to tedy uděláš?
Naposledy upravil(a) DavidO dne 23 lis 2018, 11:06, celkem upraveno 2 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
Počkej tak for příkazu si myslím že jakž takž rozumím a nikdy jsem s tím neměl problém až teď. Je tam jen jeden a to zásadní jak jsem pochopil tak s odečtem prováděným příkazem for se nedostanu s i na nulu.
Nejde to a třeba ano mám někde logickou chybu nebo si to špatně vysvětluji ale neumím ho napsat tak abych poslední kolo měl s i=0.
Proto mi to nechodí, jestli to umíš prosím poraď ... to je ten problém
tohle ještě chodí ale když dám jako podmínku i=0 tak už ne a to jsem se nikde zatím nedočetl že to nelze.
Nejde to a třeba ano mám někde logickou chybu nebo si to špatně vysvětluji ale neumím ho napsat tak abych poslední kolo měl s i=0.
Proto mi to nechodí, jestli to umíš prosím poraď ... to je ten problém
Kód: Vybrat vše
for(int i=3; i>0; i--) {
strip.setPixelColor(i,0) ;
strip.show();
-
- Příspěvky: 385
- Registrován: 02 dub 2014, 15:30
Re: Pomoc se výkladem kodu
https://www.arduino.cc/reference/en/lan ... cture/for/
kdyz je podminka FALSE, tak se ukonci beh smycky.
muzes napsat: for(int i=2; i<4; i++)
nemuzes napsat: for(int i=2; i>4; i++)
nemuzes napsat: for(int i=4; i<2; i--)
nemuzes napsat: for(int i=2; i=4; i++)
nemuzes napsat: for(int i=2; i==4; i++)
muzes ale napsat: for(int i=2; i!=4; i++)
nebo take: for(int i=4; i!=2; i--)
hlubsi rozbor necham povolanejsim
(z toho mi vyplyva, ze univerzalni je pouzit != protoze se nespletu, oproti vyrazum < > kde zalezi na ++ nebo --)
jasně, že je někdy potřeba < > kdyz cislo neni přesné a je jen přibližné. apod.
-------
tak jsem to zkousel na stole a toto mi chodi.
kdyz je podminka FALSE, tak se ukonci beh smycky.
muzes napsat: for(int i=2; i<4; i++)
nemuzes napsat: for(int i=2; i>4; i++)
nemuzes napsat: for(int i=4; i<2; i--)
nemuzes napsat: for(int i=2; i=4; i++)
nemuzes napsat: for(int i=2; i==4; i++)
muzes ale napsat: for(int i=2; i!=4; i++)
nebo take: for(int i=4; i!=2; i--)
hlubsi rozbor necham povolanejsim
(z toho mi vyplyva, ze univerzalni je pouzit != protoze se nespletu, oproti vyrazum < > kde zalezi na ++ nebo --)
jasně, že je někdy potřeba < > kdyz cislo neni přesné a je jen přibližné. apod.
-------
tak jsem to zkousel na stole a toto mi chodi.
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() {
Serial.begin(9600);
strip.begin();
strip.show();
}
void loop() {
//pásek napůl
for(int i=0; i<2; i++) {
Serial.println(i);
strip.setPixelColor(i, 655360) ;
strip.show();
delay(500);}
delay (2000);
for(int i=2; i<4; i++) {
Serial.println(i);
strip.setPixelColor(i, 655360) ;
strip.show();
delay(500);}
delay (2000);
for(int i=3; i>1; i--) {
Serial.println(i);
strip.setPixelColor(i,0) ;
strip.show();
delay(500);}
delay (2000);
for(int i=1; i> -1; i--) {
Serial.println(i);
strip.setPixelColor(i,0) ;
strip.show();
delay(500);}
delay(1000);
Serial.println("-----");
}
Naposledy upravil(a) Vladimir66 dne 23 lis 2018, 01:50, celkem upraveno 9 x.
Re: Pomoc se výkladem kodu
Jo tak se zapornym čìslem jsem v cyklu ještě nepracoval zajimave dík za inspiraci
U for cyklu jsem pouze neveděl že nelze v podmínce požít rovnitko (==) a naopak že lze použít záporné číslo to se mi asi vrylo z picaxe tam to nejde. Dik
U for cyklu jsem pouze neveděl že nelze v podmínce požít rovnitko (==) a naopak že lze použít záporné číslo to se mi asi vrylo z picaxe tam to nejde. Dik
Re: Pomoc se výkladem kodu
Néé, počkej, teď ses nechal úplně zmást. Ve for cyklu v podmínce vždycky piš ==. Ta podmínka ve for je podmínka jako kdekoli jinde. Akorát nedává smysl nastavit i=2 a pak nechat cyklus běžet, dokud platí i==4 protože to neplatí nikdy. Podobně jako ty ostatní příklady, co Vláďa napsal že "nemůžeš" (ve skutečnosti můžeš, ale nedává to smysl). Navíc je obvykle matoucí, jak to je s = a ==. = je přiřazení, == porovnání. Vždycky. Jenže z návrhu jazyka plyne, že tam, kde je podmínka, se dá napsat i přiřazovací příkaz (který má jen to jedno rovnítko), a pořád to z hlediska jazyka bude v pořádku - jen to nebude dělat to samé.
Ještě se omlouvám, včera jsem napsal nepřesnost: for cyklus jede tak, že se nejdřív vykoná inicializační příkaz (to první za závorkou), pak se vyhodnotí podmínka (druhé v závorce) a pokud je splněna, provede se tělo cyklu (příkaz nebo blok příkazů za závorkou) a pak se provede iterační příkaz (to třetí v závorce). A pak se znovu otestuje podmínka atd. atd. a když není splněna, tak se pokračuje dalším příkazem za cyklem. Tak jak jsem to popsal já, by se tělo cyklu provedlo aspoň jednou, i kdyby podmínka už dopředu nebyla splněna. To je dost divné, ale v nějakém jazyce to bylo, snad v nějakém BASICu, už jsem to roky neviděl.
Ještě se omlouvám, včera jsem napsal nepřesnost: for cyklus jede tak, že se nejdřív vykoná inicializační příkaz (to první za závorkou), pak se vyhodnotí podmínka (druhé v závorce) a pokud je splněna, provede se tělo cyklu (příkaz nebo blok příkazů za závorkou) a pak se provede iterační příkaz (to třetí v závorce). A pak se znovu otestuje podmínka atd. atd. a když není splněna, tak se pokračuje dalším příkazem za cyklem. Tak jak jsem to popsal já, by se tělo cyklu provedlo aspoň jednou, i kdyby podmínka už dopředu nebyla splněna. To je dost divné, ale v nějakém jazyce to bylo, snad v nějakém BASICu, už jsem to roky neviděl.
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
To se zápornými čísly v cyklech a s typy, které nemůžou obsahovat záporné číslo (např. uint16_t, kde to u na začátku znamená unsigned) je potřeba si rozmyslet. Když potřebuju začínat od 0, není to problém, když potřebuju nulou skončit, musí se to udělat šikovně. Když bych napsal
Řešení jsou dvě: buď v cyklu použít jako řídící proměnnou nějaký typ se znaménkem (třeba int, short int, long int), pak
takže i sice na začátku nastavím na 6, ale v těle cyklu ho nejdřív zmenším, a pak s tím zmenšeným vykonám příkazy co potřebuju, a pak ostestuju tu podmínku znova. Tím pádem ten příkaz uvnitř provedu pro čísla 5, 4, 3, 2, 1, 0 a pak se zjistí, že i už není větší než 0 a tedy se skončí. Rozdíl oproti for cyklu je ten, že jsem si tady napsal sám, kdy se to i zmenšuje (na začátek těla), zatímco u for cyklu se to provede vždycky až po tom těle.
Obdobně by fungoval i cyklus kdy se ta podmínka testuje po vykonání těla cyklu, ne před ním. To je dokonce o něco úspornější, protože v tomhle případě se podmínka bude vyhodnocovat 6x (poprvé se otestuje, když i je 5), zatímco s podmínkou na začátku 7x (poprvé pro 6, pak pro 5, atd. až pro 0).
(tedy ještě je otázka, co s tím provede kompilátor při optimalizaci, ale to jen na okraj)
for(uint16_t i=5;i>0;i--)
, tak se na vykonání těla s nulou nedostane (naposled se provede tělo s 1, pak se i zmenší o 1, už to nebude >0 a tedy se tělo už neprovede). Pokud bych napsal for(uint16_t i=5;i>=0;i--)
, tak se sice na nulu dostanu, ALE ta podmínka bude splněná vždycky, protože proměnná i je vždycky nezáporná ze své podstaty.Řešení jsou dvě: buď v cyklu použít jako řídící proměnnou nějaký typ se znaménkem (třeba int, short int, long int), pak
for(int i=5;i>=0;i--)
i for(int i=5;i>-1;i--)
bude fungovat tak, jak to na první pohled vypadá. Ale může to být v kontextu programu trochu matoucí. Anebo můžu použít jiný typ cyklu a tu podmínku patřičně upravit, například:
Kód: Vybrat vše
uint16_t i=6;
while (i>0)
{
i--;
strip.setPixelColor(i,0) ;
strip.show();
delay(500);
}
Obdobně by fungoval i cyklus
Kód: Vybrat vše
uint16_t i=6;
do {
i--;
strip.setPixelColor(i,0) ;
strip.show();
delay(500);
}while (i>0);
(tedy ještě je otázka, co s tím provede kompilátor při optimalizaci, ale to jen na okraj)
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.