změna pinu v cyklu

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
wopicka
Příspěvky: 5
Registrován: 30 pro 2018, 16:52
Reputation: 0

změna pinu v cyklu

Příspěvek od wopicka » 30 pro 2018, 17:29

Dobrý den,
řeším osvětlení schodiště pomocí led pásků s WS2812. Jsem naprostý laik, lepím k sobě kousky kódů z příkladů atd. Nějaké to světlo jsem z toho vykřesal, ale problém je, že kód dost přibývá a stává se nepřehledným. Každou schodnici ovládám pomocí cyklu for

Kód: Vybrat vše

Adafruit_NeoPixel strip2  = Adafruit_NeoPixel(S2 , PIN2 , NEO_GRB + NEO_KHZ800);

for(int i=0;i<S2;i++) //S2 je počet čipů na aktuálním schodu
  {
    strip2.setPixelColor(i, strip2.Color(R2,G2,B2));
    strip2.show();
    delay (delayval_chip);
  }
  delay (delayval_schod);
16 schodnic, různé režimy svícení a kód bobtná do stovek řádků. Přestávám se v tom orientovat.
Dotaz zní - je možné změnit měnit jednotlivé schodnice cyklem? Např.

Kód: Vybrat vše

for(int x=1;x<17;x++)
  {
	for(int i=0;i<S2;i++)
  	{
   	  strip(x).setPixelColor(i, strip2.Color(R(x),G(x),B(x)));
  	  strip(x).show();
  	  delay (delayval_chip);
	}
  delay (delayval_schod);
  }
Tohle se mi nepodařilo zprovoznit, ležím v tom celý den, hledám a nevím. Prosím poraďte :roll:

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: změna pinu v cyklu

Příspěvek od pavel1tu » 30 pro 2018, 17:35

A co je cílem ?
Postupně rozsvítit schody v nějakém pořadí,
nebo všechny najednou ?

nepochopil jsem to z kodu ....
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

wopicka
Příspěvky: 5
Registrován: 30 pro 2018, 16:52
Reputation: 0

Re: změna pinu v cyklu

Příspěvek od wopicka » 30 pro 2018, 17:43

postupný náběh schodnic nebo jasu, snažím se udělat různé režimy. Mám problém s tím, že pro každou schodnici musím psát kód znovu. Kód má aktuálně 973 řádek. 16x for cyklus pro jeden režim svícení, je to obludnost. Potřeboval bych udělat cyklus, do kterého to schovám - tedy udělat vlastně číslo schodnice++ v nadřazeném cyklu.

zkouším nahradit strip2 za strip(x), ale nejde to zkompilovat, zobrazí se
exit status 1
'strip' was not declared in this scope

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: změna pinu v cyklu

Příspěvek od pavel1tu » 30 pro 2018, 18:56

wopicka píše:
30 pro 2018, 17:43
postupný náběh schodnic nebo jasu, snažím se udělat různé režimy. Mám problém s tím, že pro každou schodnici musím psát kód znovu. Kód má aktuálně 973 řádek. 16x for cyklus pro jeden režim svícení, je to obludnost. Potřeboval bych udělat cyklus, do kterého to schovám - tedy udělat vlastně číslo schodnice++ v nadřazeném cyklu.

zkouším nahradit strip2 za strip(x), ale nejde to zkompilovat, zobrazí se
exit status 1
'strip' was not declared in this scope
strip2 se očekává číslo,
pokud to chceš použít jako pole čísel, pokud jej správně deklaruješ,
dle mne ho musíš zavolat strip[x] , s () je to volání funkce ....

pochopil jsme tě správně ?

PS: nejsem dobrý programátor ;)
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

wopicka
Příspěvky: 5
Registrován: 30 pro 2018, 16:52
Reputation: 0

Re: změna pinu v cyklu

Příspěvek od wopicka » 30 pro 2018, 19:10

Děkuji za tip, zkoušel jsem to dát do hranatých závorek a beze změny.
nejde mi o pole (pokud vím, fakt jsem laik) jde mi čistě o to, aby se za x dosadilo konkrétní číslo 1-16. Tzn aby mi jeden for cyklus obešel led pásky na pinech 2-17.

Nevím, jak to jinak popsat.

Možná trochu obecněji. Mám seznam proměnných x1 až x100 a ke všem chci přičíst 1. Buď je budu postupně vypisovat na 100 řádek

x1++;
x2++;
x3++;
...

nebo je dám do cyklu, ale nevím jak.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: změna pinu v cyklu

Příspěvek od pavel1tu » 30 pro 2018, 19:17

Pokud to chápu,
každý schod = kus LED pásku
je to celé zapojené za sebou jako 1 dlouhý NEOpásek ...
každý schod - chceš rozsvítit zvlášť + postupně zvyšovat jas + asi různé směry zezhora, zespoda .... podle toho odkud se jde ?

Co si odladit funkce a ty volat z těch tvých smyček co rozsvítit:

RozsvitSchod(int odLED, int doLED); - tu zavoláš které LED se mají rozsvítit (od-do), nebo můžeš volat jen číslo schodu, pokud na každém schodu je stejný počet LED a násobit to .... nemám to jak vyzkoušet

Kód: Vybrat vše

RozsvitSchod(int odLED, int doLED);
{
   for(int i=odLED;i<doLED;i++)
   {
    strip2.setPixelColor(i, strip2.Color(R2,G2,B2));
    strip2.show();
    delay (delayval_chip);
   }
}
odlaď si to na 1 schod - ušetří ti to spoust kodu
Naposledy upravil(a) pavel1tu dne 30 pro 2018, 19:18, celkem upraveno 1 x.
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

petan
Příspěvky: 358
Registrován: 23 črc 2017, 10:19
Reputation: 0
Kontaktovat uživatele:

Re: změna pinu v cyklu

Příspěvek od petan » 30 pro 2018, 19:18

pokud máš seznam proměnných jako pole, tedy x[index], můžeš to udělat v cyklu. Pokud máš 100 proměnných x1, x2, x3, x..., musíš to udělat pro každou samostatně.

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: změna pinu v cyklu

Příspěvek od pavel1tu » 30 pro 2018, 19:25

Nebo máš každý schod zvlášť ,

pak je to jednodušší, zavoláš jen číslo schodu ....
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

jankop
Příspěvky: 1029
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: změna pinu v cyklu

Příspěvek od jankop » 30 pro 2018, 19:50

Nejspíš jsem přesně pochopil, o co wopickovi jde. Jenže problém je v tom, že poradit nedovedu i když možná řešení existuje. On totiž nechce vytvářet indexované proměnné, ale potřebuje indexované objekty. Taky jsem na to narazil. Mám servo1, servo2... servo8, mohu na tyto objekty aplikovat přípustné metody, ale pro každé toto servo musím otrocky napsat rutinu, protože já objekty nedovedu indexovat a ani je nedovedu předat jako parametr.

wopicka
Příspěvky: 5
Registrován: 30 pro 2018, 16:52
Reputation: 0

Re: změna pinu v cyklu

Příspěvek od wopicka » 30 pro 2018, 20:05

funkce jsi pochopil správně. Každý schod zvlášť, rozsvěcování zezhora, zespoda, + nějaké parádičky pro děti. Každý schod mám na extra pinu... Ty levné neopixely nejsou extra spolehlivé, tak aby svítilo aspoň něco, kdyby nějaký padnul.
Každý schod mám teda zvlášť, ale nejde mi zavolat číslo schodu, pokud místo něj dám proměnnou.

zkoušel jsem si přečíst něco o těch polích, ale jak v tom sedím celý den, tak mi už hlava nebere. Mrknu na to zítra. Děkuju!

To jankop: neznám přesně rozdíl proměnná vs objekt, ale myslím, že jsi mě pochopil správně.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 17 hostů