BASCOM, WS2812 a ADC

Zdravím, nehrál si někdo s adresovatelnejma ledkama WS2812 v závislosti na ADC.
Zkouším se do toho trochu dostat a nějak mi to blbne.
Mám jednoduchej program, kde pomocí 3 tlačítek rozsvítím 3 ledky, každou jinou barvu a čtvrtým je zhasnu. To funguje dobře, Ale jak použiju GETADC() tak se na tlačítkách rozsvěcejí špatné barvy.

Tady je výpis programu bez ADC
Pokud použiju GETADC() kamkoli do hlavní smyčky, začne to blbnout.

$Regfile = “m32def.dat”
$Crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32
$lib “RAINBOWBSCN.lib”

Config RAINBOW=1,rgb = 3, RB0_LEN=15, RB0_PORT=PORTb,rb0_pin=0
Dim Color(3) as Byte
R alias Color(_base) : G alias Color(_base + 1) : B alias Color(_base + 2)

config portd = input
config adc = single, PRESCALER = AUTO,REFERENCE =AVCC

'----program---------------------------------------------------------------------

set portd

RB_SelectChannel 0
R = 50 : G = 0 : B = 100

Do

if pind.0 =0 then
RB_setcolor 0,color(1)
RB_send
waitms 10
end if

if pind.1 =0 then
RB_setcolor 1,color(2)
RB_send
waitms 10
end if

if pind.6 =0 then
RB_setcolor 2,color(3)
RB_send
waitms 10
end if

if pind.7 =0 then
RB_clearcolors
RB_send
waitms 10
end if

loop

Tak jsem z toho nějakej zmatenej.
Buď dělám někde chybu, nebo blbne překladač.
Napsal jsemprográmek pro ovládání 4 ks adresnej ledek potenciometrama. Pomocí ADC sleduji úraveň na 4 kanálech ADC a podle toho se mění barvy led diod. Tak jak to mám napsaný to chodí dobře:
Tady je kod:

$Regfile = “m32def.dat”
$Crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32
$lib “RAINBOWBSCN.lib”

Config RAINBOW=1,rgb = 3, RB0_LEN=15, RB0_PORT=PORTc,rb0_pin=7
Dim Color(3) as Byte
R alias Color(_base+0) : G alias Color(_base + 1) : B alias Color(_base + 2)

config adc = single, PRESCALER = AUTO, reference=AVCC

dim hodnotax as word
dim hodnota1 as word
dim hodnota2 as word
dim hodnota3 as word
dim hodnota4 as word

'----program---------------------------------------------------------------------
START ADC

RB_SelectChannel 0
R = 50 : G = 0 : B = 100

Do

Waitms 10
hodnota1 = getadc (1)
waitms 10
hodnota2 = getadc (2)
waitms 10
hodnota3 = getadc(3)
waitms 10
hodnota4 = getadc (0)
waitms 10

if hodnota4 >=500 then
RB_setcolor 0, color(2)
RB_send
waitms 10
else
RB_setcolor 0,color(3)
RB_send
waitms 10
end if

if hodnota3 >=500 then
RB_setcolor 3, color(3)
RB_send
waitms 10
else
RB_setcolor 3,color(1)
RB_send
waitms 10
end if

if hodnota2 >=500 then
RB_setcolor 2, color(1)
RB_send
waitms 10
else
RB_setcolor 2,color(2)
RB_send
waitms 10
end if

if hodnota1 >=500 then
RB_setcolor 1, color(2)
RB_send
waitms 10
else
RB_setcolor 1,color(3)
RB_send
waitms 10
end if

loop

Zaráží mě však řádek 15/ten zvýrazněnej/ musí tam být deklarovaná proměnná, která není ADC využívána. Pokud tento řádek smáznu, ledky si dělají co chtějí, barvy nesedí a jeden trimr ovládá třeba 2 LED.
Přitom proměnná -hodnotax- není v programu nikde použita.
Máte někdo nápad čím to může být?

Tak toto jsem vyřešil. Stačilo změnit řádek
Dim Color(3) as Byte na Dim Color(4) as Byte

Nechci zakládat nové téma a tak se optám bascomářů zde.
Pokud použiju ALIAS třeba takto:
vystup1 Alias Portb.1
vastup2 Alias Portb.2
výstup3 Alias Portd.5
výstup4 Alias Portd.2

Tak je mi vše jasné, ale lze to udělat nějak abych mohl měnit to číslo v závislosti na něčem? Něco jako výstupX kdy X=1 budu ovládat Portb.1 , X = 2 Portb.2 atd?
Snad jsem to napsal jasně.
Díky.

Bascom.programmers = 0;

Tomu asi nerozumím ???

Že v tom Bascomu nemá moc cenu dělat, protože ti s tím nemá kdo poradit, protože to téměř nikdo nedělá… Shodou okolností se to zrovna řeší i na Ebastlírně

Jo protože v obou případech jsem to já.
Ale už to mám vyřešené. Ledky chodí tak jak mají a spínání výstupních pinů jsem vyřešil přes CASE.

Tak to je hezký, to jich je ještě o jednoho míň :grinning: Ještě jsem se tě tam na něco zeptal…