//red[] = {}; //blue[] = {}; //grenn[] = {}; volatile unsigned int red = ((0x0ff0 & 0x1fff) | 0x0001) ; volatile unsigned int blue = ((0x0000 & 0x1fff) | 0x0001); volatile unsigned int green = ((0x0000 & 0x1fff) | 0x0001); volatile unsigned int start = 0x1fff; volatile byte i = 0; volatile byte j = 0; volatile unsigned int k = 1; void setup() { // put your setup code here, to run once: TCCR2A = 0x83; // fast pwm, oc2a output, clear on match TCCR2B = 0x02; // no prescaler TIMSK2 = 0x01; // turn on overflow interrupt pinMode(11, OUTPUT); // set oc2a to output //pinMode(12, OUTPUT); // set 12 to out for testing } void loop() { // put your main code here, to run repeatedly: } ISR(TIMER2_OVF_vect) { if (i == 0) { if ((start & k) == 0) OCR2A = 0x3f; else OCR2A = 0xbf; k <<= 1; if (k == 0) { k = 1; i++; } } else { if (j == 0) { if ((red & k) == 0) OCR2A = 0x3f; else OCR2A = 0xbf; } else if (j == 1) { if ((green & k) == 0) OCR2A = 0x3f; else OCR2A = 0xbf; } else { if ((blue & k) == 0) OCR2A = 0x3f; else OCR2A = 0xbf; } k <<= 1; if (k == 0) { k = 1; j++; if (j == 3) { j = 0; red = random(0x7fff); red = ((red & 0x1ff7) | 0x0001); //blue = ((random(0x7fff) & 0x1fff) | 0x0001); //green = ((random(0x7fff) & 0x1fff) | 0x0001); i++; if (i == 51) { i = 0; //red += 0x0010; //red = ((red & 0x1fff) | 0x0001) ; } } } } }