   for(uint8_t y=0; y<ROWS; ++y)
     for(uint8_t x=0; x<COLS; ++x){
       for(uint8_t i=0; i<3; ++i)
-        colors[y][x][i] = (uint8_t) (colors[y][x][i]*19.0/20.0 + new_colors[y][x][i]/20.0);
+        colors[y][x][i] = (uint8_t) (((uint16_t) colors[y][x][i]*19 + new_colors[y][x][i])/20);
       
       leds[xy2i(x,y)] = CRGB(colors[y][x][0],colors[y][x][1],colors[y][x][2]);
     }


CRGB leds[NUM_LEDS];

#define LOOP_TIME 50
#define UPDATE_TIME 150

#define _R 0

// The LED string snakes through the grid, so every row the positive x direction switches
uint8_t xy2i(uint8_t x, uint8_t y){
  if(y%2){
    // It's an uneven row: x should be reversed---or subtracted from this line's
    //last index, which is the next line's first minus 1
    return (COLS*(y+1) - 1) - x;
  } else {
    // Even row: simply do COLS*y + x
    return COLS*y + x;
