Но написано что-то странное. PWM на Брезенхэме устроен тривиально. Есть двоичный регистр из N бит. В каждом цикле прибавляем к двоичному регистру значение переменной, задающей мощность - тоже N бит. Если при этом возникает перенос из старшео разряда - включаем на время этого цикла нагреватель. Если не возникает - отключаем. При этом максимальная получаемая мощность на один дискрет меньше 100%, если нужна еще и 100% ммощность - нужно прибавлять сразу флаг переноса, то есть при 100% мощности нужно ничего не прибавлять к счетчику, но включить нагрев. Все.
static int counter;
const int carryMask = (1 << N);
const int valueMask = carryMask - 1;
counter += power;
pwmOutput = (counter & carryMask) != 0;
counter &= valueMask;