Exemplo n.º 1
0
	/*Copy colors to dmx storage*/
	for(uint16_t i=0;i<DMX_EFFECT_RAINBOW_CHANNELS+(DMX_EFFECT_RAINBOW_MARGIN*DMX_EFFECT_RAINBOW_CHANNELS);i++)
	{
	    
	
#if (DMX_EFFECT_RAINBOW_MARGIN > 0)
		for(uint8_t j=0;j<DMX_EFFECT_RAINBOW_MARGIN;j++)
		{
			set_dmx_channel(DMX_EFFECT_RAINBOW_UNIVERSE, DMX_EFFECT_RAINBOW_OFFSET+i,DMX_EFFECT_RAINBOW_MARGIN_FILL);
			i++;
		}
#endif 

		int pos = i + (i - 1 ) / 15;
			
		if(i%(DMX_EFFECT_RAINBOW_MARGIN*3+3) == DMX_EFFECT_RAINBOW_MARGIN)
			set_dmx_channel(DMX_EFFECT_RAINBOW_UNIVERSE,DMX_EFFECT_RAINBOW_OFFSET+pos,color_r);
		if(i%(DMX_EFFECT_RAINBOW_MARGIN*3+3) == 2*DMX_EFFECT_RAINBOW_MARGIN+1)
			set_dmx_channel(DMX_EFFECT_RAINBOW_UNIVERSE,DMX_EFFECT_RAINBOW_OFFSET+pos,color_g);
		if(i%(DMX_EFFECT_RAINBOW_MARGIN*3+3) == 3*DMX_EFFECT_RAINBOW_MARGIN+2)
			set_dmx_channel(DMX_EFFECT_RAINBOW_UNIVERSE,DMX_EFFECT_RAINBOW_OFFSET+pos,color_b);
		
	}
}
#endif /*Rainbow end*/
#ifdef DMX_EFFECT_RANDOM
uint8_t random_enabled = DMX_EFFECT_DISABLED;
uint8_t random_channels[DMX_EFFECT_RANDOM_CHANNELS] = {0};
void dmx_effect_random_colors_gen(void)
{
	uint8_t red,green,blue;
	#ifndef DMX_EFFECT_RANDOM_ALL
		red=rand()%256;
		green=rand()%256;
		blue=rand()%256;
	#endif
	for(uint8_t i=0;i<DMX_EFFECT_RANDOM_CHANNELS;i++)
	{
		#ifdef DMX_EFFECT_RANDOM_ALL
		if(i%3 == 0)
		{
			red=rand()%256;
			green=rand()%256;
			blue=rand()%256;
		}	
		#endif
		if(i%3 == 0)
			random_channels[i]=red;
		if(i%3 == 1)
			random_channels[i]=green;
		if(i%3 == 2)
			random_channels[i]=blue;
		
	}
}
void dmx_effect_random_colors_show()
{
	for(uint8_t i=0;i<DMX_EFFECT_RANDOM_CHANNELS+DMX_EFFECT_RANDOM_CHANNELS*DMX_EFFECT_RANDOM_MARGIN;i++)
	{
		#if (DMX_EFFECT_RAINBOW_MARGIN > 0)
		for(uint8_t j=0;j<DMX_EFFECT_RANDOM_MARGIN;j++)
		{
			set_dmx_channel(DMX_EFFECT_RANDOM_UNIVERSE, DMX_EFFECT_RANDOM_OFFSET+i,DMX_EFFECT_RANDOM_MARGIN_FILL);
			i++;
		}
		#endif 
		uint8_t tmp_value=get_dmx_channel(DMX_EFFECT_RANDOM_UNIVERSE,DMX_EFFECT_RANDOM_OFFSET+i);
		uint8_t target_value=random_channels[(i+1)/(DMX_EFFECT_RANDOM_MARGIN+1)-1];
		if(tmp_value > target_value)
			set_dmx_channel(DMX_EFFECT_RANDOM_UNIVERSE,DMX_EFFECT_RANDOM_OFFSET+i,tmp_value-1);
		else if (tmp_value < target_value)
			set_dmx_channel(DMX_EFFECT_RANDOM_UNIVERSE,DMX_EFFECT_RANDOM_OFFSET+i,tmp_value+1);
		//else == : we do nothing, everything's set

	}
}
#endif /*Random end*/
void dmx_effect_init()
{
#ifdef DMX_EFFECT_RAINBOW
	color_r = 255;
	color_g = 128;
	color_b = 0;

	set_dmx_channel(DMX_EFFECT_RAINBOW_UNIVERSE,DMX_EFFECT_RAINBOW_OFFSET+3, color_r);
	set_dmx_channel(DMX_EFFECT_RAINBOW_UNIVERSE,DMX_EFFECT_RAINBOW_OFFSET+4, color_g);
	set_dmx_channel(DMX_EFFECT_RAINBOW_UNIVERSE,DMX_EFFECT_RAINBOW_OFFSET+5, color_b);
#endif
}
Exemplo n.º 2
0
void dmx_effect_rainbow_colors(void)
{
	static uint8_t rainbow_step = 0;
	static uint16_t rainbow_delay = 0;
	if (rainbow_delay++ <= (RAINBOW_DELAY / DMX_STORAGE_CHANNELS)) return;
	rainbow_delay = 0;
	switch(rainbow_step) {
		case 0:
			if (color_g > 1) {
				color_g--;
				color_b++;
			} else {
				rainbow_step++;
			}
			break;
		case 1:
			if (color_r > 1) {
				color_r--;
				color_g++;
			} else {
				rainbow_step++;
			}
			break;
		case 2:
			if (color_b > 1) {
				color_b--;
				color_r++;
			} else {
				rainbow_step = 0;
			}
			break;
	}
	/*Copy colors to dmx storage*/
	for(uint16_t i=0;i<DMX_EFFECT_RAINBOW_CHANNELS+(DMX_EFFECT_RAINBOW_MARGIN*DMX_EFFECT_RAINBOW_CHANNELS);i++)
	{
#if (DMX_EFFECT_RAINBOW_MARGIN > 0)
		for(uint8_t j=0;j<DMX_EFFECT_RAINBOW_MARGIN;j++)
		{
			set_dmx_channel(DMX_EFFECT_RAINBOW_UNIVERSE, DMX_EFFECT_RAINBOW_OFFSET+i,DMX_EFFECT_RAINBOW_MARGIN_FILL);
			i++;
		}
#endif 
		if(i%(DMX_EFFECT_RAINBOW_MARGIN*3+3) == DMX_EFFECT_RAINBOW_MARGIN)
			set_dmx_channel(DMX_EFFECT_RAINBOW_UNIVERSE,DMX_EFFECT_RAINBOW_OFFSET+i,color_r);
		if(i%(DMX_EFFECT_RAINBOW_MARGIN*3+3) == 2*DMX_EFFECT_RAINBOW_MARGIN+1)
			set_dmx_channel(DMX_EFFECT_RAINBOW_UNIVERSE,DMX_EFFECT_RAINBOW_OFFSET+i,color_g);
		if(i%(DMX_EFFECT_RAINBOW_MARGIN*3+3) == 3*DMX_EFFECT_RAINBOW_MARGIN+2)
			set_dmx_channel(DMX_EFFECT_RAINBOW_UNIVERSE,DMX_EFFECT_RAINBOW_OFFSET+i,color_b);
	}
}
Exemplo n.º 3
0
int16_t parse_cmd_dmx_set_channels(char *cmd, char *output, uint16_t len)
{
	uint16_t startchannel=0, universe=0, value=0, channelcounter=0,i=0,blankcounter=0;
	if (cmd[0]!=0) {
		sscanf_P(cmd, PSTR("%u %u"), &universe,&startchannel);
		if (startchannel >= DMX_STORAGE_CHANNELS)
			return ECMD_ERR_PARSE_ERROR;
		if (universe >= DMX_STORAGE_UNIVERSES)
			return ECMD_ERR_PARSE_ERROR;
		while(blankcounter<3)
		{	
			if(cmd[i] == ' ')
				blankcounter++;
			i++;
		}
		while (cmd[i]!='\0'){           //read and write all values
			sscanf_P(cmd+i, PSTR(" %u"),&value);
			if(set_dmx_channel(universe,startchannel+channelcounter,value))
				return ECMD_ERR_WRITE_ERROR;
			channelcounter++;
			do{                         //search for next space
				i++;
				if(cmd[i]=='\0') break;
			}while(cmd[i]!=' ');
		}

		return ECMD_FINAL_OK;
	}
	else
		return ECMD_ERR_PARSE_ERROR;
}
Exemplo n.º 4
0
void dmx_effect_random_colors_show()
{
	for(uint8_t i=0;i<DMX_EFFECT_RANDOM_CHANNELS+DMX_EFFECT_RANDOM_CHANNELS*DMX_EFFECT_RANDOM_MARGIN;i++)
	{
		#if (DMX_EFFECT_RAINBOW_MARGIN > 0)
		for(uint8_t j=0;j<DMX_EFFECT_RANDOM_MARGIN;j++)
		{
			set_dmx_channel(DMX_EFFECT_RANDOM_UNIVERSE, DMX_EFFECT_RANDOM_OFFSET+i,DMX_EFFECT_RANDOM_MARGIN_FILL);
			i++;
		}
		#endif 
		uint8_t tmp_value=get_dmx_channel(DMX_EFFECT_RANDOM_UNIVERSE,DMX_EFFECT_RANDOM_OFFSET+i);
		uint8_t target_value=random_channels[(i+1)/(DMX_EFFECT_RANDOM_MARGIN+1)-1];
		if(tmp_value > target_value)
			set_dmx_channel(DMX_EFFECT_RANDOM_UNIVERSE,DMX_EFFECT_RANDOM_OFFSET+i,tmp_value-1);
		else if (tmp_value < target_value)
			set_dmx_channel(DMX_EFFECT_RANDOM_UNIVERSE,DMX_EFFECT_RANDOM_OFFSET+i,tmp_value+1);
		//else == : we do nothing, everything's set

	}
}
Exemplo n.º 5
0
int16_t parse_cmd_dmx_set_channel(char *cmd, char *output, uint16_t len)
{
	uint16_t channel=0, ret=0,value=0, universe=0;
	if (cmd[0]!=0) ret = sscanf_P(cmd, PSTR("%u %u %u"), &universe,&channel,&value);
	if (ret == 3)
	{
		if (channel >= DMX_STORAGE_CHANNELS)
			return ECMD_ERR_PARSE_ERROR;
		if (universe >= DMX_STORAGE_UNIVERSES)
			return ECMD_ERR_PARSE_ERROR;
		if(set_dmx_channel(universe,channel,value))
			return ECMD_ERR_WRITE_ERROR;
		else
			return ECMD_FINAL_OK;
	}
	else
		return ECMD_ERR_PARSE_ERROR;
}