Ponlo en mayúsculas
TIMSK2 = 1<<TOIE2;
Cuando tengas un error indica el error porque de lo contrario nosotros tendremos que compilar el código para saberlo.
He reorganizado algunas cosas porque para mi compilador arrojaba algunos errores extra como por ejemplo que el procedimiento Multiplex() no existe.
Este compila
unsigned char Prescaler = 0;
#define PrescalerOverflowValue 4
unsigned char CurrentLED = 1;
unsigned char LEDValues[8][3];
bool LEDMoveDir[8][3];
int Red, Green, Blue;
int Hue1, Hue2, Hue3, Hue4, Hue5, Hue6, Hue7, Hue8, Saturation, Value;
void Multiplex(void) {
PORTD &= 0b00000011; // Control pin 0-5
PORTB &= 0b11101110; // Control pin 6-7
analogWrite(9, 255-LEDValues[CurrentLED][0]);
analogWrite(10, 255-LEDValues[CurrentLED][1]);
analogWrite(11, 255-LEDValues[CurrentLED][2]);
switch (CurrentLED)
{
case 0:
//digitalWrite(2, 1); // Turn on LED 1
PORTD |= 0b00000100;
break;
case 1:
//digitalWrite(3, 1); // Turn on LED 1
PORTD |= 0b00001000;
break;
case 2:
//digitalWrite(4, 1); // Turn on LED 1
PORTD |= 0b00010000;
break;
case 3:
//digitalWrite(5, 1); // Turn on LED 1
PORTD |= 0b00100000;
break;
case 4:
//digitalWrite(6, 1); // Turn on LED 1
PORTD |= 0b01000000;
break;
case 5:
//digitalWrite(7, 1); // Turn on LED 1
PORTD |= 0b10000000;
break;
case 6:
//digitalWrite(8, 1); // Turn on LED 1
PORTB |= 0b00000001;
break;
case 7:
//digitalWrite(12, 1); // Turn on LED 1
PORTB |= 0b00010000;
break;
}
CurrentLED++;
if (CurrentLED > 7)
CurrentLED = 0;
}
void setPwmFrequency(int pin, int divisor) {
byte mode;
if(pin == 5 || pin == 6 || pin == 9 || pin == 10) {
switch(divisor) {
case 1: mode = 0x01; break;
case 8: mode = 0x02; break;
case 64: mode = 0x03; break;
case 256: mode = 0x04; break;
case 1024: mode = 0x05; break;
default: return;
}
if(pin == 5 || pin == 6) {
TCCR0B = TCCR0B & 0b11111000 | mode;
} else {
TCCR1B = TCCR1B & 0b11111000 | mode;
}
} else if(pin == 3 || pin == 11) {
switch(divisor) {
case 1: mode = 0x01; break;
case 8: mode = 0x02; break;
case 32: mode = 0x03; break;
case 64: mode = 0x04; break;
case 128: mode = 0x05; break;
case 256: mode = 0x06; break;
case 1024: mode = 0x7; break;
default: return;
}
TCCR2B = TCCR2B & 0b11111000 | mode;
}
}
ISR(TIMER2_OVF_vect)
{
if (Prescaler < PrescalerOverflowValue)
Prescaler++;
else {
Prescaler = 0;
Multiplex();
}
}
void setup(void) {
//Set the pin we want the ISR to toggle for output.
pinMode(2,OUTPUT);
pinMode(3,OUTPUT);
pinMode(4,OUTPUT);
pinMode(5,OUTPUT);
pinMode(6,OUTPUT);
pinMode(7,OUTPUT);
pinMode(8,OUTPUT);
pinMode(12,OUTPUT);
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
digitalWrite(2, 0); // Turn off LED 4
digitalWrite(3, 0); // Turn off LED 4
digitalWrite(4, 0); // Turn off LED 4
digitalWrite(5, 0); // Turn off LED 4
digitalWrite(6, 0); // Turn off LED 4
digitalWrite(7, 0); // Turn off LED 4
digitalWrite(8, 0); // Turn off LED 4
digitalWrite(12, 0); // Turn off LED 4
digitalWrite(9, 1);
digitalWrite(10, 1);
digitalWrite(11, 1);
setPwmFrequency(9, 8);
setPwmFrequency(10, 8);
setPwmFrequency(11, 8);
analogWrite(9, 255);
analogWrite(10, 255);
analogWrite(11, 255);
LEDValues[0][0] = 100;
LEDValues[0][1] = 0;
LEDValues[0][2] = 20;
LEDValues[1][0] = 0;
LEDValues[1][1] = 30;
LEDValues[1][2] = 144;
LEDValues[2][0] = 66;
LEDValues[2][1] = 245;
LEDValues[2][2] = 3;
LEDValues[3][0] = 30;
LEDValues[3][1] = 30;
LEDValues[3][2] = 200;
//Start up the serial port
Serial.begin(19200);
//Signal the program start
Serial.println("RGB LED Controller");
// Enable Timer 2 interrupt (also used for PWM though)
// This interrupt is divided by a prescaler, and takes care of the multiplexing
TIMSK2 = 1<<TOIE2;
Hue1 = 0;
Hue2 = 10;
Hue3 = 20;
Hue4 = 30;
Hue5 = 40;
Hue6 = 50;
Hue7 = 60;
Hue8 = 70;
Saturation = 255;
Value = 255;
}
unsigned char incomingByte = 0;
unsigned char getNumPos = 0;
unsigned char tempNum = 0;
unsigned char LEDSetNum = 0;
unsigned char LEDSetColor = 0;
void loop(void)
{
delay(20);
HSVtoRGB(&Red, &Green, &Blue, Hue1, Saturation, Value);
LEDValues[0][0] = Red;
LEDValues[0][1] = Green;
LEDValues[0][2] = Blue;
Hue1++;
if (Hue1 > 359)
Hue1 = 0;
HSVtoRGB(&Red, &Green, &Blue, Hue2, Saturation, Value);
LEDValues[1][0] = Red;
LEDValues[1][1] = Green;
LEDValues[1][2] = Blue;
Hue2++;
if (Hue2 > 359)
Hue2 = 0;
HSVtoRGB(&Red, &Green, &Blue, Hue3, Saturation, Value);
LEDValues[2][0] = Red;
LEDValues[2][1] = Green;
LEDValues[2][2] = Blue;
Hue3++;
if (Hue3 > 359)
Hue3 = 0;
HSVtoRGB(&Red, &Green, &Blue, Hue4, Saturation, Value);
LEDValues[3][0] = Red;
LEDValues[3][1] = Green;
LEDValues[3][2] = Blue;
Hue4++;
if (Hue4 > 359)
Hue4 = 0;
HSVtoRGB(&Red, &Green, &Blue, Hue5, Saturation, Value);
LEDValues[4][0] = Red;
LEDValues[4][1] = Green;
LEDValues[4][2] = Blue;
Hue5++;
if (Hue5 > 359)
Hue5 = 0;
HSVtoRGB(&Red, &Green, &Blue, Hue6, Saturation, Value);
LEDValues[5][0] = Red;
LEDValues[5][1] = Green;
LEDValues[5][2] = Blue;
Hue6++;
if (Hue6 > 359)
Hue6 = 0;
HSVtoRGB(&Red, &Green, &Blue, Hue7, Saturation, Value);
LEDValues[6][0] = Red;
LEDValues[6][1] = Green;
LEDValues[6][2] = Blue;
Hue7++;
if (Hue7 > 359)
Hue7 = 0;
HSVtoRGB(&Red, &Green, &Blue, Hue8, Saturation, Value);
LEDValues[7][0] = Red;
LEDValues[7][1] = Green;
LEDValues[7][2] = Blue;
Hue8++;
if (Hue8 > 359)
Hue8 = 0;
}
void HSVtoRGB( int *r, int *g,int *b, int h, int s, int v )
{
int f;
long p, q, t;
if( s == 0 )
{
*r = *g = *b = v;
return;
}
f = ((h%60)*255)/60;
h /= 60;
p = (v * (256 - s)) / 256;
q = (v * ( 256 - (s * f)/256 ))/256;
t = (v * ( 256 - (s * ( 256 - f ))/256))/256;
switch( h ) {
case 0:
*r = v;
*g = t;
*b = p;
break;
case 1:
*r = q;
*g = v;
*b = p;
break;
case 2:
*r = p;
*g = v;
*b = t;
break;
case 3:
*r = p;
*g = q;
*b = v;
break;
case 4:
*r = t;
*g = p;
*b = v;
break;
default:
*r = v;
*g = p;
*b = q;
break;
}
}
Pero fueron solo algunos segundos de acomodar las cosas.