Fade

C,C++,C#

Moderátori: psichac, Moderátori

Používateľov profilový obrázok
Pacient
Nový člen
Nový člen
Príspevky: 75
Dátum registrácie: 15 Sep 2018, 16:54

Fade

Príspevok od používateľa Pacient » 09 Okt 2018, 20:05

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
0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6200
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: Fade

Príspevok od používateľa pocitujlasku » 09 Okt 2018, 21:04

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.
0
Jedním z největších projevů nedůvěry v Boha je hromosvod na kostele.

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 09 Okt 2018, 22:38

Pacient napísal:ako obísť použitie relačných operátorov
To je čo za masochizmus? Prečo bez relačných operátorov? Nuž ale dobre

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;
  }
}
Napríklad takto. Neviem presne či to bude plniť okrajové podmienky, ale to je detail čo treba doladiť.
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í.

Používateľov profilový obrázok
Pacient
Nový člen
Nový člen
Príspevky: 75
Dátum registrácie: 15 Sep 2018, 16:54

Re: Fade

Príspevok od používateľa Pacient » 10 Okt 2018, 07:15

Keby si miesto tých x premenných použil pole tak by sa dalo hafo ifov urobiť jedným.
Mohli by ste mi to pole trochu ujasniť?
0

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6200
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: Fade

Príspevok od používateľa pocitujlasku » 10 Okt 2018, 09:11

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
        }
      }
sendData - to je funkcia, ktora nastavuje pre dany kanal hodnotu a posle ju radicu
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.

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 10 Okt 2018, 17:45

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:

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;
  }
}
Krajšie že. A je mi vcelku jedno či ich bude 6 alebo 50.
(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í.

Používateľov profilový obrázok
Pacient
Nový člen
Nový člen
Príspevky: 75
Dátum registrácie: 15 Sep 2018, 16:54

Re: Fade

Príspevok od používateľa Pacient » 10 Okt 2018, 19:41

peterple
ja som si len myslel že bez použitia relačných operátorov to bude jednoduchšie
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.
Dakujem za pomoc

PS: Nie každý vidí riadok programovacieho kódu ako Vy/ty.
0

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 10 Okt 2018, 20:26

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.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

pocitujlasku
Ultimate člen
Ultimate člen
Príspevky: 6200
Dátum registrácie: 20 Júl 2007, 00:00
Vek: 41

Re: Fade

Príspevok od používateľa pocitujlasku » 11 Okt 2018, 08:50

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;
	  }
	}
Velmi nepracujem s ukazovatelmi (a vseobecne s C), tak poprosim peterple mozes trocha upravit tento kod, je to len taky nacrt, ako by to este mohlo byt.
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.

Používateľov profilový obrázok
Pacient
Nový člen
Nový člen
Príspevky: 75
Dátum registrácie: 15 Sep 2018, 16:54

Re: Fade

Príspevok od používateľa Pacient » 11 Okt 2018, 19:04

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

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 11 Okt 2018, 19:45

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

Kód: Vybrať všetko

     SetChannel (setChannel, i) //nastav hodnotu na kanale
SetChannel je funkcia ktorá podľa čísla kanálu nastaví príslušnú hodnotu PWM pre kanál. Tu žiadne ukazatele netreba.
0
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
Pacient
Nový člen
Nový člen
Príspevky: 75
Dátum registrácie: 15 Sep 2018, 16:54

Re: Fade

Príspevok od používateľa Pacient » 11 Okt 2018, 19:56

Tu prikladám obrázok ako by som chcel aby to fungovalo

Obrázok

url : https://imgur.com/a/bawUPfa :rolleyes: :rolleyes: :rolleyes:
0

Používateľov profilový obrázok
amater63
Ultimate člen
Ultimate člen
Príspevky: 2632
Dátum registrácie: 02 Máj 2016, 16:02
Bydlisko: Morava-č.r.

Re: Fade

Príspevok od používateľa amater63 » 11 Okt 2018, 20:34

Obrázek nejde. :(
0

Používateľov profilový obrázok
Pacient
Nový člen
Nový člen
Príspevky: 75
Dátum registrácie: 15 Sep 2018, 16:54

Re: Fade

Príspevok od používateľa Pacient » 11 Okt 2018, 20:39

A url link? Normalne použite aj relačné operátory len mi dajte predlohu podľa ktorej to dokážem dozajtra večera napísať :cry: :cry: :cry:
0

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 11 Okt 2018, 21:25

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í.

Používateľov profilový obrázok
Pacient
Nový člen
Nový člen
Príspevky: 75
Dátum registrácie: 15 Sep 2018, 16:54

Re: Fade

Príspevok od používateľa Pacient » 11 Okt 2018, 21:38

OK vďaka za odpoveď ráno to vyskúšam :applause: :applause: :applause:
0

Používateľov profilový obrázok
Pacient
Nový člen
Nový člen
Príspevky: 75
Dátum registrácie: 15 Sep 2018, 16:54

Re: Fade

Príspevok od používateľa Pacient » 15 Okt 2018, 20:28

peterple 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ú.
sws, poznamenal som ze tie relacne operatory mozete pouziť, ak to zjednodussi kod tak to prijmem, bez urazky
0

peterple
Ultimate člen
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

Príspevok od používateľa peterple » 15 Okt 2018, 20:52

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
Ukáž múdremu chybu a on sa ti poďakuje. Ukáž chybu hlupákovi a on sa urazí.

Používateľov profilový obrázok
Pacient
Nový člen
Nový člen
Príspevky: 75
Dátum registrácie: 15 Sep 2018, 16:54

Re: Fade

Príspevok od používateľa Pacient » 15 Okt 2018, 20:56

Takže?
0

Používateľov profilový obrázok
Pacient
Nový člen
Nový člen
Príspevky: 75
Dátum registrácie: 15 Sep 2018, 16:54

Re: Fade

Príspevok od používateľa Pacient » 23 Okt 2018, 20:58

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.
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? :?: :?: :?: :?: :?:
0

Napísať odpoveď