struct sLED{
uint8_t color;
uint8_t value;
};
struct sLED _RGB[3] = {{0,0},{1,0},{2,0}};
TIMER_IRQ( void ){
// read _RGB
// set/reset GPIOs
// calc next step
// configTimer
}
void sort( struct sLED *psLED, uint8_t size ){
uitn8_t i, j;
struct sLED tmp;
for( i = 0 ; i < size-1 ; i++ ){
for ( j = 0 ; j < size-1 ; j++ ){
if( psLED[j].value < psLED[j+1].value ){
tmp = arreglo[j+1];
arreglo[j+1] = arreglo[j];
arreglo[j] = tmp;
}
}
}
return;
}
int main( void ){
struct sLED RGB[3];
configTIMER( 10_mS );
configGPIO( PIN_RED | PIN_GREEN | PIN_BLUE );
while(1){
setColor( &RGB );
sort( &RGB, 3 );
TimerIRQ( disable ); // Con estas 3 lineas y la variable global _RGB evitamos que la TIMER_IRQ
_RGB = RGB; // lea un valor erroneo si se produce mientras modifiamos el valor de RGB
TimerIRQ( enable ); //
delay( 100_mS );
}
return 0;
}