/**
* Create our rgb structure and declare it below as a global
*/
typedef struct {
unsigned char red;
unsigned char green;
unsigned char blue;
} rgb;
rgb channels = { 255, 0, 0 };
/**
* RGB Rainbow sequencing function. 100% dependent on clock speed.
* Alternative to including math.h and using sin(), as doubles and floats
* increase the size of the compiled avr firmware.
*/
void rainbow_sequence(void) {
//Fade from blue to red
if(channels.blue > 0 && channels.red == 255 && channels.green == 0) {
channels.blue--;
}
if(channels.blue == 255 && channels.red < 255 && channels.green == 0) {
channels.red++;
}
//Fade from green to blue
if(channels.green > 0 && channels.blue == 255 && channels.red == 0) {
channels.green--;
}
if(channels.green == 255 && channels.blue < 255 && channels.red == 0) {
channels.blue++;
}
// Fade from red to green
if(channels.red > 0 && channels.green == 255 && channels.blue == 0) {
channels.red--;
}
if(channels.red == 255 && channels.green < 255 && channels.blue == 0) {
channels.green++;
}
}
Comments