Stránka 1 z 2

změna pinu v cyklu

Napsal: 30 pro 2018, 17:29
od wopicka
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:

Re: změna pinu v cyklu

Napsal: 30 pro 2018, 17:35
od pavel1tu
A co je cílem ?
Postupně rozsvítit schody v nějakém pořadí,
nebo všechny najednou ?

nepochopil jsem to z kodu ....

Re: změna pinu v cyklu

Napsal: 30 pro 2018, 17:43
od wopicka
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

Re: změna pinu v cyklu

Napsal: 30 pro 2018, 18:56
od pavel1tu
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 ;)

Re: změna pinu v cyklu

Napsal: 30 pro 2018, 19:10
od wopicka
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.

Re: změna pinu v cyklu

Napsal: 30 pro 2018, 19:17
od pavel1tu
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

Re: změna pinu v cyklu

Napsal: 30 pro 2018, 19:18
od petan
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ě.

Re: změna pinu v cyklu

Napsal: 30 pro 2018, 19:25
od pavel1tu
Nebo máš každý schod zvlášť ,

pak je to jednodušší, zavoláš jen číslo schodu ....

Re: změna pinu v cyklu

Napsal: 30 pro 2018, 19:50
od jankop
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.

Re: změna pinu v cyklu

Napsal: 30 pro 2018, 20:05
od wopicka
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ě.