akoimeexx icon

RGB Cycler without sin()

akoimeexx | PRO | 09/07/11 01:34:54 PM UTC | 0 ⭐ | 267 👁️ | Never ⏰ | []
C |

1.08 KB

|

None

|

0 👍

/

0 👎

/**
 * 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