Lightcube/erste Animation
Aus C3MAWiki
Dieses Projekt ist erfolgreich abgeschlossen und wird hier dokumentiert. Falls du weitere Fragen dazu hast, wende dich an TheMaverick.
Hier sind mal die ersten Testanimationen.
Da die Datenübertragung vom PC an den Cube noch nicht gunktioniert gibts hier ausschließlich Statische animationen
$regfile = "m32def.dat" $crystal = 16000000 Config Porta = OUTPUT Config Portb = OUTPUT Config Portc = OUTPUT DECLARE SUB Moving_wall_front_back() DECLARE SUB Moving_wall_top_bottom() DECLARE SUB Randum_levels() DECLARE SUB Randum_led_to_all() DECLARE SUB Randum_led() DECLARE SUB Randum_leds() DECLARE SUB Moving_cube() DECLARE SUB Snake() DECLARE SUB Light_one_led(BYVAL Led_x AS Byte , BYVAL Led_y AS Byte , BYVAL Led_z AS Byte) DECLARE SUB Dark_one_led(BYVAL Led_x AS Byte , BYVAL Led_y AS Byte , BYVAL Led_z AS Byte) DECLARE SUB Dark() DIM X AS Byte DIM Y AS Byte DIM Z AS Byte DIM P AS Byte DIM Istx AS Byte DIM Isty AS Byte DIM Istz AS Byte DIM Istx1 AS Byte DIM Isty1 AS Byte DIM Istz1 AS Byte DIM Istx2 AS Byte DIM Isty2 AS Byte DIM Istz2 AS Byte DIM Istx3 AS Byte DIM Isty3 AS Byte DIM Istz3 AS Byte DIM Move AS Byte DIM Movex AS Byte DIM Movey AS Byte DIM Movez AS Byte 'hauptschleife aufrufen 'Call Moving_wall_front_back() 'Call Moving_wall_top_bottom() 'Call Randum_levels() 'Call Randum_led_to_all() 'Call Randum_led() 'Call Randum_leds() CALL Moving_cube() 'Call Snake() SUB Randum_leds() 'eine zufällige led wird aktiviert DO Istx1 = RND(9) IF Istx1 > 0 THEN Istx1 = Istx1 - 1 END IF Isty1 = RND(9) IF Isty1 > 0 THEN Isty1 = Isty1 - 1 END IF Istz1 = RND(9) IF Istz1 > 0 THEN Istz1 = Istz1 - 1 END IF Istx2 = RND(9) IF Istx2 > 0 THEN Istx2 = Istx2 - 1 END IF Isty2 = RND(9) IF Isty2 > 0 THEN Isty2 = Isty2 - 1 END IF Istz2 = RND(9) IF Istz2 > 0 THEN Istz2 = Istz2 - 1 END IF Istx3 = RND(9) IF Istx3 > 0 THEN Istx3 = Istx3 - 1 END IF Isty3 = RND(9) IF Isty3 > 0 THEN Isty3 = Isty3 - 1 END IF Istz3 = RND(9) IF Istz3 > 0 THEN Istz3 = Istz3 - 1 END IF FOR P = 1 TO 30 STEP 1 CALL Dark() CALL Light_one_led(istx1 , Isty1 , Istz1) Waitms 2 CALL Dark() CALL Light_one_led(istx2 , Isty2 , Istz2) Waitms 2 CALL Dark() CALL Light_one_led(istx3 , Isty3 , Istz3) Waitms 2 NEXT P LOOP 'Until P = 25 END SUB Randum_leds() SUB Snake() 'es bildet sich eine schlange aus leds die sich dirch den würfel schlängelt X = 0 Y = 0 Z = 0 DIM Snake1x AS Byte DIM Snake1y AS Byte DIM Snake1z AS Byte DIM Snake2x AS Byte DIM Snake2y AS Byte DIM Snake2z AS Byte DIM Snake3x AS Byte DIM Snake3y AS Byte DIM Snake3z AS Byte DIM Snake4x AS Byte DIM Snake4y AS Byte DIM Snake4z AS Byte Snake1x = 3 Snake1y = 0 Snake1z = 0 Snake2x = 2 Snake2y = 0 Snake2z = 0 Snake3x = 1 Snake3y = 0 Snake3z = 0 Snake4x = 0 Snake4y = 0 Snake4z = 0 DO FOR P = 1 TO 100 STEP 1 CALL Light_one_led(snake1x , Snake1y , Snake1z) Waitus 1000 CALL Dark_one_led(snake1x , Snake1y , Snake1z) CALL Light_one_led(snake2x , Snake2y , Snake2z) Waitus 1000 CALL Dark_one_led(snake2x , Snake2y , Snake2z) CALL Light_one_led(snake3x , Snake3y , Snake3z) Waitus 1000 CALL Dark_one_led(snake3x , Snake3y , Snake3z) CALL Light_one_led(snake4x , Snake4y , Snake4z) Waitus 1000 CALL Dark_one_led(snake4x , Snake4y , Snake4z) NEXT P Snake4x = Snake3x Snake4y = Snake3y Snake4z = Snake3z Snake3x = Snake2x Snake3y = Snake2y Snake3z = Snake2z Snake2x = Snake1x Snake2y = Snake1y Snake2z = Snake1z Move = RND(5) IF Move = 0 THEN IF Snake1x <= 6 THEN Snake1x = Snake1x + 1 ELSE Snake1x = Snake1x - 1 END IF ELSEIF Move = 1 THEN IF Snake1x >= 1 THEN Snake1x = Snake1x - 1 ELSE Snake1x = Snake1x + 1 END IF ELSEIF Move = 2 THEN IF Snake1y <= 6 THEN Snake1y = Snake1y + 1 ELSE Snake1y = Snake1y - 1 END IF ELSEIF Move = 3 THEN IF Snake1y >= 1 THEN Snake1y = Snake1y - 1 ELSE Snake1y = Snake1y + 1 END IF ELSEIF Move = 4 THEN IF Snake1y <= 6 THEN Snake1z = Snake1z + 1 ELSE Snake1z = Snake1z - 1 END IF ELSEIF Move = 5 THEN IF Snake1y >= 1 THEN Snake1z = Snake1z - 1 ELSE Snake1z = Snake1z + 1 END IF END IF LOOP END SUB Snake() SUB Moving_cube() 'ein würfel 3x3x3 leds bewegt sich frei nach zufall im LED cube X = 1 Y = 1 Z = 1 DO CALL Dark() Porta.x = 1 Istx = X - 1 Porta.istx = 1 Istx = X + 1 Porta.istx = 1 Portb.y = 1 Isty = Y - 1 Portb.isty = 1 Isty = Y + 1 Portb.isty = 1 Portc.z = 1 Istz = Z - 1 Portc.istz = 1 Istz = Z + 1 Portc.istz = 1 P = RND(3) Move = RND(10) Movex = RND(11) Movey = RND(11) Movez = RND(11) IF P = 0 THEN IF Movex >= 5 THEN IF X <= 5 THEN X = X + 1 ELSE X = X - 1 END IF ELSE IF X >= 2 THEN X = X - 1 ELSE X = X + 1 END IF END IF ELSEIF P = 1 THEN IF Movey >= 5 THEN IF Y <= 5 THEN Y = Y + 1 ELSEIF Y >= 5 THEN Y = Y - 1 END IF ELSE IF Y >= 2 THEN Y = Y - 1 ELSEIF Y <= 2 THEN Y = Y + 1 END IF END IF ELSEIF P = 2 THEN IF Movez >= 5 THEN IF Z <= 5 THEN Z = Z + 1 ELSE Z = Z - 1 END IF ELSE IF Z >= 2 THEN Z = Z - 1 ELSE Z = Z + 1 END IF END IF END IF Waitms 300 LOOP END SUB Moving_cube() SUB Randum_led() 'eine zufällige led wird aktiviert P = 0 DO CALL Dark() Istx = RND(9) Isty = RND(9) Istz = RND(9) CALL Light_one_led(istx , Isty , Istz) Waitms 60 P = P + 1 LOOP 'Until P = 25 END SUB Randum_led() SUB Randum_led_to_all() 'eine zufällige led wird aktiviert DO Istx = RND(9) Isty = RND(9) Istz = RND(9) CALL Light_one_led(istx , Isty , Istz) Waitms 150 LOOP END SUB Randum_led_to_all() SUB Randum_levels() 'einzelne ebenenwerden frei nach belieben an und aus geschaltet P = 0 DO Istx = RND(9) Isty = RND(9) Istz = RND(9) CALL Dark_one_led(istx , Isty , Istz) Istx = RND(9) Isty = RND(9) Istz = RND(9) CALL Light_one_led(istx , Isty , Istz) Waitms 150 P = P + 1 LOOP 'Until P = 25 END SUB Randum_levels() SUB Moving_wall_top_bottom() 'senkrechte wand wandert von oben nach unten und wieder zurück P = 0 DO FOR Z = 1 TO 8 STEP 1 FOR Y = 1 TO 8 STEP 2 FOR X = 1 TO 8 STEP 8 CALL Dark() Istx = X - 1 Isty = Y - 1 Istz = Z - 1 Porta = 255 Portc.isty = 1 Isty = Isty + 1 Portc.isty = 1 Portb.istz = 1 Waitms 10 NEXT X NEXT Y NEXT Z FOR Z = 2 TO 7 STEP 1 FOR Y = 1 TO 8 STEP 2 FOR X = 1 TO 8 STEP 8 CALL Dark() Istx = X - 1 Isty = Y - 1 Istz = 8 - Z Porta = 255 Portc.isty = 1 Isty = Isty + 1 Portc.isty = 1 Portb.istz = 1 Waitms 10 NEXT X NEXT Y NEXT Z P = P + 1 LOOP UNTIL P = 10 END SUB Moving_wall_top_bottom() SUB Moving_wall_front_back() 'senkrechte wand wandert von vorn nach hinten und wieder zurück P = 0 DO FOR Z = 1 TO 8 STEP 1 FOR Y = 1 TO 8 STEP 2 FOR X = 1 TO 8 STEP 8 CALL Dark() Istx = X - 1 Isty = Y - 1 Istz = Z - 1 Porta = 255 Portb.isty = 1 Isty = Isty + 1 Portb.isty = 1 Portc.istz = 1 Waitms 10 NEXT X NEXT Y NEXT Z FOR Z = 2 TO 7 STEP 1 FOR Y = 1 TO 8 STEP 2 FOR X = 1 TO 8 STEP 8 CALL Dark() Istx = X - 1 Isty = Y - 1 Istz = 8 - Z Porta = 255 Portb.isty = 1 Isty = Isty + 1 Portb.isty = 1 Portc.istz = 1 Waitms 10 NEXT X NEXT Y NEXT Z P = P + 1 LOOP UNTIL P = 10 END SUB Moving_wall_front_back() SUB Light_one_led(BYVAL Led_x AS Byte , BYVAL Led_y AS Byte , BYVAL Led_z AS Byte) Porta.led_x = 1 Portb.led_y = 1 Portc.led_z = 1 END SUB SUB Dark_one_led(BYVAL Led_x AS Byte , BYVAL Led_y AS Byte , BYVAL Led_z AS Byte) Porta.led_x = 0 Portb.led_y = 0 Portc.led_z = 0 END SUB SUB Dark() Porta = 0 Portb = 0 Portc = 0 END SUB END
--TM 22:50, 2. Dez. 2006 (CET)