private static Task ScheduleDevice(IPWMDevice motor) { int delayInMs = Convert.ToInt32(Math.Abs(motor.TargetDutyCycle) * REFRESH_PERIOD_IN_MS / 100.0); Task t; double absDutyCycle = Math.Abs(motor.TargetDutyCycle); t = absDutyCycle > 90 ? Task.Run(() => motor.TurnOn()) : absDutyCycle < 10 ? Task.Run(() => motor.TurnOff()) : TurnOnThenOffAfterDelay(delayInMs, motor); return(t); }
private static Task TurnOnThenOffAfterDelay(int delayInMs, IPWMDevice device) { device.TurnOn(); return(Task.Delay(delayInMs).ContinueWith((_) => device.TurnOff())); }