Пример #1
0
static void rgb(uint8_t r, uint8_t g, uint8_t b)
{
	// Reset.
	SET_BIT_LO(PORTB, PIN);
	_delay_us(RESET);

	// Green
	for (uint8_t bit = 0; bit < 8; bit++) {
		if (g & 0x80) {
			SET_BIT_HI(PORT, PIN);
			_delay_ns(ON_HI);
			SET_BIT_LO(PORT, PIN);
			_delay_ns(ON_LO);
		} else {
			SET_BIT_HI(PORT, PIN);
			_delay_ns(OFF_HI);
			SET_BIT_LO(PORT, PIN);
			_delay_ns(OFF_LO);
		}
		g <<= 1;
	}

	// Red
	for (uint8_t bit = 0; bit < 8; bit++) {
		if (r & 0x80) {
			SET_BIT_HI(PORT, PIN);
			_delay_ns(ON_HI);
			SET_BIT_LO(PORT, PIN);
			_delay_ns(ON_LO);
		} else {
			SET_BIT_HI(PORT, PIN);
			_delay_ns(OFF_HI);
			SET_BIT_LO(PORT, PIN);
			_delay_ns(OFF_LO);
		}
		r <<= 1;
	}

	// Blue
	for (uint8_t bit = 0; bit < 8; bit++) {
		if (b & 0x80) {
			SET_BIT_HI(PORT, PIN);
			_delay_ns(ON_HI);
			SET_BIT_LO(PORT, PIN);
			_delay_ns(ON_LO);
		} else {
			SET_BIT_HI(PORT, PIN);
			_delay_ns(OFF_HI);
			SET_BIT_LO(PORT, PIN);
			_delay_ns(OFF_LO);
		}
		b <<= 1;
	}

}
Пример #2
0
// Drive the three pixels in an infinite loop.
void threepixeldemo(void)
{
    // Configure pin for output.
    SET_BIT_HI(DDR, PIN);
    SET_BIT_LO(PORT, PIN);

    // off->red, off->green, off->blue
    RGB_t rgb[3] = {{0,0,0},{0,0,0},{0,0,0}};
    WS2811RGB(rgb, ARRAYLEN(rgb));
    _delay_ms(PAUSE);
    for (int i = 0; i < 255; i++) {
        rgb[0].r += 1; 
        rgb[1].g += 1; 
        rgb[2].b += 1; 
        WS2811RGB(rgb, ARRAYLEN(rgb));
        _delay_ms(DELAY);
    }

    // loop forever.
    for (;;) {
        // red->yellow, green->cyan, blue->magenta    
        for (int i = 0; i < 255; i++) {
            rgb[0].g += 1; 
            rgb[1].b += 1; 
            rgb[2].r += 1; 
            WS2811RGB(rgb, ARRAYLEN(rgb));
            _delay_ms(DELAY);
        }
        // yellow->green, cyan->blue, magenta->white
        for (int i = 0; i < 255; i++) {
            rgb[0].r -= 1; 
            rgb[1].g -= 1; 
            rgb[2].g += 1; 
            WS2811RGB(rgb, ARRAYLEN(rgb));
            _delay_ms(DELAY);
        }
        // green->cyan, blue->magenta, white->red
        for (int i = 0; i < 255; i++) {
            rgb[0].b += 1; 
            rgb[1].r += 1; 
            rgb[2].g -= 1; 
            rgb[2].b -= 1; 
            WS2811RGB(rgb, ARRAYLEN(rgb));
            _delay_ms(DELAY);
        }
        // cyan->blue, magenta->white, red->yellow
        for (int i = 0; i < 255; i++) {
            rgb[0].g -= 1;
            rgb[1].g += 1;
            rgb[2].g += 1;
            WS2811RGB(rgb, ARRAYLEN(rgb));
            _delay_ms(DELAY);
        }
        // blue->magenta, white->red, yellow->green
        for (int i = 0; i < 255; i++) {
            rgb[0].r += 1;
            rgb[1].g -= 1;
            rgb[1].b -= 1;
            rgb[2].r -= 1;
            WS2811RGB(rgb, ARRAYLEN(rgb));
            _delay_ms(DELAY);
        }
        // magenta->white, red->yellow, green->cyan
        for (int i = 0; i < 255; i++) {
            rgb[0].g += 1;
            rgb[1].g += 1;
            rgb[2].b += 1;
            WS2811RGB(rgb, ARRAYLEN(rgb));
            _delay_ms(DELAY);
        }
        // white->red, yellow->green, cyan->blue
        for (int i = 0; i < 255; i++) {
            rgb[0].b -= 1;
            rgb[0].g -= 1;
            rgb[1].r -= 1;
            rgb[2].g -= 1;
            WS2811RGB(rgb, ARRAYLEN(rgb));
            _delay_ms(DELAY);
        }
    }
}
Пример #3
0
int main(int argc, const char *argv[])
{

	// Init system clock, disable WDT...
	clock_prescale_set(clock_div_1);
	MCUSR &= ~(1 << WDRF);
	wdt_disable();
	
	// Configure pin
	SET_BIT_HI(DDR, PIN);
	// Off
	rgb(0, 0, 0);

	for (;;) {
		// Red
		rgb(255, 0, 0);
		_delay_ms(PAUSE);
		// Yellow
		rgb(255, 255, 0);
		_delay_ms(PAUSE);
		// Green
		rgb(0, 255, 0);
		_delay_ms(PAUSE);
		// Cyan
		rgb(0, 255, 255);
		_delay_ms(PAUSE);
		// Blue
		rgb(0, 0, 255);
		_delay_ms(PAUSE);
		// Magenta
		rgb(255, 0, 255);
		_delay_ms(PAUSE);
		// White
		rgb(255, 255, 255);
		_delay_ms(PAUSE);

		// Off
		rgb(0, 0, 0);
		_delay_ms(PAUSE);

		// Red up
		for (int i = 0; i <= 255; i++) {
			rgb(i, 0, 0);
			_delay_ms(DELAY);
		}

		// Red -> yellow	
		for (int i = 0; i <= 255; i++) {
			rgb(255, i, 0);
			_delay_ms(DELAY);
		}
		// Yellow -> green
		for (int i = 0; i <= 255; i++) {
			rgb(255 - i, 255, 0);
			_delay_ms(DELAY);
		}
		// Green -> cyan
		for (int i = 0; i <= 255; i++) {
			rgb(0, 255, i);
			_delay_ms(DELAY);
		}
		// Cyan -> blue
		for (int i = 0; i <= 255; i++) {
			rgb(0, 255 - i, 255);
			_delay_ms(DELAY);
		}
		// Blue -> magenta
		for (int i = 0; i <= 255; i++) {
			rgb(i, 0, 255);
			_delay_ms(DELAY);
		}
		// Magenta -> white
		for (int i = 0; i <= 255; i++) {
			rgb(255, i, 255);
			_delay_ms(DELAY);
		}

		// White -> Off
		for (int i = 0; i <= 255; i++) {
			rgb(255 - i, 255 - i, 255 - i);
			_delay_ms(DELAY);
		}

		_delay_ms(PAUSE);
	}
}