Added HSV support
This commit is contained in:
		@@ -128,6 +128,57 @@ void led_set(uint8_t lednum, uint16_t red, uint16_t green, uint16_t blue)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void led_set_hsv(uint8_t lednum, uint16_t hue, uint8_t saturation, uint8_t value)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						uint16_t red, green, blue;
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						//Calculate hue
 | 
				
			||||||
 | 
						if ( hue < 61 ) {
 | 
				
			||||||
 | 
							red = 255;
 | 
				
			||||||
 | 
							green = ( 425UL * hue ) / 100;
 | 
				
			||||||
 | 
							blue = 0;
 | 
				
			||||||
 | 
						} else if ( hue < 121 ) {
 | 
				
			||||||
 | 
							red = 255 - ( ( 425UL * ( hue - 60 ) ) / 100 );
 | 
				
			||||||
 | 
							green = 255;
 | 
				
			||||||
 | 
							blue = 0;
 | 
				
			||||||
 | 
						} else if ( hue < 181 ) {
 | 
				
			||||||
 | 
							red = 0;
 | 
				
			||||||
 | 
							green = 255;
 | 
				
			||||||
 | 
							blue = ( 425UL * ( hue - 120 ) ) / 100;
 | 
				
			||||||
 | 
						} else if ( hue < 241 ) {
 | 
				
			||||||
 | 
							red = 0;
 | 
				
			||||||
 | 
							green = 255 - ( ( 425UL * ( hue - 180 ) ) / 100 );
 | 
				
			||||||
 | 
							blue = 255;
 | 
				
			||||||
 | 
						} else if ( hue < 301 ) {
 | 
				
			||||||
 | 
							red = ( 425UL * ( hue - 240 ) ) / 100;
 | 
				
			||||||
 | 
							green = 0;
 | 
				
			||||||
 | 
							blue = 255;
 | 
				
			||||||
 | 
						} else if ( hue < 360) {
 | 
				
			||||||
 | 
							red = 255;
 | 
				
			||||||
 | 
							green = 0;
 | 
				
			||||||
 | 
							blue = 255 - ( ( 425UL * ( hue - 300 ) ) / 100);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//Calculate saturation
 | 
				
			||||||
 | 
						uint8_t diff;
 | 
				
			||||||
 | 
						saturation = 100 - saturation;
 | 
				
			||||||
 | 
						diff = ( ( 255 - red ) * saturation ) / 100;
 | 
				
			||||||
 | 
						red += diff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						diff = ( ( 255 - green ) * saturation ) / 100;
 | 
				
			||||||
 | 
						green += diff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						diff = ( ( 255 - blue ) * saturation ) / 100;
 | 
				
			||||||
 | 
						blue += diff;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						//Calculate value
 | 
				
			||||||
 | 
						red = ( red * value ) / 100;
 | 
				
			||||||
 | 
						green = ( green * value ) / 100;
 | 
				
			||||||
 | 
						blue = ( blue * value ) / 100;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						led_set(lednum, red<<8, green<<8, blue<<8);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Write the data stored in the LED buffers via led_set().
 | 
					 * Write the data stored in the LED buffers via led_set().
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,6 +18,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
void led_init(void);
 | 
					void led_init(void);
 | 
				
			||||||
void led_set(uint8_t lednum, uint16_t red, uint16_t green, uint16_t blue);
 | 
					void led_set(uint8_t lednum, uint16_t red, uint16_t green, uint16_t blue);
 | 
				
			||||||
 | 
					void led_set_hsv(uint8_t lednum, uint16_t hue, uint8_t saturation, uint8_t value);
 | 
				
			||||||
void led_flush(void);
 | 
					void led_flush(void);
 | 
				
			||||||
void led_clear(void);
 | 
					void led_clear(void);
 | 
				
			||||||
void led_turn_all_on(void);
 | 
					void led_turn_all_on(void);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user