/////
// (c) 2015 by Hans-Peter Bock
///
#include <avr/pgmspace.h>
#define redPin (3)
#define greenPin (5)
#define bluePin (6)
void setup() {
}
const uint8_t brightness[][4] PROGMEM = {
// duration, red, green, blue
{ 1, 1, 1, 1},
{ 11, 2, 2, 2},
{ 7, 3, 3, 3},
{ 4, 4, 4, 4},
{ 1, 5, 4, 4},
{ 1, 5, 5, 5},
{ 1, 6, 5, 5},
{ 1, 6, 6, 6},
{ 1, 7, 7, 7},
{ 1, 8, 7, 7},
{ 1, 8, 8, 8},
{ 1, 9, 8, 8},
{ 1, 11, 9, 9},
{ 1, 13, 11, 11},
{ 1, 13, 11, 13},
{ 1, 16, 13, 13},
{ 1, 19, 16, 16},
{ 1, 23, 19, 19},
{ 2, 27, 23, 23},
{ 1, 32, 27, 27},
{ 1, 38, 32, 32},
{ 1, 45, 32, 38},
{ 1, 54, 38, 38},
{ 1, 64, 45, 45},
{ 1, 64, 54, 54},
{ 1, 76, 64, 64},
{ 1, 90, 64, 76},
{ 1, 107, 76, 76},
{ 1, 128, 90, 90},
{ 1, 152, 107, 107},
{ 1, 180, 128, 128},
{ 20, 152, 128, 128},
{ 3, 152, 107, 128},
{ 1, 152, 107, 107},
{ 21, 128, 107, 107},
{ 1, 128, 107, 90},
{ 6, 128, 90, 90},
{ 6, 107, 90, 90},
{ 4, 107, 90, 76},
{ 8, 90, 76, 76},
{ 4, 90, 76, 64},
{ 9, 76, 76, 64},
//...
{ 3, 32, 128, 214},
{ 47, 32, 107, 214},
{ 2, 32, 107, 180},
{ 1, 1, 1, 1}
};
void loop() {
int elements = sizeof(brightness) / sizeof(brightness[0]);
for (int i=0; i < elements; i++) {
int count = pgm_read_byte(&(brightness[i][0]));
int red = pgm_read_byte(&(brightness[i][1]));
int green = pgm_read_byte(&(brightness[i][2]));
int blue = pgm_read_byte(&(brightness[i][3]));
analogWrite(redPin, red);
analogWrite(greenPin, green);
analogWrite(bluePin, blue);
for (int j=count; j>0; j--)
delay(40);
}
}