//#pragma GCC push_options //#pragma GCC optimize ("O0") #define F_CPU 8000000UL #include #include #include #include #define PATTERN_COUNT 4 #define attiny45 typedef struct { unsigned char r; unsigned char g; unsigned char b; int time_hold; }rgbval; volatile uint16_t ms; volatile uint16_t counts; void InitTimer0(void); void InitTimer1(void); void setrgb(unsigned int r,unsigned int g, unsigned int b); void InitInterrupts(void); void count(void) { //counts=0;//0..65535 counts++; if(counts>3) //1m //1ms { counts=0; if(ms<60000)//1 minute { ms++; } else { ms=0; } } } ISR(TIMER0_OVF_vect) { count(); } int main (void) { rgbval pattern[6][PATTERN_COUNT]={ {{0,0,0,100}, {0,0,0,100}, {0,0,0,100}, {0,0,0,100}}, {{1,1,1,10}, {1,1,153,20}, {200,50,39,10}, {204,255,153,20}}, {{1,50,50,10}, {10,255,0,10}, {80,200,0,20}, {200,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}}}; int i=0,i2=0,i3=0; 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--;} setrgb(r,g,b); //read timer evaluate time since read in 1ms steps //pre_delay = ms; //while((ms-pre_delay) <1000); _delay_ms(30); if(r == pattern[i2][i+1].r && g == pattern[i2][i+1].g && b == pattern[i2][i+1].b) break; } } } return 0; } void InitTimer0(void) { //#######Timer0-setup##### |Phase correct pwm TCCR0A = (2< /8 TCCR0B = (1<