diff --git a/main.c b/main.c index 2817f07..9c20380 100644 --- a/main.c +++ b/main.c @@ -1,6 +1,7 @@ #define F_CPU 8000000UL #include #include +#include #define PATTERN_COUNT 4 @@ -11,31 +12,68 @@ typedef struct 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,0}, {0,0,0,0}, {0,0,0,0}, {0,0,0,0}}, - {{1,1,1,1}, {1,1,153,2}, {200,50,39,1}, {204,255,153,2}}, - /*rgbval pattern2[PATTERN_COUNT]=*/{{1,1,1,1}, {10,255,0,1}, {1,1,255,2}, {1,200,1,2}}, - /*rgbval pattern3[PATTERN_COUNT]=*/{{1,1,5,1}, {1,1,255,1}, {1,1,5,1}, {1,1,255,1}}, - {{252,102,3,1}, {161,67,47,1}, {118,120,74,1}, {83,120,74,2}}, - {{87,119,122,1}, {95,87,122,1}, {52, 69, 56,1}, {83, 84, 72,1}}}; + 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; -//system_clock prescaler - + 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 - _delay_ms(10); + } + + //Pattern handling + + + + + if(r < pattern[i2][i+1].r) {r++;} + if(r > 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; } } @@ -106,3 +160,4 @@ int main (void) { // (2) return 0; } +