Fade
Moderátori: psichac, Moderátori
Fade
Zdravím, chcem sa opýtať ako obísť použitie relačných operátorov na uskutočnenie operácie :
premenné:
a, b, c, d, e, f
keď "a" dosiahne za čas napr: 500 ms hodnotu 255 tak začne klesať ale začne v tom istom okamihu stúpať hodnota na "b" a keď dosiahne hodnotu 255 začne zase klesať a v tom istom okamihu stúpať hodnota na "c" a to iste dookola až po "f" keď "f" dosiahne hodnotu 255 tak začne klesať a začne v tom istom okamihu stúpať hodnota na "a"
Fade cyklus bez toho aby nebola nejaká hodnota premennej v hodnote 0
premenné:
a, b, c, d, e, f
keď "a" dosiahne za čas napr: 500 ms hodnotu 255 tak začne klesať ale začne v tom istom okamihu stúpať hodnota na "b" a keď dosiahne hodnotu 255 začne zase klesať a v tom istom okamihu stúpať hodnota na "c" a to iste dookola až po "f" keď "f" dosiahne hodnotu 255 tak začne klesať a začne v tom istom okamihu stúpať hodnota na "a"
Fade cyklus bez toho aby nebola nejaká hodnota premennej v hodnote 0
0
-
- Ultimate člen
- Príspevky: 6236
- Dátum registrácie: 20 Júl 2007, 00:00
- Vek: 41
Re: Fade
nieco podobne som riesil v algoritme pre fade rozsvietenie schodov. Moj princip: cyklus, kde periodicky prechadzam vsetky kanaly. ak predchadzajuci je vyssi ako urcita hodnota, tak aktualny incrementujem. + samozrejme kontrola na max. hodnotu a musi tam byt vynimka pre prvy, aby sa to odstartovalo. mam tam aj fade out a rozlisuje to, ci to ma ist od 1..x alebo x..1
zajtra by som postol kod, ale je to pre arduino a je to fakt par riadkov.
zajtra by som postol kod, ale je to pre arduino a je to fakt par riadkov.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Fade
To je čo za masochizmus? Prečo bez relačných operátorov? Nuž ale dobrePacient napísal:ako obísť použitie relačných operátorov
Kód: Vybrať všetko
unsigned char a, b, c, d, e, f;
unsigned char *pUp, *pDown;
a=b=c=d=e=f=0;
pUp=&a;
pDown=&f;
while (1){
if (tick) {
(*pUp)++;
(*pDown)--;
if (!(*pUp)){ // posupni ukazatele ak sme pretiekli na 0
if (pUp == &a) { pUp=&b; pDown=&a;}
else if (pUp == &b) { pUp=&c; pDown=&b;}
else if (pUp == &c) { pUp=&d; pDown=&c;}
else if (pUp == &d) { pUp=&e; pDown=&d;}
else if (pUp == &e) { pUp=&f; pDown=&e;}
else { pUp=&a; pDown=&f;}
}
tick=0;
}
}
Keby si miesto tých x premenných použil pole tak by sa dalo hafo ifov urobiť jedným.
Je to z hlavy takže to ani nemusí fungovať, ale je to principiálny nástrel. tick nastavuje prerušenie.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Ultimate člen
- Príspevky: 6236
- Dátum registrácie: 20 Júl 2007, 00:00
- Vek: 41
Re: Fade
Kód: Vybrať všetko
for (channel=0;channel<=(firstChannel+lastChannel);channel++) { // periodically surf channels
value=0;
if (channel==firstChannel) { // exception for first channel
value=chval[channel];
sendData(channel,value,fade);
} else { // all other channels
value=chval[channel+work]; // value for previos channel
if ((fade>0 && value>=lightOn) || (fade<0 && value<=lightOff)) { // previous value is in interval to change
value=chval[channel];
sendData(channel,value,fade); //send value for channel
}
}
channel - index, ktory kanal sa prave spracuva v cykle
firstchannel - index prveho kanala (viem ist od prveho po posledny, alebo od posledneho k prvemu)
fade - +1, alebo -1 - ci sa rozsvecuje, alebo zhasina
lightOn - hodnota, ktoru ked dosiahne predchadzajuci kanal, tak sa zacne rozvecovat aktualny
lightOff - to iste, ale pre zhasinanie
+nejaka ta omacka okolo, ako kontrola tlacidla, komunikacia s pwm modulom, definovanie poctu kanalov... celkovo ma moj projekt aj s nastavovanim a deklaraciou okolo 120 riadkov.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Fade
pocitujlasku: Ale to podstatné tam nemáš. Neobišiel si použitie relačných operátorov.
Pacient: aký máš na to dôvod?
To pole som myslel takto nejako:
Krajšie že. A je mi vcelku jedno či ich bude 6 alebo 50.
(pocitujlasku čiastočne som ti vykradol meno poľa)
Pacient: aký máš na to dôvod?
To pole som myslel takto nejako:
Kód: Vybrať všetko
unsigned char chanels[6];
unsigned char *pUp, *pDown;
chanels[0]=chanels[1]=chanels[2]=chanels[3]=chanels[4]=chanels[5]=0; // alebo cyklom
pUp=chanels;
pDown=&chanels[5];
while (1){
if (tick) {
(*pUp)++;
(*pDown)--;
if (!(*pUp)){ // posupni ukazatele ak sme pretiekli na 0
if (pUp == &chanels[5]) { pUp=chanels; pDown=&chanels[5];}
else { pDown=pUp; pUp++; }
}
tick=0;
}
}
(pocitujlasku čiastočne som ti vykradol meno poľa)
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: Fade
jednoducho potrebujem napisat program ktory dokaze pri fadeingu prvej ledky na hodnotu "255" zacat pri tejto hodnote rozsvecovat druhu ledku ale zhasinat prvu, aby cyklus fungoval kontinualne, ak chcete postnem tu kod ale len nekompletny tyka sa len dvoch lediek a je napisany v if, nestudoval som c tak som v tom amater ale chcem sa to naucit. kamos to napisal cez relacne operatory ale potom som o ten kod prisiel "honor Windows". Na nete " aj ked som sa tomu venoval cele dva dni aby som tomu pochopil" som nenasiel priamy priklad na to aby som pochopil ako funguju, preto tie relacne operatory nechcem pouzivat funkcia IF mi pride pochopitelnejsia.peterple
ja som si len myslel že bez použitia relačných operátorov to bude jednoduchšie
Dakujem za pomoc
PS: Nie každý vidí riadok programovacieho kódu ako Vy/ty.
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Fade
Nuž tu sa musím opýtať takú klasickú otázku majora Terazkyho. A čo si vy Kefalín predstavujete pod pojmom relačný operátor?
Ja tu totiž od začiatku tuším že ide o terminologický omyl. S if to totiž nemá veľa spoločného. (navyše if nie je funkcia)
http://ctp.mkprog.eu/sk/c/relacne_operatory/
A čo také ukazatele? Tie som použiť mohol? Ja som to napísal najjednoduchšie ako som len vedel. Len neviem neviem či sa to dá pochopiť bez hlbších znalostí C a binárnej sústavy. Ale zasa platí kto sa veľa pýta ten sa veľa dozvie.
Ja tu totiž od začiatku tuším že ide o terminologický omyl. S if to totiž nemá veľa spoločného. (navyše if nie je funkcia)
http://ctp.mkprog.eu/sk/c/relacne_operatory/
A čo také ukazatele? Tie som použiť mohol? Ja som to napísal najjednoduchšie ako som len vedel. Len neviem neviem či sa to dá pochopiť bez hlbších znalostí C a binárnej sústavy. Ale zasa platí kto sa veľa pýta ten sa veľa dozvie.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Ultimate člen
- Príspevky: 6236
- Dátum registrácie: 20 Júl 2007, 00:00
- Vek: 41
Re: Fade
Kód: Vybrať všetko
const int lastChannel=5; // 6 kanalov 0..5
void SetValue(setChannel, int step) {
int endValue = step==1?255:0; //nastav hodnotu, kedy skoncit
int i = step==1?0:255; //nastav hodnotu od ktorej zacat - opak endValue
while (i != endValue) { // opakuj, kym nedosiahnes koniec
SetChannel = i; //nastav hodnotu na kanale
i + = step; //zvysit, znizit hodnotu
//pripadny delay
}
}
void main() {
channel = 0;
while (true) {
SetValue(channel,1);
//aj tu moze byt delay - je max. rozsvietene
SetValue(channel,-1);
channel++; //prejdi na dalsi kanal
if (channel>lastChannel) { //ak je viac ako max, chod na kanal 0
channel = 0;
}
}
V principe, vezmem prvy kanal, a poviem, ze ma ist do max. (to je ta funkcia). ak dosiahne max, tak to iste, ale s inym krokom. potom sa posunie na dalsi a robi to iste.
Vo vysledku to bude ako zeleznicne navestie, striedavo blikat prve 0..max, max..0 a potom to iste s druhym.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.
Re: Fade
peterple napísal:Nuž tu sa musím opýtať takú klasickú otázku majora Terazkyho. A čo si vy Kefalín predstavujete pod pojmom relačný operátor?
Ja tu totiž od začiatku tuším že ide o terminologický omyl. S if to totiž nemá veľa spoločného. (navyše if nie je funkcia)
http://ctp.mkprog.eu/sk/c/relacne_operatory/
A čo také ukazatele? Tie som použiť mohol? Ja som to napísal najjednoduchšie ako som len vedel. Len neviem neviem či sa to dá pochopiť bez hlbších znalostí C a binárnej sústavy. Ale zasa platí kto sa veľa pýta ten sa veľa dozvie.
Neviem čo som Vám urobil ale toto správanie voči mojej osobe je nepochopitelné
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Fade
Neurobil si mi nič. A čo som urobil ja? Poukázal som dve zjavné chyby v príspevkoch a parafrázoval som hlášku z Čiernych barónov.
pocitujlasku:
zmenil by som jediný riadok vo funkcii SetValue
SetChannel je funkcia ktorá podľa čísla kanálu nastaví príslušnú hodnotu PWM pre kanál. Tu žiadne ukazatele netreba.
pocitujlasku:
zmenil by som jediný riadok vo funkcii SetValue
Kód: Vybrať všetko
SetChannel (setChannel, i) //nastav hodnotu na kanale
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Fade
Url link funguje. V tom prvom nábehu ti tam nechýba modrá nadol? Ak áno, tak som ti to urobil už dvakrát, raz s premennými, raz s poľom a vždy bez relačných operátorov ako si zrejme omylom požadoval. Je to z hlavy, nie je to odladené, ale zatiaľ to principiálne nikto nenapadol. Tak si to odsimuluj ak máš záujem. Viac nemám k tomu čo dodať. Upraviť aby to prvý raz tú modrú nadol neťahalo je brnkačka na jeden if a jednu premenú.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: Fade
sws, poznamenal som ze tie relacne operatory mozete pouziť, ak to zjednodussi kod tak to prijmem, bez urazkypeterple napísal:Url link funguje. V tom prvom nábehu ti tam nechýba modrá nadol? Ak áno, tak som ti to urobil už dvakrát, raz s premennými, raz s poľom a vždy bez relačných operátorov ako si zrejme omylom požadoval. Je to z hlavy, nie je to odladené, ale zatiaľ to principiálne nikto nenapadol. Tak si to odsimuluj ak máš záujem. Viac nemám k tomu čo dodať. Upraviť aby to prvý raz tú modrú nadol neťahalo je brnkačka na jeden if a jednu premenú.
0
-
- Ultimate člen
- Príspevky: 2328
- Dátum registrácie: 25 Jún 2013, 21:06
- Bydlisko: Krajné
- Vek: 57
- Kontaktovať používateľa:
Re: Fade
kedže sme v C a testuje sa proti nule tak ich nepotrebujem. operátor ! mi v tomto prípade bohate stačí. Akurát tomu asi málokto porozumie Možno nejaký javascriptaci, tam je to bežná konštrukcia. V JAVA to zrušili a tam treba použiť operátor !=.
Ale či to zapíše v C človek tak alebo tak tak to vo výsledku kompilátor preloží úplne rovnako.
Ja som sa len hodne divil že niekto píše požiadavku asi takým to štýlom:
Chcel by som odviesť autom. Ale nesiete použiť volant. Ale aj to sa dá. Stále rovno najprv dopredu a potom dozadu. V tom programe sa robí oboje naraz.
Ale či to zapíše v C človek tak alebo tak tak to vo výsledku kompilátor preloží úplne rovnako.
Ja som sa len hodne divil že niekto píše požiadavku asi takým to štýlom:
Chcel by som odviesť autom. Ale nesiete použiť volant. Ale aj to sa dá. Stále rovno najprv dopredu a potom dozadu. V tom programe sa robí oboje naraz.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.
Re: Fade
Prosím Vás, ten program nieje podmienený "(tick)" resp. hodnotou z nejakého D/A vstupno-výstupného portu ale časom na obrázku som to znázornil, alebo ak som to zle pochopil, ten (tick) je vrcholná hodnota pwm signálu dosiahnutého na nejakej ledke?peterple napísal:kedže sme v C a testuje sa proti nule tak ich nepotrebujem. operátor ! mi v tomto prípade bohate stačí. Akurát tomu asi málokto porozumie Možno nejaký javascriptaci, tam je to bežná konštrukcia. V JAVA to zrušili a tam treba použiť operátor !=.
Ale či to zapíše v C človek tak alebo tak tak to vo výsledku kompilátor preloží úplne rovnako.
Ja som sa len hodne divil že niekto píše požiadavku asi takým to štýlom:
Chcel by som odviesť autom. Ale nesiete použiť volant. Ale aj to sa dá. Stále rovno najprv dopredu a potom dozadu. V tom programe sa robí oboje naraz.
0