|  |  | @ -53,15 +53,37 @@ def morph_grb(grb, steps, mode='single'): | 
			
		
	
		
		
			
				
					
					|  |  |  |         raise Exception(f'Mode "{mode}" is not supported.') |  |  |  |         raise Exception(f'Mode "{mode}" is not supported.') | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |     return grb |  |  |  |     return grb | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | def rainbow(device, min_value=1, max_value=255): | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     """ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     Takes an int between 0-255 and either increments or decreases it by the specified steps. | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     """ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     direction = [ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         choice([-1, 1]), | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         choice([-1, 1]), | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         choice([-1, 1]) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     ] | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     grb = [ | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         randint(min_value, max_value), | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         randint(min_value, max_value), | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         randint(min_value, max_value) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     ] | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     channel = randint(0, 2) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |     while True: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         #channel = (channel + 1) % 3 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         channel = randint(0, 2) | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |         for i in range(30): | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             candidate = grb[channel] + 1 * direction[channel] | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             # if we go out of bounds reverse the direction | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             if candidate < min_value or candidate > max_value: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 direction[channel] = direction[channel] * -1 | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |             else: | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 grb[channel] = candidate | 
			
		
	
		
		
			
				
					
					|  |  |  |  |  |  |  |                 set_all_leds(device, grb) | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | device = blinkstick.find_first() |  |  |  | device = blinkstick.find_first() | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  | 
 | 
			
		
	
		
		
			
				
					
					|  |  |  | # get a random initial color |  |  |  | rainbow(device) | 
			
				
				
			
		
	
		
		
			
				
					
					|  |  |  | grb = random_grb() |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | while True: |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     set_all_leds(device, grb) |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  | 
 |  |  |  |  | 
			
		
	
		
		
			
				
					
					|  |  |  |     grb = morph_grb(grb, 2) |  |  |  |  | 
			
		
	
		
		
	
	
		
		
			
				
					|  |  | 
 |