const tps = 47; const fade_ms = 500; // ms const current_vals = [10, 100, 45]; const target_vals = [255, 255, 0]; var fade_increments = [0, 0, 0]; var fade_ticks = Math.ceil(fade_ms / tps); // 32 var val_iterator = 0; var tick_iterator = 0; console.log(`fade_ticks: ${fade_ticks}`); while (val_iterator < 3) { fade_increments[val_iterator] = -((current_vals[val_iterator] - target_vals[val_iterator]) / fade_ticks); val_iterator++; } val_iterator = 0; console.log(`increments: ${fade_increments}`); while (tick_iterator < fade_ticks) { while (val_iterator < 3) { current_vals[val_iterator] += fade_increments[val_iterator]; val_iterator++; } val_iterator = 0; console.log(current_vals.map((val) => Math.round(val))); tick_iterator++; }