예제 #1
0
        /// <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();
        }
예제 #2
0
        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();
        }
예제 #3
0
        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();
        }