'''
A silly script that produces a firefly pattern in resting state,
left or right moving arrows if buttons A or B are pressed, or pin0 or pin1 is activated,
or a break indicator if both buttons are pressed or both pins are activated.
Might be used for biking lights or similar.
Build for mu micropython editor.
'''

from microbit import *

import random

random.seed(3433)   # some number 

de = 100   # sets delay time in ms

image_l_1 = Image(   
    "00900:"
    "09000:"
    "97531:"
    "09000:"
    "00900")
              
image_l_2 = Image(   
    "09000:"
    "90000:"
    "75319:"
    "90000:"
    "09000")
                         
image_l_3 = Image(   
    "90000:"
    "00009:"
    "53197:"
    "00009:"
    "90000")
              
image_l_4 = Image(   
    "00009:"
    "00090:"
    "31975:"
    "00090:"
    "00009")
    
image_l_5 = Image(   
    "00090:"
    "00900:"
    "19753:"
    "00900:"
    "00090")
    
image_r_1 = Image(   
    "00900:"
    "00090:"
    "13579:"
    "00090:"
    "00900")
              
image_r_2 = Image(   
    "00090:"
    "00009:"
    "91357:"
    "00009:"
    "00090") 
    
image_r_3 = Image(   
    "00009:"
    "90000:"
    "79135:"
    "90000:"
    "00009")  
    
image_r_4 = Image(   
    "90000:"
    "09000:"
    "57913:"
    "09000:"
    "90000")   
    
image_r_5 = Image(   
    "09000:"
    "00900:"
    "35791:"
    "00900:"
    "09000")
    
image_z_1 = Image(   
    "90009:"
    "00000:"
    "00900:"
    "00000:"
    "90009")

image_z_2 = Image(   
    "09090:"
    "90009:"
    "00000:"
    "90009:"
    "09090")    
    
while True: 
    if ((button_a.is_pressed() and button_b.is_pressed())   # indicator breaks
        # or (pin0.read_digital() and pin1.read_digital())): 
        or (pin0.is_touched() and pin1.is_touched())): 
        # use for external button
        # or pin2.is_touched()):
           
        display.show(Image.DIAMOND_SMALL) 
        sleep(de) 
        display.show(Image.DIAMOND)
        sleep(de)
        display.show(image_z_2) 
        sleep(de)  
        display.show(image_z_1) 
        sleep(de)               
        display.clear()
        
    elif (button_a.is_pressed()    # indicator left
            or pin0.is_touched()): 
            #  or pin0.read_digital()): 
            # use for external button, use 10kOhm resistor
            # or pin0.is_touched()
                
        display.show(image_l_1)
        sleep(de)
        display.show(image_l_2)
        sleep(de)
        display.show(image_l_3)
        sleep(de) 
        display.show(image_l_4)
        sleep(de)
        display.show(image_l_5)
        sleep(de)
        display.clear()
        
    elif (button_b.is_pressed()    # indicator right
            # or pin1.read_digital()):   # use for external button
            or pin1.is_touched()):
        
        display.show(image_r_1)
        sleep(de)
        display.show(image_r_2)
        sleep(de)
        display.show(image_r_3)
        sleep(de) 
        display.show(image_r_4)
        sleep(de)
        display.show(image_r_5)
        sleep(de)  
        display.clear()
             
    else:          # firefly 
        # seed a given number of pixels
        for g in range(0, 3):     
            x = random.randint(0, 4)
            y = random.randint(0, 4)
            v = 9
            # v = random.randint(0, 9)   # optional: randomized seed brightness
            display.set_pixel(x, y, v)

        # reduce intensity of all pixels by one    
        for j in range(0, 5):
            for i in range(0, 5):
                b = display.get_pixel(i, j)
                if (b > 0):
                    f = b - 1        
                else:
                    f = 0     # sets 0 as lowest allowed value
                display.set_pixel(i, j, f)
    
        # set velocity
        sleep(50)    
    

