/// <summary> /// http://en.wikipedia.org/wiki/Pulse-width_modulation /// </summary> /// <param name="gpio"></param> /// <param name="frequency"></param> /// <param name="duration"></param> public static void PWM(this GpioApi gpio, int on, int off, int duration) { gpio.DigitalWrite(PinState.Low); var sw = Stopwatch.StartNew(); while (sw.ElapsedMilliseconds < duration) { gpio.DigitalWrite(PinState.High); //Gpio.SleepMicro(on*1000); System.Threading.Thread.Sleep(on); gpio.DigitalWrite(PinState.Low); //Gpio.SleepMicro(off*1000); System.Threading.Thread.Sleep(off); } sw.Stop(); }
public static void ToneEx(this GpioApi gpio, int frequency, int duration) { gpio.DigitalWrite(PinState.Low); var waitTimeMicroS = (1000.0 * 1000.0 / frequency); var sw = Stopwatch.StartNew(); using (var tp = new TimePeriod((int)waitTimeMicroS)) { while (sw.ElapsedMilliseconds < duration) { gpio.DigitalWrite(PinState.High); TimePeriod.Sleep((int)(waitTimeMicroS / 1000.0)); gpio.DigitalWrite(PinState.Low); TimePeriod.Sleep((int)(waitTimeMicroS / 1000.0)); } } sw.Stop(); }
public static void Tone2(this GpioApi gpio, int rate, int duration) { uint i = 0; //gpio.DigitalWrite(false); var sw = Stopwatch.StartNew(); while (sw.ElapsedMilliseconds < duration) { var wait = rate * 1000 * Math.Sin(i); //var wait = rate*1000*Math.Cos(i); //var wait = Math.Abs(rate * 1000 * Math.Cos(i) * Math.Sin(i)); //var wait = Math.Abs(rate*1000*Math.Tan(i)); //Console.Write("{0} ", (int) wait); gpio.DigitalWrite(PinState.High); WasteTime((int)wait); gpio.DigitalWrite(PinState.Low); WasteTime((int)wait); i++; } sw.Stop(); }