account for rgb
This commit is contained in:
		
							parent
							
								
									9e1c0f5be1
								
							
						
					
					
						commit
						e337625791
					
				
					 1 changed files with 28 additions and 8 deletions
				
			
		
							
								
								
									
										36
									
								
								lights.js
									
										
									
									
									
								
							
							
						
						
									
										36
									
								
								lights.js
									
										
									
									
									
								
							|  | @ -9,6 +9,16 @@ var pixel_cache = new Uint32Array(cfg.leds); | |||
| var next_pattern = new Uint32Array(cfg.leds); | ||||
| var pattern = {} | ||||
| 
 | ||||
| function rgb_to_int(r, g, b) { | ||||
|   return ((r << 8) + g) << 8 + b; | ||||
| } | ||||
| function int_to_rgb(int) { | ||||
|   var r = int >> 16 & 0xFF; | ||||
|   var g = int >> 8 & 0xFF; | ||||
|   var b = int & 0xFF; | ||||
|   return { r: r, g: g, b: b }; | ||||
| } | ||||
| 
 | ||||
| ws281x.configure({ | ||||
|   leds: cfg.leds || 300, | ||||
|   brightness: cfg.brightness || 200, | ||||
|  | @ -47,16 +57,26 @@ export function tick() { | |||
| } | ||||
| 
 | ||||
| function fade(index) { | ||||
|   var original = pixel_cache[index]; | ||||
|   var final = next_pattern[index]; | ||||
|   var diff = final - original; | ||||
|   var interval = diff / fade_ticks; | ||||
|   var original = int_to_rgb(pixel_cache[index]); | ||||
|   var current = int_to_rgb(pixels[index]); | ||||
|   var final = int_to_rgb(next_pattern[index]); | ||||
|   var diff_r = final.r - original.r; | ||||
|   var diff_g = final.g - original.g; | ||||
|   var diff_b = final.b - original.b; | ||||
|   var interval_r = diff_r / fade_ticks; | ||||
|   var interval_g = diff_g / fade_ticks; | ||||
|   var interval_b = diff_b / fade_ticks; | ||||
| 
 | ||||
|   if (Math.abs(final - pixels[index]) < interval) { | ||||
|     pixels[index] = final; | ||||
|     pixel_cache[index] = final; | ||||
|   if (Math.abs(final.r - current.r) < interval_r && | ||||
|     Math.abs(final.g - current.g) < interval_g && | ||||
|     Math.abs(final.b - current.b) < interval_b | ||||
|   ) { | ||||
|     pixels[index] = next_pattern[index]; | ||||
|     pixel_cache[index] = next_pattern[index]; | ||||
|   } | ||||
|   else { | ||||
|     pixels[index] += interval; | ||||
|     pixels[index] = rgb_to_int(current.r + interval_r, | ||||
|       current.g + interval_g, | ||||
|       current.b + interval_b); | ||||
|   } | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue