LED-"kub" 8x8x7

Berätta om dina pågående projekt.
Användarvisningsbild
petterMAN
Inlägg: 125
Blev medlem: 27 december 2007, 16:46:09
Ort: Umeå

LED-"kub" 8x8x7

Inlägg av petterMAN »

Tänkte visa ett litet projekt jag sysslat med på sidan om allt annat, beställde 500st blå högintensiva lysdioder från MrMister's samköp och kände att jag var tvungen att använda dem till något. Används mest som bordsdekoration, har även tänkt att lägga till ljudstyrning därav uttaget på kretskortet.

Byggt kring en PIC18F458, shiftregister och ULN2003A till de 64 katoderna, och 7st P-FET till anoderna. Koden ligger på 2300 rader (kan optimeras! :vissla:) och är skriven i PBP.
Lådan är tillverkad av saker jag hade liggande hemma, ram i betsad furu, lock & botten i tonat plexiglas.
Film på animationerna finns här (Ny länk)
Du har inte behörighet att öppna de filer som bifogats till detta inlägg.
Senast redigerad av petterMAN 7 augusti 2011, 20:44:39, redigerad totalt 4 gånger.
X-IL
EF Sponsor
Inlägg: 8479
Blev medlem: 3 december 2008, 07:47:20
Ort: Hallstahammar

Re: LED-"kub" 8x8x7

Inlägg av X-IL »

Får varningar i Firefox att det finns skadlig kod där.
Användarvisningsbild
ElectricMan
Inlägg: 4874
Blev medlem: 21 februari 2007, 20:22:48
Skype: ElectricManSwe
Ort: Luleå
Kontakt:

Re: LED-"kub" 8x8x7

Inlägg av ElectricMan »

Samt i Chrome.
Ändra bildhost tack. :)
Användarvisningsbild
petterMAN
Inlägg: 125
Blev medlem: 27 december 2007, 16:46:09
Ort: Umeå

Re: LED-"kub" 8x8x7

Inlägg av petterMAN »

:humm:
Laddat upp filmen & bilderna på ett annat webbhotell nu!
Animationer
fjodorr
Inlägg: 163
Blev medlem: 26 april 2005, 10:41:57
Ort: Stockholm

Re: LED-"kub" 8x8x7

Inlägg av fjodorr »

Riktigt imponerad. Snyggt bygge får jag säga :shock:
Användarvisningsbild
ElectricMan
Inlägg: 4874
Blev medlem: 21 februari 2007, 20:22:48
Skype: ElectricManSwe
Ort: Luleå
Kontakt:

Re: LED-"kub" 8x8x7

Inlägg av ElectricMan »

Ser ju skitsnyggt ut! :D
Upp med lite schema och grejer så är du med på Hackaday.com ^^
Användarvisningsbild
Glenn
Inlägg: 36631
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: LED-"kub" 8x8x7

Inlägg av Glenn »

Jäkligt snyggt, på alla sätt och vis :) klart imponerad.

Måste tagit ett tag att löda ihop kuben också va ? :)


Är koden nåt du vill dela med dej av ? vore intressant att se hur du löst det.
Användarvisningsbild
petterMAN
Inlägg: 125
Blev medlem: 27 december 2007, 16:46:09
Ort: Umeå

Re: LED-"kub" 8x8x7

Inlägg av petterMAN »

Enbart lysdioderna tog 1 hel dag att löda ihop, men det var det värt i slutändan;)
Har ju ingen nytta av att hemlighålla någonting så här kommer koden :)

Har som sagt använt PBP, dock är arrayhanteringen i PBP aningen begränsad och känner nu i efterhand att man kunde automatisera väldigt många funktioner ifall man haft tillgång till arrayerna som finns i C.

Kod: Markera allt

'****************************************************************
'*  Name    : Led Kub 8x8x7                                     *
'*  Author  : Petter Nordqvist                                  *
'*  Notice  : Copyright (c) 2010                                *
'*          : All Rights Reserved                               *                                  
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************

Define OSC 20

CMCON = 7 ' stänger av komparatorn
ADCON1 = %00000100
ADCON0.0 = 1 'slå på A/D

'Portkonfiguration
TRISA = %011011
TRISB = %00000000 'PORTB utgång
TRISC = %00000000 'PORTC utgång
TRISD = %00000000 'PORTD utgång
TRISE = %000      'PORTE utgång
PORTA = 0
PORTB = 0
PORTC = 0
PORTD = 0
PORTE = 0

'Portalias
RCK VAR PORTC.6 ' Storage register clock input (Sekundärklocka)
SCL VAR PORTC.7 ' Shift register clock input (Huvudklocka)
LAGER0 VAR PORTB.4
LAGER1 VAR PORTB.5
LAGER2 VAR PORTA.2
LAGER3 VAR PORTE.2
LAGER4 VAR PORTA.5
LAGER5 VAR PORTE.0
LAGER6 VAR PORTE.1

LAGER0 = 1
LAGER1 = 1
LAGER2 = 1
LAGER3 = 1
LAGER4 = 1
LAGER5 = 1
LAGER6 = 1


' Variabelkonfiguration
kublager0 var byte[8]
kublager1 var byte[8]
kublager2 var byte[8]
kublager3 var byte[8]
kublager4 var byte[8]
kublager5 var byte[8]
kublager6 var byte[8]

bakkublager0 var byte[8]
bakkublager1 var byte[8]
bakkublager2 var byte[8]
bakkublager3 var byte[8]
bakkublager4 var byte[8]
bakkublager5 var byte[8]
bakkublager6 var byte[8]

' 2x2 kuber kub[0] = x, kub[1] = y, kub[2] = z
kub1 var byte[3]
kub2 var byte[3]
kub3 var byte[3]
kub4 var byte[3]
kub5 var byte[3]
kub6 var byte[3]
kub7 var byte[3]
kub8 var byte[3]
kub9 var byte[3]
kub10 var byte[3]
kub11 var byte[3]
kub12 var byte[3]
kub13 var byte[3]
kub14 var byte[3]
kub15 var byte[3]
kub16 var byte[3]


i var WORD
k var word
delay var word
n var word

' Kubhantering
x var byte
y var byte
z var byte
g var word
d var word
m var byte
alert var bit
alert = 0
mode var bit
mode = 0 ' 0 = normalt läge, 1 = musikläge
volym var byte 
volym = 0
foregaendevolym var byte
foregaendevolym = 255
lage var byte ' avgör vilken animation musikläget skall visa
lage = 0
lageraknare var word
lageraknare = 0

h var byte
j var byte
h = 0
j = 0

' används inuti interrupt
raknare var byte
raknare = 0
u var byte
temp var byte[8]
fordrojinterrupt var Byte
fordrojinterrupt = 0

randomvariabel var word
randomvariabel = 0

INTCON = %11100000            ' Enable TMR0IE interrupt
T0CON = %11000000             ' prescaler 1:2

On Interrupt Goto interruptrutin ' Define interrupt handler

'Huvudprogram
GOSUB nollstall_kub 'Nollställ kuben
goto loop 'Hoppa över subrutiner

pausefunktion:
    delay=delay*100
    doit:
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    delay=delay-1
    if delay != 0 then goto doit
return

nollstall_kub:
    for i = 0 To 7
        kublager0[i] = 0
        kublager1[i] = 0
        kublager2[i] = 0
        kublager3[i] = 0
        kublager4[i] = 0
        kublager5[i] = 0
        kublager6[i] = 0
    NEXT i
RETURN

nollstall_bakkub:
    for i = 0 To 7
        bakkublager0[i] = 0
        bakkublager1[i] = 0
        bakkublager2[i] = 0
        bakkublager3[i] = 0
        bakkublager4[i] = 0
        bakkublager5[i] = 0
        bakkublager6[i] = 0
    NEXT i
RETURN

ettstall_kub:
    for i = 0 To 7
        kublager0[i] = 255
        kublager1[i] = 255
        kublager2[i] = 255
        kublager3[i] = 255
        kublager4[i] = 255
        kublager5[i] = 255
        kublager6[i] = 255
    NEXT i
RETURN

DISABLE
    interruptrutin:
        if INTCON.2 = 1 then 'kolla ifall timer0 har utlöst
            fordrojinterrupt = fordrojinterrupt+1
            if fordrojinterrupt >= 30 then 'anpassat för att ögat inte skall uppfatta flimmer
                fordrojinterrupt = 0
                raknare=raknare+1
                if raknare = 7 then raknare = 0
                              
                for u = 0 to 7
                    if raknare = 0 then PORTD = kublager0[u]
                    if raknare = 1 then PORTD = kublager1[u]
                    if raknare = 2 then PORTD = kublager2[u]
                    if raknare = 3 then PORTD = kublager3[u]
                    if raknare = 4 then PORTD = kublager4[u]
                    if raknare = 5 then PORTD = kublager5[u]
                    if raknare = 6 then PORTD = kublager6[u]
                    SCL = 1
                    pauseus 1
                    SCL = 0
                next u
                RCK = 1
                pauseus 1
                RCK = 0

                LAGER0 = 1
                LAGER1 = 1
                LAGER2 = 1
                LAGER3 = 1
                LAGER4 = 1
                LAGER5 = 1
                LAGER6 = 1
                
                if raknare = 0 then LAGER0 = 0
                if raknare = 1 then LAGER1 = 0
                if raknare = 2 then LAGER2 = 0
                if raknare = 3 then LAGER3 = 0
                if raknare = 4 then LAGER4 = 0
                if raknare = 5 then LAGER5 = 0
                if raknare = 6 then LAGER6 = 0
            endif
            INTCON.2 = 0            ' Clear interrupt flag
        endif
    RESUME
ENABLE

' animationer

fyrkantifyrkant:
    gosub nollstall_kub
    for i = 0 to 7 
        kublager0[i] = 255
        kublager6[i] = 255
        if i = 0 or i = 7 then
            kublager1[i] = 255
            kublager2[i] = 255
            kublager3[i] = 255
            kublager4[i] = 255
            kublager5[i] = 255
        else
            kublager1[i] = 129
            kublager2[i] = 129
            kublager3[i] = 129
            kublager4[i] = 129
            kublager5[i] = 129
        endif
    next i
    delay = 30
    gosub pausefunktion
    
    gosub nollstall_kub
    for i = 1 to 6 
        kublager1[i] = 126
        kublager5[i] = 126
        if i = 1 or i = 6 then
            kublager2[i] = 126
            kublager3[i] = 126
            kublager4[i] = 126
        else
            kublager2[i] = 66
            kublager3[i] = 66
            kublager4[i] = 66
        endif
    next i
    delay = 30
    gosub pausefunktion
    
    gosub nollstall_kub
    for i = 2 to 5 
        kublager2[i] = 60
        kublager4[i] = 60
        if i = 2 or i = 5 then
            kublager3[i] = 60
        else
            kublager3[i] = 36
        endif
    next i
    delay = 30
    gosub pausefunktion
    
    gosub nollstall_kub
    kublager3[3] = 24
    kublager3[4] = 24
return

gardin:
    gosub nollstall_kub
    for i = 0 to 7 
        if i = 0 or i = 7 then
            kublager6[i] = 255    
        else
            kublager6[i] = 129
        endif
    next i  
    delay = 8
    gosub pausefunktion
    for i = 0 to 7 
        if i = 0 or i = 7 then
            kublager5[i] = 255    
        else
            kublager5[i] = 129
        endif
    next i
    delay = 8
    gosub pausefunktion
    for i = 0 to 7 
        if i = 0 or i = 7 then
            kublager4[i] = 255    
        else
            kublager4[i] = 129
        endif
    next i
    delay = 8
    gosub pausefunktion
    for i = 0 to 7 
        if i = 0 or i = 7 then
            kublager3[i] = 255    
        else
            kublager3[i] = 129
        endif
    next i
    delay = 8
    gosub pausefunktion
    for i = 0 to 7 
        if i = 0 or i = 7 then
            kublager2[i] = 255    
        else
            kublager2[i] = 129
        endif
    next i
    delay = 8
    gosub pausefunktion
    for i = 0 to 7 
        if i = 0 or i = 7 then
            kublager1[i] = 255    
        else
            kublager1[i] = 129
        endif
    next i   
    delay = 8
    gosub pausefunktion
    for i = 0 to 7 
        if i = 0 or i = 7 then
            kublager0[i] = 255    
        else
            kublager0[i] = 129
        endif
    next i
    delay = 8
    gosub pausefunktion
    for i = 0 to 7
        kublager6[i] = 0    
    next i
    delay = 8
    gosub pausefunktion
    for i = 0 to 7
        kublager5[i] = 0    
    next i
    delay = 8
    gosub pausefunktion
    for i = 0 to 7
        kublager4[i] = 0    
    next i
    delay = 8
    gosub pausefunktion
    for i = 0 to 7
        kublager3[i] = 0    
    next i
    delay = 8
    gosub pausefunktion
    for i = 0 to 7
        kublager2[i] = 0    
    next i
    delay = 8
    gosub pausefunktion
    for i = 0 to 7
        kublager1[i] = 0    
    next i
    delay = 8
    gosub pausefunktion
    for i = 0 to 7
        kublager0[i] = 0    
    next i
    delay = 8
    gosub pausefunktion
return

markera_kanter:
    gosub nollstall_kub
    kublager0[7] = 1
    delay = 6
    gosub pausefunktion
    for i = 6 to 0 step -1
        kublager0[7] = kublager0[7] << 1
        kublager0[7] = kublager0[7]+1
        kublager0[i] = 1
        if i = 6 then kublager1[7] = 1
        if i = 5 then kublager2[7] = 1
        if i = 4 then kublager3[7] = 1
        if i = 3 then kublager4[7] = 1
        if i = 2 then kublager5[7] = 1
        if i = 1 then kublager6[7] = 1
        delay = 6 
        gosub pausefunktion
    next i
    
    for i = 6 to 0 step -1
        kublager0[0] = kublager0[0] << 1
        kublager0[0] = kublager0[0]+1
        kublager6[7] = kublager6[7] << 1
        kublager6[7] = kublager6[7]+1
        
        kublager6[i] = 1
        if i != 0 then kublager0[i] = kublager0[i]+128
        if i = 6 then 
            kublager1[0] = 1
            kublager1[7] = kublager1[7]+128
        endif
        if i = 5 then 
            kublager2[0] = 1
            kublager2[7] = kublager2[7]+128
        endif
        if i = 4 then 
            kublager3[0] = 1
            kublager3[7] = kublager3[7]+128
        endif
        if i = 3 then 
            kublager4[0] = 1
            kublager4[7] = kublager4[7]+128
        endif
        if i = 2 then 
            kublager5[0] = 1
            kublager5[7] = kublager5[7]+128
        endif
        if i = 1 then 
            kublager6[0] = 1
            kublager6[7] = kublager6[7]+128
        endif
        delay = 6
        gosub pausefunktion
    next i
    
    for i = 6 to 0 step -1
        kublager6[0] = kublager6[0] << 1
        kublager6[0] = kublager6[0]+1
        if i != 0 then kublager6[i] = kublager6[i]+128
        if i = 6 then kublager1[0] = kublager1[0]+128
        if i = 5 then kublager2[0] = kublager2[0]+128
        if i = 4 then kublager3[0] = kublager3[0]+128
        if i = 3 then kublager4[0] = kublager4[0]+128
        if i = 2 then kublager5[0] = kublager5[0]+128
        if i = 1 then kublager6[0] = kublager6[0]+128
        delay = 6
        gosub pausefunktion
    next i
return

vagmonster:
        For k = 0 to 6
            for m = 0 to 11 
                gosub nollstall_kub
                gosub vagmonster_andra   
                delay = 10 
                gosub pausefunktion
            next m 
        next k
return


vagmonster_andra:
            if m = 0 then
                kublager5[0] = 255
                kublager6[1] = 255
                kublager5[2] = 255
                kublager4[3] = 255
                kublager3[4] = 255
                kublager2[5] = 255
                kublager1[6] = 255
                kublager0[7] = 255
            endif
            if m = 1 then
                kublager1[5] = 255
                kublager2[4] = 255
                kublager3[3] = 255
                kublager4[2] = 255
                kublager5[1] = 255
                kublager6[0] = 255
                kublager0[6] = 255
                kublager1[7] = 255
            endif
            if m = 2 then
                kublager0[5] = 255
                kublager1[4] = 255
                kublager1[6] = 255
                kublager2[3] = 255
                kublager3[2] = 255
                kublager4[1] = 255
                kublager5[0] = 255
                kublager2[7] = 255
            endif
            if m = 3 then
                kublager4[0] = 255
                kublager3[1] = 255
                kublager2[2] = 255
                kublager1[3] = 255
                kublager0[4] = 255
                kublager1[5] = 255
                kublager2[6] = 255
                kublager3[7] = 255
            endif
            if m = 4 then
                kublager3[0] = 255
                kublager2[1] = 255
                kublager1[2] = 255
                kublager0[3] = 255
                kublager1[4] = 255
                kublager2[5] = 255
                kublager3[6] = 255
                kublager4[7] = 255
            endif
            if m = 5 then
                kublager2[0] = 255
                kublager1[1] = 255
                kublager0[2] = 255
                kublager1[3] = 255
                kublager2[4] = 255
                kublager3[5] = 255
                kublager4[6] = 255
                kublager5[7] = 255
            endif
            if m = 6 then
                kublager1[0] = 255
                kublager0[1] = 255
                kublager1[2] = 255
                kublager2[3] = 255
                kublager3[4] = 255
                kublager4[5] = 255
                kublager5[6] = 255
                kublager6[7] = 255
            endif
            if m = 7 then
                kublager0[0] = 255
                kublager1[1] = 255
                kublager2[2] = 255
                kublager3[3] = 255
                kublager4[4] = 255
                kublager5[5] = 255
                kublager6[6] = 255
                kublager5[7] = 255
            ENDif
            if m = 8 then
                kublager1[0] = 255
                kublager2[1] = 255
                kublager3[2] = 255
                kublager4[3] = 255
                kublager5[4] = 255
                kublager6[5] = 255
                kublager5[6] = 255
                kublager4[7] = 255
            endif
            if m = 9 then
                kublager2[0] = 255
                kublager3[1] = 255
                kublager4[2] = 255
                kublager5[3] = 255
                kublager6[4] = 255
                kublager5[5] = 255
                kublager4[6] = 255
                kublager3[7] = 255
            endif
            if m = 10 then
                kublager3[0] = 255
                kublager4[1] = 255
                kublager5[2] = 255
                kublager6[3] = 255
                kublager5[4] = 255
                kublager4[5] = 255
                kublager3[6] = 255
                kublager2[7] = 255
            endif
            if m = 11 then
                kublager4[0] = 255
                kublager5[1] = 255
                kublager6[2] = 255
                kublager5[3] = 255
                kublager4[4] = 255
                kublager3[5] = 255
                kublager2[6] = 255
                kublager1[7] = 255
            endif
return

vanster_till_hoger_swipe:
    gosub nollstall_kub
    for n = 0 to 7 
        kublager0[n] = 255
        kublager1[n] = 255
        kublager2[n] = 255
        kublager3[n] = 255
        kublager4[n] = 255
        kublager5[n] = 255
        kublager6[n] = 255
        delay = 8 
        gosub pausefunktion
    next n
return

hoger_till_vanster_swipe:
    gosub nollstall_kub
    for n = 7 to 0 STEP -1 
        kublager0[n] = 255
        kublager1[n] = 255
        kublager2[n] = 255
        kublager3[n] = 255
        kublager4[n] = 255
        kublager5[n] = 255
        kublager6[n] = 255
        delay = 8 
        gosub pausefunktion
    next n
return

fyrkantsvag:
    gosub nollstall_kub
    kublager0[3] = 24
    kublager0[4] = 24
    delay = 8 
    gosub pausefunktion
    
    gosub nollstall_kub
    kublager0[0] = 24
    kublager0[1] = 126
    kublager0[2] = 126
    kublager0[3] = 231
    kublager0[4] = 231
    kublager0[5] = 126
    kublager0[6] = 126
    kublager0[7] = 24
    kublager1[3] = 24
    kublager1[4] = 24
    delay = 8 
    gosub pausefunktion
    
    gosub nollstall_kub
    kublager0[0] = 102
    kublager0[1] = 129
    kublager0[2] = 129
    kublager0[5] = 129
    kublager0[6] = 129
    kublager0[7] = 102
    kublager1[0] = 24
    kublager1[1] = 126
    kublager1[2] = 126
    kublager1[3] = 231
    kublager1[4] = 231
    kublager1[5] = 126
    kublager1[6] = 126
    kublager1[7] = 24
    kublager2[3] = 24
    kublager2[4] = 24
    delay = 8 
    gosub pausefunktion
    
    for n = 0 to 6
        gosub nollstall_kub
        kublager0[0] = 129
        kublager0[7] = 129
        kublager1[0] = 102
        kublager1[1] = 129
        kublager1[2] = 129
        kublager1[5] = 129
        kublager1[6] = 129
        kublager1[7] = 129
        kublager2[0] = 24
        kublager2[1] = 126
        kublager2[2] = 126
        kublager2[3] = 231
        kublager2[4] = 231
        kublager2[5] = 126
        kublager2[6] = 126
        kublager2[7] = 24
        kublager3[3] = 24
        kublager3[4] = 24
        delay = 5 
        gosub pausefunktion
        
        gosub nollstall_kub
        kublager1[0] = 129
        kublager1[7] = 129
        kublager2[0] = 102
        kublager2[1] = 129
        kublager2[2] = 129
        kublager2[5] = 129
        kublager2[6] = 129
        kublager2[7] = 102
        kublager3[0] = 24
        kublager3[1] = 126
        kublager3[2] = 126
        kublager3[3] = 231
        kublager3[4] = 231
        kublager3[5] = 126
        kublager3[6] = 126
        kublager3[7] = 24
        kublager4[3] = 24
        kublager4[4] = 24
        delay = 8 
        gosub pausefunktion
        
        gosub nollstall_kub
        kublager2[0] = 129
        kublager2[7] = 129
        kublager3[0] = 102
        kublager3[1] = 129
        kublager3[2] = 129
        kublager3[5] = 129
        kublager3[6] = 129
        kublager3[7] = 102
        kublager4[0] = 24
        kublager4[1] = 126
        kublager4[2] = 126
        kublager4[3] = 231
        kublager4[4] = 231
        kublager4[5] = 126
        kublager4[6] = 126
        kublager4[7] = 24
        kublager5[3] = 24
        kublager5[4] = 24
        delay = 8 
        gosub pausefunktion
        
        gosub nollstall_kub
        kublager3[0] = 129
        kublager3[7] = 129
        kublager4[0] = 102
        kublager4[1] = 129
        kublager4[2] = 129
        kublager4[5] = 129
        kublager4[6] = 129
        kublager4[7] = 102
        kublager5[0] = 24
        kublager5[1] = 126
        kublager5[2] = 126
        kublager5[3] = 231
        kublager5[4] = 231
        kublager5[5] = 126
        kublager5[6] = 126
        kublager5[7] = 24
        kublager6[3] = 24
        kublager6[4] = 24
        delay = 8 
        gosub pausefunktion
        
        gosub nollstall_kub
        kublager4[0] = 129
        kublager4[7] = 129
        kublager5[0] = 102
        kublager5[1] = 129
        kublager5[2] = 129
        kublager5[5] = 129
        kublager5[6] = 129
        kublager5[7] = 102
        kublager6[0] = 24
        kublager6[1] = 126
        kublager6[2] = 126
        kublager6[3] = 231
        kublager6[4] = 231
        kublager6[5] = 126
        kublager6[6] = 126
        kublager6[7] = 24
        kublager5[3] = 24
        kublager5[4] = 24
        delay = 8 
        gosub pausefunktion
        
        gosub nollstall_kub
        kublager5[0] = 129
        kublager5[7] = 129
        kublager6[0] = 102
        kublager6[1] = 129
        kublager6[2] = 129
        kublager6[5] = 129
        kublager6[6] = 129
        kublager6[7] = 102
        kublager5[0] = 24
        kublager5[1] = 126
        kublager5[2] = 126
        kublager5[3] = 231
        kublager5[4] = 231
        kublager5[5] = 126
        kublager5[6] = 126
        kublager5[7] = 24
        kublager4[3] = 24
        kublager4[4] = 24
        delay = 8 
        gosub pausefunktion
        
        gosub nollstall_kub
        kublager6[0] = 129
        kublager6[7] = 129
        kublager5[0] = 102
        kublager5[1] = 129
        kublager5[2] = 129
        kublager5[5] = 129
        kublager5[6] = 129
        kublager5[7] = 102
        kublager4[0] = 24
        kublager4[1] = 126
        kublager4[2] = 126
        kublager4[3] = 231
        kublager4[4] = 231
        kublager4[5] = 126
        kublager4[6] = 126
        kublager4[7] = 24
        kublager3[3] = 24
        kublager3[4] = 24
        delay = 8 
        gosub pausefunktion
        
        gosub nollstall_kub
        kublager5[0] = 129
        kublager5[7] = 129
        kublager4[0] = 102
        kublager4[1] = 129
        kublager4[2] = 129
        kublager4[5] = 129
        kublager4[6] = 129
        kublager4[7] = 102
        kublager3[0] = 24
        kublager3[1] = 126
        kublager3[2] = 126
        kublager3[3] = 231
        kublager3[4] = 231
        kublager3[5] = 126
        kublager3[6] = 126
        kublager3[7] = 24
        kublager2[3] = 24
        kublager2[4] = 24
        delay = 8 
        gosub pausefunktion
        
        gosub nollstall_kub
        kublager4[0] = 129
        kublager4[7] = 129
        kublager3[0] = 102
        kublager3[1] = 129
        kublager3[2] = 129
        kublager3[5] = 129
        kublager3[6] = 129
        kublager3[7] = 102
        kublager2[0] = 24
        kublager2[1] = 126
        kublager2[2] = 126
        kublager2[3] = 231
        kublager2[4] = 231
        kublager2[5] = 126
        kublager2[6] = 126
        kublager2[7] = 24
        kublager1[3] = 24
        kublager1[4] = 24
        delay = 8 
        gosub pausefunktion
        
        gosub nollstall_kub
        kublager3[0] = 129
        kublager3[7] = 129
        kublager2[0] = 102
        kublager2[1] = 129
        kublager2[2] = 129
        kublager2[5] = 129
        kublager2[6] = 129
        kublager2[7] = 102
        kublager2[0] = 24
        kublager1[1] = 126
        kublager1[2] = 126
        kublager1[3] = 231
        kublager1[4] = 231
        kublager1[5] = 126
        kublager1[6] = 126
        kublager1[7] = 24
        kublager0[3] = 24
        kublager0[4] = 24
        delay = 5 
        gosub pausefunktion
        
        gosub nollstall_kub
        kublager2[0] = 129
        kublager2[7] = 129
        kublager1[0] = 102
        kublager1[1] = 129
        kublager1[2] = 129
        kublager1[5] = 129
        kublager1[6] = 129
        kublager1[7] = 102
        kublager1[0] = 24
        kublager0[1] = 126
        kublager0[2] = 126
        kublager0[3] = 231
        kublager0[4] = 231
        kublager0[5] = 126
        kublager0[6] = 126
        kublager0[7] = 24
        kublager1[3] = 24
        kublager1[4] = 24
        delay = 8 
        gosub pausefunktion
        
        gosub nollstall_kub
        kublager1[0] = 129
        kublager1[7] = 129
        kublager0[0] = 102
        kublager0[1] = 129
        kublager0[2] = 129
        kublager0[5] = 129
        kublager0[6] = 129
        kublager0[7] = 102
        kublager0[0] = 24
        kublager1[1] = 126
        kublager1[2] = 126
        kublager1[3] = 231
        kublager1[4] = 231
        kublager1[5] = 126
        kublager1[6] = 126
        kublager1[7] = 24
        kublager2[3] = 24
        kublager2[4] = 24
        delay = 8 
        gosub pausefunktion
    next n
return

kontrolleranivaett:
    if n = 0 then gosub z0
    if n = 1 then gosub z1
    if n = 2 then gosub z2
    if n = 3 then gosub z3
    if n = 4 then gosub z4
    if n = 5 then gosub z5
return

kontrolleranivatva:
    if n = 0 then gosub z1
    if n = 1 then gosub z2
    if n = 2 then gosub z3
    if n = 3 then gosub z4
    if n = 4 then gosub z5
    if n = 5 then gosub z6
return

lookupy:
    LOOKUP y,[%11000000,%01100000,%00110000,%00011000,%00001100,%00000110,%00000011],y
return

z0:
    gosub lookupy
    bakkublager0[x] = bakkublager0[x]+y
    bakkublager0[x+1] = bakkublager0[x+1]+y
return

z1:
    gosub lookupy
    bakkublager1[x] = bakkublager1[x]+y
    bakkublager1[x+1] = bakkublager1[x+1]+y
return

z2:
    gosub lookupy
    bakkublager2[x] = bakkublager2[x]+y
    bakkublager2[x+1] = bakkublager2[x+1]+y
return

z3:
    gosub lookupy
    bakkublager3[x] = bakkublager3[x]+y
    bakkublager3[x+1] = bakkublager3[x+1]+y
return

z4:
    gosub lookupy
    bakkublager4[x] = bakkublager4[x]+y
    bakkublager4[x+1] = bakkublager4[x+1]+y
return

z5:
    gosub lookupy
    bakkublager5[x] = bakkublager5[x]+y
    bakkublager5[x+1] = bakkublager5[x+1]+y
return

z6:
    gosub lookupy
    bakkublager6[x] = bakkublager6[x]+y
    bakkublager6[x+1] = bakkublager6[x+1]+y
return

sma_kuber:
    gosub nollstall_bakkub
    for n = 0 to 5
        if kub1[2] = n then 
            x = kub1[0]
            y = kub1[1]
            gosub kontrolleranivaett
            y = kub1[1]
            gosub kontrolleranivatva
        endif
        if kub2[2] = n then 
            x = kub2[0]
            y = kub2[1]
            gosub kontrolleranivaett
            y = kub2[1]
            gosub kontrolleranivatva
        endif
        if kub3[2] = n then 
            x = kub3[0]
            y = kub3[1]
            gosub kontrolleranivaett
            y = kub3[1]
            gosub kontrolleranivatva
        endif
        if kub4[2] = n then 
            x = kub4[0]
            y = kub4[1]
            gosub kontrolleranivaett
            y = kub4[1]
            gosub kontrolleranivatva
        endif
        if kub5[2] = n then 
            x = kub5[0]
            y = kub5[1]
            gosub kontrolleranivaett
            y = kub5[1]
            gosub kontrolleranivatva
        endif
        if kub6[2] = n then 
            x = kub6[0]
            y = kub6[1]
            gosub kontrolleranivaett
            y = kub6[1]
            gosub kontrolleranivatva
        endif
        if kub7[2] = n then 
            x = kub7[0]
            y = kub7[1]
            gosub kontrolleranivaett
            y = kub7[1]
            gosub kontrolleranivatva
        endif
        if kub8[2] = n then 
            x = kub8[0]
            y = kub8[1]
            gosub kontrolleranivaett
            y = kub8[1]
            gosub kontrolleranivatva
        endif
        if kub9[2] = n then 
            x = kub9[0]
            y = kub9[1]
            gosub kontrolleranivaett
            y = kub9[1]
            gosub kontrolleranivatva
        endif
        if kub10[2] = n then 
            x = kub10[0]
            y = kub10[1]
            gosub kontrolleranivaett
            y = kub10[1]
            gosub kontrolleranivatva
        endif
        if kub11[2] = n then 
            x = kub11[0]
            y = kub11[1]
            gosub kontrolleranivaett
            y = kub11[1]
            gosub kontrolleranivatva
        endif
        if kub12[2] = n then 
            x = kub12[0]
            y = kub12[1]
            gosub kontrolleranivaett
            y = kub12[1]
            gosub kontrolleranivatva
        endif
        if kub13[2] = n then 
            x = kub13[0]
            y = kub13[1]
            gosub kontrolleranivaett
            y = kub13[1]
            gosub kontrolleranivatva
        endif
        if kub14[2] = n then 
            x = kub14[0]
            y = kub14[1]
            gosub kontrolleranivaett
            y = kub14[1]
            gosub kontrolleranivatva
        endif
        if kub15[2] = n then 
            x = kub15[0]
            y = kub15[1]
            gosub kontrolleranivaett
            y = kub15[1]
            gosub kontrolleranivatva
        endif
        if kub16[2] = n then 
            x = kub16[0]
            y = kub16[1]
            gosub kontrolleranivaett
            y = kub16[1]
            gosub kontrolleranivatva
        endif
        next n
        gosub uppdatera_bak_kub
return

uppdatera_bak_kub:
    for i = 0 To 7
        kublager0[i] = bakkublager0[i]
        kublager1[i] = bakkublager1[i]
        kublager2[i] = bakkublager2[i]
        kublager3[i] = bakkublager3[i]
        kublager4[i] = bakkublager4[i]
        kublager5[i] = bakkublager5[i]
        kublager6[i] = bakkublager6[i]
    NEXT i
return

definiera_kuber: ' anger startpositionerna på de små kuberna
kub1[0] = 0
kub1[1] = 0
kub1[2] = 0

kub2[0] = 6
kub2[1] = 0
kub2[2] = 0

kub3[0] = 0
kub3[1] = 6
kub3[2] = 0

kub4[0] = 6
kub4[1] = 6
kub4[2] = 0

kub5[0] = 0
kub5[1] = 3
kub5[2] = 0

kub6[0] = 0
kub6[1] = 0
kub6[2] = 5

kub7[0] = 6
kub7[1] = 0
kub7[2] = 5

kub8[0] = 0
kub8[1] = 6
kub8[2] = 5

kub9[0] = 6
kub9[1] = 6
kub9[2] = 5

kub10[0] = 6
kub10[1] = 3
kub10[2] = 0

kub11[0] = 0
kub11[1] = 3
kub11[2] = 5

kub12[0] = 6
kub12[1] = 3
kub12[2] = 5

kub13[0] = 3
kub13[1] = 0
kub13[2] = 0

kub14[0] = 3
kub14[1] = 6
kub14[2] = 0

kub15[0] = 3
kub15[1] = 0
kub15[2] = 5

kub16[0] = 3
kub16[1] = 6
kub16[2] = 5
return

kontrolleraz:
    LOOKUP y,[%11000000,%01100000,%00110000,%00011000,%00001100,%00000110,%00000011],m
    if z = 0 AND (kublager0[x] & m) != 0 then alert = 1
    if z = 1 AND (kublager1[x] & m) != 0 then alert = 1
    if z = 2 AND (kublager2[x] & m) != 0 then alert = 1
    if z = 3 AND (kublager3[x] & m) != 0 then alert = 1
    if z = 4 AND (kublager4[x] & m) != 0 then alert = 1
    if z = 5 AND (kublager5[x] & m) != 0 then alert = 1
    if z = 6 AND (kublager6[x] & m) != 0 then alert = 1
    if z = 0 AND (kublager0[x+1] & m) != 0 then alert = 1
    if z = 1 AND (kublager1[x+1] & m) != 0 then alert = 1
    if z = 2 AND (kublager2[x+1] & m) != 0 then alert = 1
    if z = 3 AND (kublager3[x+1] & m) != 0 then alert = 1
    if z = 4 AND (kublager4[x+1] & m) != 0 then alert = 1
    if z = 5 AND (kublager5[x+1] & m) != 0 then alert = 1
    if z = 6 AND (kublager6[x+1] & m) != 0 then alert = 1
return

kontrollerax:
    LOOKUP y,[%11000000,%01100000,%00110000,%00011000,%00001100,%00000110,%00000011],m
    if z = 0 AND (kublager0[x] & m) != 0 then alert = 1
    if z = 1 AND (kublager1[x] & m) != 0 then alert = 1
    if z = 2 AND (kublager2[x] & m) != 0 then alert = 1
    if z = 3 AND (kublager3[x] & m) != 0 then alert = 1
    if z = 4 AND (kublager4[x] & m) != 0 then alert = 1
    if z = 5 AND (kublager5[x] & m) != 0 then alert = 1
    if z = 0 AND (kublager1[x] & m) != 0 then alert = 1
    if z = 1 AND (kublager2[x] & m) != 0 then alert = 1
    if z = 2 AND (kublager3[x] & m) != 0 then alert = 1
    if z = 3 AND (kublager4[x] & m) != 0 then alert = 1
    if z = 4 AND (kublager5[x] & m) != 0 then alert = 1
    if z = 5 AND (kublager6[x] & m) != 0 then alert = 1
return

kontrolleray:
    LOOKUP y,[%10000000,%01000000,%00100000,%00010000,%00001000,%00000100,%00000010,%00000001],m
    if z = 0 AND (kublager0[x] & m) != 0 then alert = 1
    if z = 1 AND (kublager1[x] & m) != 0 then alert = 1
    if z = 2 AND (kublager2[x] & m) != 0 then alert = 1
    if z = 3 AND (kublager3[x] & m) != 0 then alert = 1
    if z = 4 AND (kublager4[x] & m) != 0 then alert = 1
    if z = 5 AND (kublager5[x] & m) != 0 then alert = 1
    if z = 0 AND (kublager0[x+1] & m) != 0 then alert = 1
    if z = 1 AND (kublager1[x+1] & m) != 0 then alert = 1
    if z = 2 AND (kublager2[x+1] & m) != 0 then alert = 1
    if z = 3 AND (kublager3[x+1] & m) != 0 then alert = 1
    if z = 4 AND (kublager4[x+1] & m) != 0 then alert = 1
    if z = 5 AND (kublager5[x+1] & m) != 0 then alert = 1
    if z = 0 AND (kublager1[x] & m) != 0 then alert = 1
    if z = 1 AND (kublager2[x] & m) != 0 then alert = 1
    if z = 2 AND (kublager3[x] & m) != 0 then alert = 1
    if z = 3 AND (kublager4[x] & m) != 0 then alert = 1
    if z = 4 AND (kublager5[x] & m) != 0 then alert = 1
    if z = 5 AND (kublager6[x] & m) != 0 then alert = 1
    if z = 0 AND (kublager1[x+1] & m) != 0 then alert = 1
    if z = 1 AND (kublager2[x+1] & m) != 0 then alert = 1
    if z = 2 AND (kublager3[x+1] & m) != 0 then alert = 1
    if z = 3 AND (kublager4[x+1] & m) != 0 then alert = 1
    if z = 4 AND (kublager5[x+1] & m) != 0 then alert = 1
    if z = 5 AND (kublager6[x+1] & m) != 0 then alert = 1
return

slumpakuber:
    gosub definiera_kuber
    gosub sma_kuber
    
    igen:
    h = h+1
    if h = 33 then h = 0
    lookup h,[5,14,3,8,4,5,1,7,9,10,11,11,10,2,16,4,13,6,4,15,12,16,1,1,3,8,8,11,16,4,4,9,5,14,7],g
    if g = 0 OR g > 17 then goto igen 

    gosub lasvarden
    
    igen2:
    j = j+1
    if j = 19 then j = 0
    lookup j,[5,4,0,1,3,3,1,2,3,5,0,1,1,0,2,4,4,5,3,2,1,0],d
    if d > 5 then goto igen2
    
    kalle:
    if d = 0 then 
        if z != 5 then    
            z = z+2
            gosub kontrolleraz
            if alert = 1 then
                alert = 0
                z = z-2
                goto klar
            else
                z = z-1
            endif
        else 
            goto klar
        endif 
    endif
    if d = 5 then 
        if z != 0 then    
            z = z-1 
            gosub kontrolleraz
            if alert = 1 then
                alert = 0
                z = z+1
                goto klar
            endif
        else 
            goto klar
        endif
    endif
    if d = 3 then 
        if x != 6 then    
            x = x+2
            gosub kontrollerax
            if alert = 1 then
                alert = 0
                x = x-2
                goto klar
            else
                x = x-1
            endif
        else 
            goto klar
        endif
    endif
    if d = 2 then 
        if x != 0 then    
            x = x-1
            gosub kontrollerax
            if alert = 1 then
                alert = 0
                x = x+1
                goto klar
            endif 
        else 
            goto klar
        endif
    endif
    if d = 4 then 
        if y != 6 then    
            y = y+2 
            gosub kontrolleray
            if alert = 1 then
                alert = 0
                y = y-2
                goto klar
            else
                y = y-1
            endif
        else 
            goto klar
        endif
    endif
    if d = 1 then 
        if y != 0 then    
            y = y-1
            gosub kontrolleray
            if alert = 1 then
                alert = 0
                y = y+1
                goto klar
            endif  
        else 
            goto klar
        endif 
    endif
    
    gosub uppdateravarden
    delay = 3
    gosub pausefunktion
    gosub sma_kuber
    gosub lasvarden
    randomvariabel = randomvariabel+1
    if randomvariabel = 450 then goto fardig ' gör 700 drag innan den byter animation
    goto kalle
    
    klar:
    gosub lasvarden
    goto igen
    
    fardig:
    randomvariabel = 0
return

lasvarden:
    if g = 1 then 
        x = kub1[0] 
        y = kub1[1] 
        z = kub1[2] 
    endif
    if g = 2 then 
        x = kub2[0] 
        y = kub2[1] 
        z = kub2[2] 
    endif
    if g = 3 then 
        x = kub3[0] 
        y = kub3[1] 
        z = kub3[2] 
    endif
    if g = 4 then 
        x = kub4[0] 
        y = kub4[1] 
        z = kub4[2] 
    endif
    if g = 5 then 
        x = kub5[0] 
        y = kub5[1] 
        z = kub5[2] 
    endif
    if g = 6 then 
        x = kub6[0] 
        y = kub6[1] 
        z = kub6[2] 
    endif
    if g = 7 then 
        x = kub7[0] 
        y = kub7[1] 
        z = kub7[2] 
    endif
    if g = 8 then 
        x = kub8[0] 
        y = kub8[1] 
        z = kub8[2] 
    endif
    if g = 9 then 
        x = kub9[0] 
        y = kub9[1] 
        z = kub9[2] 
    endif
    if g = 10 then 
        x = kub10[0] 
        y = kub10[1] 
        z = kub10[2] 
    endif
    if g = 11 then 
        x = kub11[0] 
        y = kub11[1] 
        z = kub11[2] 
    endif
    if g = 12 then 
        x = kub12[0] 
        y = kub12[1] 
        z = kub12[2] 
    endif
    if g = 13 then 
        x = kub13[0] 
        y = kub13[1] 
        z = kub13[2] 
    endif
    if g = 14 then 
        x = kub14[0] 
        y = kub14[1] 
        z = kub14[2] 
    endif
    if g = 15 then 
        x = kub15[0] 
        y = kub15[1] 
        z = kub15[2] 
    endif
    if g = 16 then 
        x = kub16[0] 
        y = kub16[1] 
        z = kub16[2] 
    endif
return

uppdateravarden:
    if g = 1 then 
        kub1[0] = x
        kub1[1] = y
        kub1[2] = z
    endif
    if g = 2 then 
        kub2[0] = x
        kub2[1] = y
        kub2[2] = z
    endif
    if g = 3 then 
        kub3[0] = x
        kub3[1] = y
        kub3[2] = z
    endif
    if g = 4 then 
        kub4[0] = x
        kub4[1] = y
        kub4[2] = z
    endif
    if g = 5 then 
        kub5[0] = x
        kub5[1] = y
        kub5[2] = z
    endif
    if g = 6 then 
        kub6[0] = x
        kub6[1] = y
        kub6[2] = z
    endif
    if g = 7 then 
        kub7[0] = x
        kub7[1] = y
        kub7[2] = z
    endif
    if g = 8 then 
        kub8[0] = x
        kub8[1] = y
        kub8[2] = z
    endif
    if g = 9 then 
        kub9[0] = x
        kub9[1] = y
        kub9[2] = z
    endif
    if g = 10 then 
        kub10[0] = x
        kub10[1] = y
        kub10[2] = z
    endif
    if g = 11 then 
        kub11[0] = x
        kub11[1] = y
        kub11[2] = z
    endif
    if g = 12 then 
        kub12[0] = x
        kub12[1] = y
        kub12[2] = z
    endif
    if g = 13 then 
        kub13[0] = x
        kub13[1] = y
        kub13[2] = z
    endif
    if g = 14 then 
        kub14[0] = x
        kub14[1] = y
        kub14[2] = z
    endif
    if g = 15 then 
        kub15[0] = x
        kub15[1] = y
        kub15[2] = z
    endif
    if g = 16 then 
        kub16[0] = x
        kub16[1] = y
        kub16[2] = z
    endif
    
return

explosion_fade:
    for m = 1 to 7
        gosub explosion
        delay = 10 
        if i = 1 then delay = delay+20
        if i = 2 then delay = delay+10
        gosub pausefunktion
    next m 
Return

explosion:
        gosub nollstall_kub
        if m = 1 then 
            kublager2[3] = %00011000
            kublager3[3] = %00011000
            kublager2[4] = %00011000
            kublager3[4] = %00011000
        endif
        if m = 2 then
            kublager1[3] = %00011000
            kublager1[4] = %00011000
            kublager2[3] = %00111100
            kublager3[3] = %00111100
            kublager2[4] = %00111100
            kublager3[4] = %00111100
            kublager4[3] = %00011000
            kublager4[4] = %00011000
            kublager2[2] = %00011000
            kublager3[2] = %00011000
            kublager2[5] = %00011000
            kublager3[5] = %00011000
        endif
        if m = 3 then
            kublager0[3] = %00011000
            kublager0[4] = %00011000
            
            kublager1[2] = %00011000
            kublager1[3] = %00111100
            kublager1[4] = %00111100
            kublager1[5] = %00011000
            
            kublager2[1] = %00011000
            kublager2[2] = %00111100
            kublager2[3] = %01111110
            kublager2[4] = %01111110
            kublager2[5] = %00111100
            kublager2[6] = %00011000
            
            kublager3[1] = %00011000
            kublager3[2] = %00111100
            kublager3[3] = %01111110
            kublager3[4] = %01111110
            kublager3[5] = %00111100
            kublager3[6] = %00011000
            
            kublager4[2] = %00011000
            kublager4[3] = %00111100
            kublager4[4] = %00111100
            kublager4[5] = %00011000
            
            kublager5[3] = %00011000
            kublager5[4] = %00011000
        endif
        if m = 4 then
            kublager0[2] = %00011000
            kublager0[3] = %00111100
            kublager0[4] = %00111100
            kublager0[5] = %00011000
            
            kublager1[1] = %00011000
            kublager1[2] = %00111100
            kublager1[3] = %01111110
            kublager1[4] = %01111110
            kublager1[5] = %00111100
            kublager1[6] = %00011000
            
            kublager2[0] = %00011000
            kublager2[1] = %00111100
            kublager2[2] = %01111110
            kublager2[3] = %11111111
            kublager2[4] = %11111111
            kublager2[5] = %01111110
            kublager2[6] = %00111100
            kublager2[7] = %00011000
            
            kublager3[0] = %00011000
            kublager3[1] = %00111100
            kublager3[2] = %01111110
            kublager3[3] = %11111111
            kublager3[4] = %11111111
            kublager3[5] = %01111110
            kublager3[6] = %00111100
            kublager3[7] = %00011000
            
            kublager4[1] = %00011000
            kublager4[2] = %00111100
            kublager4[3] = %01111110
            kublager4[4] = %01111110
            kublager4[5] = %00111100
            kublager4[6] = %00011000
            
            kublager5[2] = %00011000
            kublager5[3] = %00111100
            kublager5[4] = %00111100
            kublager5[5] = %00011000
            
            kublager6[3] = %00011000
            kublager6[4] = %00011000
        endif
        if m = 5 then
            kublager0[1] = %00011000
            kublager0[2] = %00111100
            kublager0[3] = %01111110
            kublager0[4] = %01111110
            kublager0[5] = %00111100
            kublager0[6] = %00011000
            
            kublager1[0] = %00011000
            kublager1[1] = %00111100
            kublager1[2] = %01111110
            kublager1[3] = %11111111
            kublager1[4] = %11111111
            kublager1[5] = %01111110
            kublager1[6] = %00111100
            kublager1[7] = %00011000
            
            kublager2[0] = %00111100
            kublager2[1] = %01111110
            kublager2[2] = %11111111
            kublager2[3] = %11111111
            kublager2[4] = %11111111
            kublager2[5] = %11111111
            kublager2[6] = %01111110
            kublager2[7] = %00111100
            
            kublager3[0] = %00111100
            kublager3[1] = %01111110
            kublager3[2] = %11111111
            kublager3[3] = %11111111
            kublager3[4] = %11111111
            kublager3[5] = %11111111
            kublager3[6] = %01111110
            kublager3[7] = %00111100
            
            kublager4[0] = %00011000
            kublager4[1] = %00111100
            kublager4[2] = %01111110
            kublager4[3] = %11111111
            kublager4[4] = %11111111
            kublager4[5] = %01111110
            kublager4[6] = %00111100
            kublager4[7] = %00011000
            
            kublager5[1] = %00011000
            kublager5[2] = %00111100
            kublager5[3] = %01111110
            kublager5[4] = %01111110
            kublager5[5] = %00111100
            kublager5[6] = %00011000
            
            kublager6[2] = %00011000
            kublager6[3] = %00111100
            kublager6[4] = %00111100
            kublager6[5] = %00011000
        endif
        if m = 6 then
            kublager0[0] = %00111100
            kublager0[1] = %01111110
            kublager0[2] = %11111111
            kublager0[3] = %11111111
            kublager0[4] = %11111111
            kublager0[5] = %11111111
            kublager0[6] = %01111110
            kublager0[7] = %00111100
            
            kublager1[0] = %01111110
            kublager1[1] = %11111111
            kublager1[2] = %11111111
            kublager1[3] = %11111111
            kublager1[4] = %11111111
            kublager1[5] = %11111111
            kublager1[6] = %11111111
            kublager1[7] = %01111110
            
            for d = 0 to 7 
                kublager2[d] = %11111111
            next d
            
            for d = 0 to 7 
                kublager3[d] = %11111111
            next d
            
            kublager4[0] = %01111110
            kublager4[1] = %11111111
            kublager4[2] = %11111111
            kublager4[3] = %11111111
            kublager4[4] = %11111111
            kublager4[5] = %11111111
            kublager4[6] = %11111111
            kublager4[7] = %01111110
            
            kublager5[0] = %00111100
            kublager5[1] = %01111110
            kublager5[2] = %11111111
            kublager5[3] = %11111111
            kublager5[4] = %11111111
            kublager5[5] = %11111111
            kublager5[6] = %01111110
            kublager5[7] = %00111100
            
            kublager6[0] = %00111100
            kublager6[1] = %01111110
            kublager6[2] = %11111111
            kublager6[3] = %11111111
            kublager6[4] = %11111111
            kublager6[5] = %11111111
            kublager6[6] = %01111110
            kublager6[7] = %00111100
        endif
        if m = 7 then
            kublager0[0] = %01111110
            kublager0[1] = %11111111
            kublager0[2] = %11111111
            kublager0[3] = %11111111
            kublager0[4] = %11111111
            kublager0[5] = %11111111
            kublager0[6] = %01111110
            kublager0[7] = %00111100
            
            for d = 0 to 7 
                kublager1[d] = %11111111
            next d
            
            for d = 0 to 7 
                kublager2[d] = %11111111
            next d
            
            for d = 0 to 7 
                kublager3[d] = %11111111
            next d
            
            for d = 0 to 7 
                kublager4[d] = %11111111
            next d
            
            for d = 0 to 7 
                kublager5[d] = %11111111
            next d

            kublager6[0] = %01111110
            kublager6[1] = %11111111
            kublager6[2] = %11111111
            kublager6[3] = %11111111
            kublager6[4] = %11111111
            kublager6[5] = %11111111
            kublager6[6] = %11111111
            kublager6[7] = %01111110
        endif
        if m = 7 then gosub ettstall_kub
return

stapelbar:
gosub nollstall_kub
if m = 1 then
    kublager0[0] = %11011111
    kublager0[1] = %10110111
    kublager0[2] = %11111101
    kublager0[3] = %11111111
    kublager0[4] = %10111111
    kublager0[5] = %11111111
    kublager0[6] = %11111011
    kublager0[7] = %11111111
    
    kublager1[0] = %10000010
    kublager1[1] = %00010001
    kublager1[5] = %00000000
    kublager1[7] = %10010001
endif
if m = 2 then
    kublager0[0] = %11011111
    kublager0[1] = %11110111
    kublager0[2] = %11111111
    kublager0[3] = %11111111
    kublager0[4] = %11111111
    kublager0[5] = %11111111
    kublager0[6] = %11111011
    kublager0[7] = %11111111
    
    kublager1[0] = %11011011
    kublager1[1] = %10110111
    kublager1[2] = %11110110
    kublager1[3] = %01001011
    kublager1[4] = %11111111
    kublager1[5] = %00011110
    kublager1[6] = %11011011
    kublager1[7] = %11001111
    
    kublager2[1] = %00001000
    kublager2[3] = %01001001
    kublager2[4] = %01000000
    kublager2[5] = %00010000
endif
if m = 3 then
    kublager0[0] = %11111111
    kublager0[1] = %11110111
    kublager0[2] = %11111111
    kublager0[3] = %11111111
    kublager0[4] = %11111111
    kublager0[5] = %11111111
    kublager0[6] = %11111011
    kublager0[7] = %11111111
    
    kublager1[0] = %11111111
    kublager1[1] = %11110111
    kublager1[2] = %11110111
    kublager1[3] = %11001011
    kublager1[4] = %11111111
    kublager1[5] = %11011110
    kublager1[6] = %11111011
    kublager1[7] = %11101111
    
    kublager2[0] = %11001101
    kublager2[1] = %01010110
    kublager2[2] = %01110110
    kublager2[3] = %11001010
    kublager2[4] = %11110111
    kublager2[5] = %01011110
    kublager2[6] = %01111011
    kublager2[7] = %01101110
    
    kublager3[1] = %00010000
    kublager3[2] = %00100100
    kublager3[3] = %00001000
    kublager3[4] = %00010100
    kublager3[5] = %01010000
    
    kublager4[3] = %00001000
endif
if m = 4 then
    kublager0[0] = %11111111
    kublager0[1] = %11111111
    kublager0[2] = %11111111
    kublager0[3] = %11111111
    kublager0[4] = %11111111
    kublager0[5] = %11111111
    kublager0[6] = %11111111
    kublager0[7] = %11111111
    
    kublager1[0] = %11111111
    kublager1[1] = %10111111
    kublager1[2] = %11111111
    kublager1[3] = %11101110
    kublager1[4] = %11111111
    kublager1[5] = %11111011
    kublager1[6] = %01111111
    kublager1[7] = %11111011
    
    kublager2[0] = %11110111
    kublager2[1] = %00110010
    kublager2[2] = %11111110
    kublager2[3] = %00101110
    kublager2[4] = %11111111
    kublager2[5] = %10111011
    kublager2[6] = %01111101
    kublager2[7] = %11001011
    
    kublager3[0] = %00110010
    kublager3[1] = %00110010
    kublager3[2] = %01010010
    kublager3[3] = %00101000
    kublager3[4] = %10100111
    kublager3[5] = %00100010
    kublager3[6] = %01010101
    kublager3[7] = %10001011
    
    kublager4[1] = %00100010
    kublager4[2] = %01010000
    kublager4[3] = %00001000
    kublager4[4] = %00000100
    kublager4[5] = %00000000

    kublager5[3] = %00001000
endif
if m = 5 then
    kublager0[0] = %11111111
    kublager0[1] = %11111111
    kublager0[2] = %11111111
    kublager0[3] = %11111111
    kublager0[4] = %11111111
    kublager0[5] = %11111111
    kublager0[6] = %11111111
    kublager0[7] = %11111111
    
    kublager1[0] = %11110111
    kublager1[1] = %01111111
    kublager1[2] = %11111110
    kublager1[3] = %01111111
    kublager1[4] = %11011110
    kublager1[5] = %11111011
    kublager1[6] = %11111110
    kublager1[7] = %11011011
    
    kublager2[0] = %11110111
    kublager2[1] = %01110110
    kublager2[2] = %11111110
    kublager2[3] = %01111100
    kublager2[4] = %11011110
    kublager2[5] = %11011011
    kublager2[6] = %11110010
    kublager2[7] = %01011011
    
    kublager3[0] = %01010101
    kublager3[1] = %01100110
    kublager3[2] = %10101110
    kublager3[3] = %01111100
    kublager3[4] = %11011000
    kublager3[5] = %11011001
    kublager3[6] = %10110010
    kublager3[7] = %01011001
    
    kublager4[0] = %00000001
    kublager4[1] = %00000100
    kublager4[2] = %10100010
    kublager4[3] = %01010000
    kublager4[4] = %10011000
    kublager4[5] = %10010001
    kublager4[6] = %00110000
    kublager4[7] = %01010001

    kublager5[3] = %01000000
    kublager5[4] = %00001000
endif
if m = 6 then
    kublager0[0] = %11110111
    kublager0[1] = %11111111
    kublager0[2] = %11111111
    kublager0[3] = %11111111
    kublager0[4] = %01111110
    kublager0[5] = %11111111
    kublager0[6] = %11111111
    kublager0[7] = %11110111
    
    kublager1[0] = %11110111
    kublager1[1] = %11000111
    kublager1[2] = %11101110
    kublager1[3] = %10111111
    kublager1[4] = %01111110
    kublager1[5] = %11110100
    kublager1[6] = %11101110
    kublager1[7] = %11110111
    
    kublager2[0] = %10110101
    kublager2[1] = %11000111
    kublager2[2] = %01101110
    kublager2[3] = %10110111
    kublager2[4] = %01110110
    kublager2[5] = %11110100
    kublager2[6] = %10101110
    kublager2[7] = %11110101
    
    kublager3[0] = %10110101
    kublager3[1] = %11000111
    kublager3[2] = %01001110
    kublager3[3] = %10110101
    kublager3[4] = %01010010
    kublager3[5] = %11010100
    kublager3[6] = %10101110
    kublager3[7] = %11010101
    
    kublager4[0] = %10010101
    kublager4[1] = %11000111
    kublager4[2] = %01001010
    kublager4[3] = %10110100
    kublager4[4] = %01010010
    kublager4[5] = %01010100
    kublager4[6] = %10101010
    kublager4[7] = %11010101

    kublager5[0] = %00000101
    kublager5[1] = %10000000
    kublager5[2] = %01001000
    kublager5[3] = %10000100
    kublager5[4] = %00010010
    kublager5[6] = %10001010
    kublager5[7] = %10000101
    
    kublager6[2] = %00001000
    kublager6[3] = %10000000
endif
if m = 7 then
    kublager0[0] = %11110111
    kublager0[1] = %11111111
    kublager0[2] = %11111111
    kublager0[3] = %11111111
    kublager0[4] = %01111110
    kublager0[5] = %11111111
    kublager0[6] = %11111111
    kublager0[7] = %11110111
    
    kublager1[0] = %11110111
    kublager1[1] = %11111110
    kublager1[2] = %11101111
    kublager1[3] = %11111111
    kublager1[4] = %01111110
    kublager1[5] = %11110111
    kublager1[6] = %10111111
    kublager1[7] = %11110111
    
    kublager2[0] = %11010111
    kublager2[1] = %11111110
    kublager2[2] = %11101111
    kublager2[3] = %10110110
    kublager2[4] = %01111110
    kublager2[5] = %11110111
    kublager2[6] = %10111011
    kublager2[7] = %11110111
    
    kublager3[0] = %11010110
    kublager3[1] = %11111100
    kublager3[2] = %11101111
    kublager3[3] = %10110110
    kublager3[4] = %01111110
    kublager3[5] = %11010111
    kublager3[6] = %10111011
    kublager3[7] = %11110111
    
    kublager4[0] = %11010110
    kublager4[1] = %10111000
    kublager4[2] = %11101111
    kublager4[3] = %10110110
    kublager4[4] = %01011010
    kublager4[5] = %11010111
    kublager4[6] = %10101010
    kublager4[7] = %11110111

    kublager5[0] = %11010100
    kublager5[1] = %10111000
    kublager5[2] = %10101011
    kublager5[3] = %10110110
    kublager5[4] = %01011010
    kublager5[5] = %11010111
    kublager5[6] = %10101010
    kublager5[7] = %10110111
    
    kublager6[0] = %10000100
    kublager6[1] = %10101000
    kublager6[2] = %00101001
    kublager6[3] = %10100100
    kublager6[4] = %01011010
    kublager6[5] = %10010111
    kublager6[6] = %00101010
    kublager6[7] = %00100101
endif
return


av_till_pa:
for m = 0 to 80
    gosub nollstall_kub    
    for d = 0 to (80-m)
        pauseus 1
        fordrojinterrupt = 30   
    next d
    
    gosub ettstall_kub
    for d = 0 to m
        pauseus 1
        fordrojinterrupt = 30   
    next d
next m
gosub ettstall_kub
return

pa_till_av:
for m = 80 to 0 step -1
    gosub ettstall_kub
    for d = 0 to m
        pauseus 1
        fordrojinterrupt = 30   
    next d
    gosub nollstall_kub    
    for d = 0 to (80-m)
        pauseus 1
        fordrojinterrupt = 30   
    next d
next m
gosub nollstall_kub
returN

upp_till_ner:
    for i = 0 to 7
        kublager6[i] = 255
    next i
    delay = 10 
    gosub pausefunktion
    for i = 0 to 7
        kublager6[i] = 0
        kublager5[i] = 255
    next i
    delay = 10 
    gosub pausefunktion
    for i = 0 to 7
        kublager5[i] = 0
        kublager4[i] = 255
    next i
    delay = 10 
    gosub pausefunktion
    for i = 0 to 7
        kublager4[i] = 0
        kublager3[i] = 255
    next i
    delay = 10 
    gosub pausefunktion
    for i = 0 to 7
        kublager3[i] = 0
        kublager2[i] = 255
    next i
    delay = 10 
    gosub pausefunktion
    for i = 0 to 7
        kublager2[i] = 0
        kublager1[i] = 255
    next i
    delay = 10 
    gosub pausefunktion
    for i = 0 to 7
        kublager1[i] = 0
        kublager0[i] = 255
    next i
    delay = 10 
    gosub pausefunktion
    for i = 0 to 7
        kublager0[i] = 0
    next i
return


loop: 
    if mode = 0 then ' 0 = normalt läge, 1 = musikläge
        gosub slumpakuber
        gosub upp_till_ner
        gosub explosion_fade
        gosub pa_till_av
        delay = 60 
        gosub pausefunktion
        gosub gardin
        gosub av_till_pa
        gosub fyrkantifyrkant
        delay = 40 
        gosub pausefunktion
        gosub gardin
        gosub av_till_pa
        delay = 40 
        gosub pausefunktion
        gosub pa_till_av
        gosub markera_kanter
        delay = 40 
        gosub pausefunktion
        gosub vanster_till_hoger_swipe
        gosub hoger_till_vanster_swipe
        gosub vagmonster
        gosub explosion_fade
        gosub pa_till_av
        gosub hoger_till_vanster_swipe
        gosub vanster_till_hoger_swipe
        gosub fyrkantsvag
        gosub explosion_fade
        gosub pa_till_av
        gosub vanster_till_hoger_swipe
        gosub hoger_till_vanster_swipe
        gosub gardin
    else
        lageraknare = lageraknare+1
        if lageraknare = 1000 AND lage = 2 then
            lageraknare = 0
            lage = 0
        endif
        if lageraknare = 55000 AND lage != 2 then
            lageraknare = 0
            lage = lage+1
        endif
        
        adcin 0, volym
        m = volym/35 ' volym = 0-7
        
        if lage = 0 then   ' bargraph under utveckling
            if foregaendevolym = m then 
                goto loop
            else
                foregaendevolym = m
            endif
            if m = 0 then 
                gosub nollstall_kub  
            else    
                gosub stapelbar
            endif
        endif
        
        if lage = 1 then
            if foregaendevolym = m then 
                goto loop
            else
                foregaendevolym = m
            endif
            if m = 0 then 
                gosub nollstall_kub  
            else    
                gosub explosion
            endif
        endif
        
        if lage = 2 then
            j=j+1 
            gosub nollstall_kub
            delay = 20-(volym/15)
            m = j
            gosub vagmonster_andra   
            gosub pausefunktion
            if j >= 11 then j = 0
        endif
    endif 
goto loop

Och här finns Eagle schema och pcb (har blivit några ändringar i schemat i efterhand därav några inverterade ledningar)
Användarvisningsbild
dar303
Inlägg: 5979
Blev medlem: 17 december 2003, 19:54:56
Ort: Sthlm

Re: LED-"kub" 8x8x7

Inlägg av dar303 »

Mycket snyggt!
Nu vill vi se realtids 3-d videoinput med två webkameror! :)
ToPNoTCH
Inlägg: 5142
Blev medlem: 21 december 2009, 17:59:48

Re: LED-"kub" 8x8x7

Inlägg av ToPNoTCH »

:tumupp:
Snyggt.

Måste bara fråga.
Att det vart 7 lager, är det för att du inte fick tag i dom sista 12 lysdioderna :lol:
Användarvisningsbild
petterMAN
Inlägg: 125
Blev medlem: 27 december 2007, 16:46:09
Ort: Umeå

Re: LED-"kub" 8x8x7

Inlägg av petterMAN »

dar303: Sätter genast igång med det :wink: :vissla:

ToPNoTCH: Busted! :oops: Det var faktiskt så, hade inte i åtanke att bygga en led kub när jag beställde dem, och det kändes lite omständigt att få tag på exakt likadana då jag inte ens hade datablad på dem. Dessutom så var det säkert 10-15stycken som var trasiga redan när de kom.
Användarvisningsbild
Glenn
Inlägg: 36631
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: LED-"kub" 8x8x7

Inlägg av Glenn »

:tumupp: för att du släpper kod och schema, riktigt nice, ska studera koden sen efterssom jag också försöker skriva i PBP :)

Får se om jag kan låna bitar till en mindre kub sen :)

Kod: Markera allt

pausefunktion:
    delay=delay*100
    doit:
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    pauseus 1
    delay=delay-1
    if delay != 0 then goto doit
Du har också konstaterat att den inbyggda interupthanteringen är lite dum ? ;) (fast darrels instant interupts löser väl det iofs)
Användarvisningsbild
petterMAN
Inlägg: 125
Blev medlem: 27 december 2007, 16:46:09
Ort: Umeå

Re: LED-"kub" 8x8x7

Inlägg av petterMAN »

Jo, PBP är ju verkligen inte byggt för interrups, darrel kör med assembler till detta väl? Funderade på det men körde med denna metod då jag hade så många andra problem att lösa :lol:
Användarvisningsbild
Glenn
Inlägg: 36631
Blev medlem: 24 februari 2006, 12:01:56
Ort: Norr om Sthlm
Kontakt:

Re: LED-"kub" 8x8x7

Inlägg av Glenn »

Jo det tror jag nog, men efterssom man bara inkluderar filen så behöver man ju inte bry sig.

Jag har dock inte heller kört med instant interupts, jag har haft så låga krav att dom inbyggda har funkat,
bara man ser till att inte göra nåt i stil med "pause 1000" när det kan komma en interupt :) ..nån gång ska jag
kolla på det där, speciellt om jag fortsätter på mitt "bilinstrument" jag började på men som också ligger i den
stora "påbörjade men ej avslutade projekt" högen :)
Gimbal
Inlägg: 8650
Blev medlem: 20 april 2005, 15:43:53

Re: LED-"kub" 8x8x7

Inlägg av Gimbal »

Snyggt, tjusiga effekter.
Kanske Pong i 3D vore en kul effekt?
Skriv svar