#define F_CPU 8000000UL #include #include #include #define PATTERN_COUNT 4 typedef struct { unsigned char r; unsigned char g; unsigned char b; int time_hold; }rgbval; volatile uint16_t ms; volatile int counts; ISR(TIMER0_OVF_vect) { count(); } void count(void) { //counts=0;//0..65535 counts++; if(counts>=31) { counts=0; if(ms<60000)//1 minute { ms++; } else { ms=0; } } } int main (void) { // (2) rgbval pattern[6][PATTERN_COUNT]={ {{0,0,0,10}, {0,0,0,10}, {0,0,0,10}, {0,0,0,10}}, {{1,1,1,10}, {1,1,153,20}, {200,50,39,10}, {204,255,153,20}}, {{1,1,1,10}, {10,255,0,10}, {1,1,255,20}, {1,200,1,20}}, {{1,1,5,10}, {1,1,255,10}, {1,1,5,10}, {1,1,255,10}}, {{252,102,3,10}, {161,67,47,10}, {118,120,74,10}, {83,120,74,20}}, {{87,119,122,10}, {95,87,122,10}, {52, 69, 56,10}, {83, 84, 72,10}}}; //rgbval *pattern=pattern1[0]; int i=0,i2=0,i3; int r,g,b = 0; int set=0; int input=0; uint16_t pre_delay=0; ms =0; counts = 0; //disable prescaler CLKPR = (1< pattern[i2][i+1].r) {r--;} if(g < pattern[i2][i+1].g) {g++;} if(g > pattern[i2][i+1].g) {g--;} if(b < pattern[i2][i+1].b) {b++;} if(b > pattern[i2][i+1].b) {b--;} OCR0A = g;//green OCR0B = r;//red OCR1B = b;//blue // :wq // _delay_ms(10); pre_delay = ms; // :wq while((ms-pre_delay) < pattern[i2][i+1].time_hold){}; if(r == pattern[i2][i+1].r && g == pattern[i2][i+1].g && b == pattern[i2][i+1].b) break; } } } return 0; }