private async void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
        {
            if (LightningProvider.IsLightningEnabled)
            {
                LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();

                var pwmControllers = await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider());

                var pwmController = pwmControllers[1]; // the on-device controller
                pwmController.SetDesiredFrequency(50); // try to match 50Hz


                internetLed = new InternetLed();

                _pin18 = pwmController.OpenPin(18);

                while (true)
                {
                    await internetLed.GetThrottleFromWeb();

                    double test = internetLed.getThrottle() / 100.0;

                    _pin18.SetActiveDutyCyclePercentage(internetLed.getThrottle() / 100.0);
                    _pin18.Start();


                    await Task.Delay(200);
                }
            }
        }
Пример #2
0
 public PwmMotor(PwmController pwmController, int pwmPin, int direction1Pin, int direction2Pin) : base(pwmController, pwmPin)
 {
     _directionPin1 = PwmController.OpenPin(direction1Pin);
     _directionPin2 = PwmController.OpenPin(direction2Pin);
     _directionPin1.Start();
     _directionPin2.Start();
 }
Пример #3
0
 private void SetCyclePercentage(PwmPin pin, double value)
 {
     if (value >= 0 && value <= 1)
     {
         pin.SetActiveDutyCyclePercentage(value);
     }
 }
Пример #4
0
 /// <summary>
 ///
 /// </summary>
 /// <returns></returns>
 private async Task InitBuzzer()
 {
     pwmController = (await PwmController.GetControllersAsync(PwmSoftware.PwmProviderSoftware.GetPwmProvider()))[0];
     pwmController.SetDesiredFrequency(40);
     buzzer = pwmController.OpenPin(BUZZER_PIN);
     buzzer.SetActiveDutyCyclePercentage(RestingPulseLegnth);
 }
Пример #5
0
        public static void Main()
        {
            Debug.WriteLine("devMobile.Longboard.PwmTest starting");
            Debug.WriteLine(PwmController.GetDeviceSelector());

            try
            {
                PwmController pwm        = PwmController.FromId("TIM5");
                AdcController adc        = AdcController.GetDefault();
                AdcChannel    adcChannel = adc.OpenChannel(0);

                PwmPin pwmPin = pwm.OpenPin(PinNumber('A', 0));
                pwmPin.Controller.SetDesiredFrequency(1000);
                pwmPin.Start();

                while (true)
                {
                    double value = adcChannel.ReadRatio();

                    Debug.WriteLine(value.ToString("F2"));

                    pwmPin.SetActiveDutyCyclePercentage(value);

                    Thread.Sleep(100);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
            }
        }
Пример #6
0
        /// <summary>
        /// Constructor of Grove ServoMotor module
        /// </summary>
        /// <param name="controller">Id of pwm controller</param>
        /// <param name="pwmPinNumber">Pwm pin number of board</param>
        public ServoMotor(string controller, int pwmPinNumber)
        {
            PwmController pwm = PwmController.FromId(controller);

            _servo = pwm.OpenPin(pwmPinNumber);
            pwm.SetDesiredFrequency(1 / 0.020);
        }
Пример #7
0
 /// <inheritdoc/>
 public void Dispose()
 {
     if (bluePin != null)
     {
         if (bluePin.IsStarted)
         {
             bluePin.Stop();
         }
         bluePin.Dispose();
         bluePin = null;
     }
     if (greenPin != null)
     {
         if (greenPin.IsStarted)
         {
             greenPin.Stop();
         }
         greenPin.Dispose();
         greenPin = null;
     }
     if (redPin != null)
     {
         if (redPin.IsStarted)
         {
             redPin.Stop();
         }
         redPin.Dispose();
         redPin = null;
     }
 }
Пример #8
0
 internal Servo(PwmController pwmController, int pwmPin)
 {
     _position  = 0.0;
     _limitsSet = false;
     _pwmPin    = pwmController.OpenPin(pwmPin);
     _pwmPin.Start();
 }
Пример #9
0
        public async void StepperMotorExample()
        {
            MotorHat2348    mh      = null;
            PwmStepperMotor stepper = null;
            PwmPin          pwm     = null;

            if (mh == null)
            {
                // Create a driver object for the HAT at address 0x60
                mh = new MotorHat2348(0x60);
                // Create a stepper motor object at the specified ports and steps per rev
                stepper = mh.CreateStepperMotor(1, 2, 200);
                // Create a PwmPin object at one of the auxiliary PWMs on the HAT
                pwm = mh.CreatePwm(1);
            }

            // step 200 full steps in the forward direction using half stepping (so 400 steps total) at 30 rpm
            stepper.SetSpeed(30);
            await stepper.StepAsync(200, Direction.Forward, SteppingStyle.Half);

            // Activate the pin and set it to 50% duty cycle
            pwm.Start();
            pwm.SetActiveDutyCyclePercentage(0.5);

            // for demonstration purposes we will wait 10 seconds to observe the PWM and motor operation.
            await Task.Delay(10000);

            // Stop the auxiliary PWM pin
            pwm.Stop();

            // Dispose of the MotorHat and free all its resources
            mh.Dispose();
        }
Пример #10
0
        // Initialize the PwmController class instance
        public async void Initialize()
        {
            try
            {
                var pwmControllers = await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider());

                var pwmController = pwmControllers[1];    // the device controller
                pwmController.SetDesiredFrequency(50);

                Pwm = pwmController.OpenPin(LED_pin);
                Pwm.SetActiveDutyCyclePercentage(0);  // start at 0%
                Pwm.Start();
                if (Pwm == null)
                {
                    Debug.WriteLine("ERROR! Pwm device {0} may be in use.");
                    return;
                }
                Debug.WriteLine("GPIO pin setup for Pwm.");
            }
            catch (Exception e)
            {
                Debug.WriteLine("EXEPTION CAUGHT: " + e.Message + "\n" + e.StackTrace);
                throw;
            }
        }
Пример #11
0
        private async void OnLoaded(object sender, RoutedEventArgs routedEventArgs)
        {
            if (LightningProvider.IsLightningEnabled)
            {
                LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();

                var pwmControllers = await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider());

                var pwmController = pwmControllers[1]; // the on-device controller
                pwmController.SetDesiredFrequency(50); // try to match 50Hz

                _pin27 = pwmController.OpenPin(27);
                _pin27.SetActiveDutyCyclePercentage(0);
                _pin27.Start();
            }

            var gpioController = await GpioController.GetDefaultAsync();

            if (gpioController == null)
            {
                StatusMessage.Text = "There is no GPIO controller on this device.";
                return;
            }
            _pin22 = gpioController.OpenPin(22);
            _pin22.SetDriveMode(GpioPinDriveMode.Output);
            _pin22.Write(GpioPinValue.Low);
        }
Пример #12
0
        private async void MainPage_Loaded(object sender, RoutedEventArgs e)
        {
            // Check presence of GPIO Controller
            // Since this is UWP, this application runs on desktop, mobile, as well as embedded devices
            // best to confirm we are running on an embedded device like R Pi
            GpioController gpio = GpioController.GetDefault();

            if (gpio == null)
            {
                Debug.WriteLine("This device does not have GPIO Controller.");
                return;
            }

            var pwmManager = new PwmProviderManager();

            pwmManager.Providers.Add(new SoftPwm());

            var pwmContollers = await pwmManager.GetControllersAsync();

            pwmController = pwmContollers[0];
            pwmController.SetDesiredFrequency(50);

            pwmPin = pwmController.OpenPin(servoPin);
            pwmPin.Start();

            timer = new DispatcherTimer
            {
                Interval = TimeSpan.FromSeconds(15)
            };
            timer.Tick += Timer_Tick;
            timer.Start();

            IsClockwise = false;
        }
Пример #13
0
 private void StopPin(PwmPin pin)
 {
     if (pin.IsStarted)
     {
         pin.Stop();
     }
 }
Пример #14
0
        public ServoMotor(string controller, int PwmPinNumber)
        {
            PwmController PWM = PwmController.FromId(controller);

            servo = PWM.OpenPin(PwmPinNumber);
            PWM.SetDesiredFrequency(1 / 0.020);
        }
Пример #15
0
        public async void Run(IBackgroundTaskInstance taskInstance)
        {
            _deferral = taskInstance.GetDeferral();

            _controller     = new PinsController();
            _gpioController = GpioController.GetDefault();

            bool initialized = await _controller.InitAsync(PWM_FREQUENCY);

            if (initialized)
            {
                _pin1 = _controller.OpenPin(6);
                _pin1.Start();

                _pin2 = _controller.OpenPin(13);
                _pin2.Start();

                _pin3 = _controller.OpenPin(19);
                _pin3.Start();

                _pin4 = _controller.OpenPin(26);
                _pin4.Start();

                _pin5 = _gpioController.OpenPin(4);
                _pin5.SetDriveMode(GpioPinDriveMode.Output);
                _pin5.Write(GpioPinValue.Low);
            }

            _httpServer = new HttpServer(6000, 250);
            _httpServer.StartServer();

            _httpServer.MessageReceived       += new EventHandler <byte[]>((s, m) => HandleMessage(m));
            _httpServer.CommunicationTimedOut += new EventHandler <long>((s, l) => HandleTimeOut(l));
        }
Пример #16
0
        private async Task init()
        {
            // ENSURE ITS DONE BEFORE PWM
            // LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();

            // await PwmController.GetControllersAsyn DOES NOT WORK ON RPi3B+ in preview builds but works on other models
            // var pwmControllers = await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider());

            // HENCE USING PwmProviderManager
            var pwmManager = new PwmProviderManager();

            // Add providers
            pwmManager.Providers.Add(new SoftPwm());
            // Get the well-known controller collection back
            var pwmControllers = await pwmManager.GetControllersAsync();

            // Using the first PWM controller
            this.pwmController = pwmControllers[0];
            this.pwmController.SetDesiredFrequency(50);

            this.panServo  = this.pwmController.OpenPin(panMotorPin);
            this.tiltServo = this.pwmController.OpenPin(TiltMotorPin);

            this.panServo.SetActiveDutyCyclePercentage(this.RestingPulseLegnth);
            this.panServo.Start();
            this.tiltServo.SetActiveDutyCyclePercentage(this.RestingPulseLegnth);
            this.tiltServo.Start();

            var task = Task.Run(() =>
            {
                System.Threading.Tasks.Task.Delay(250).Wait();
                this.tiltServo.Stop();
                this.panServo.Stop();
            });
        }
Пример #17
0
        private async void OnPageLoad(object sender, RoutedEventArgs e)
        {
            if (LightningProvider.IsLightningEnabled)
            {
                LowLevelDevicesController.DefaultProvider = LightningProvider.GetAggregateProvider();
            }

            var gpioController = await GpioController.GetDefaultAsync();

            if (gpioController == null)
            {
                return;
            }

            var pwmControllers = await PwmController.GetControllersAsync(LightningPwmProvider.GetPwmProvider());


            pwmController = pwmControllers[1];       //hard code from examples to use index 1
            pwmController.SetDesiredFrequency(1000); //do *not* debug over this line, it will crash
            rightDrive = pwmController.OpenPin(13);
            rightDrive.SetActiveDutyCyclePercentage(0.5);
            rightDrive.Start();
            leftDrive = pwmController.OpenPin(12);
            leftDrive.SetActiveDutyCyclePercentage(0.5);
            leftDrive.Start();
        }
Пример #18
0
        private bool disposedValue = false; // To detect redundant calls

        void Dispose(bool disposing)
        {
            if (!disposedValue)
            {
                if (disposing)
                {
                    // TODO: dispose managed state (managed objects).
                    this.conn.Close();
                    this.conn.Dispose();
                    this.conn = null;

                    pushButton.ValueChanged -= PushButton_ValueChanged;
                    pushButton.Dispose();
                    pushButton = null;

                    _servoPin.Dispose();
                    _servoPin = null;

                    foreach (FinishGate fg in FinishGates)
                    {
                        fg.Dispose();
                    }
                }

                // TODO: free unmanaged resources (unmanaged objects) and override a finalizer below.
                // TODO: set large fields to null.

                disposedValue = true;
            }
        }
Пример #19
0
        public async Task <bool> Rotate(LuisResult result, object context, object speak)
        {
            var speech = (App.SpeechFunc)speak;

            var c = (Context)context;

            if (c.IsIoTCore)
            {
                speech("Feel the burn baby!");

                pwmController = (await PwmController.GetControllersAsync(PwmSoftware.PwmProviderSoftware.GetPwmProvider()))[0];
                pwmController.SetDesiredFrequency(50);

                try
                {
                    motorPin = pwmController.OpenPin(26);
                }

                catch
                { }

                motorPin.SetActiveDutyCyclePercentage(RestingPulseLegnth);
                motorPin.Start();
                iteration = 0;
                timer     = ThreadPoolTimer.CreatePeriodicTimer(Timer_Tick, TimeSpan.FromSeconds(1));
            }
            else
            {
                speech("I am a fully functioning PC, not a robot.");
            }
            return(true);
        }
Пример #20
0
        /// <summary>
        /// Free up our resources.
        /// </summary>
        public void Dispose()
        {
            pin.Dispose();
            pin = null;

            t.Dispose();
            t = null;
        }
Пример #21
0
 public PwmPinBase(PwmPin pin, int pinNumber, double frequency)
 {
     PinNumber     = pinNumber;
     _pin          = pin;
     Frequency     = frequency;
     MinPulseWidth = 0.0008;
     MaxPulseWidth = 0.0026;
 }
Пример #22
0
 /// <summary>
 /// Initialize the Pins with default values of low and 0
 /// </summary>
 /// <param name="GPIO_pin">The number of the GPIO pin to open</param>
 /// <param name="PWM_pin">The number of the PWM pin to open</param>
 /// <param name="gpioController">The gpio controller</param>
 /// <param name="pwmController">The PWM controller</param>
 public void Init(int GPIO_pin, int PWM_pin, GpioController gpioController, PwmController pwmController)
 {
     _pwmPin  = pwmController.OpenPin(PWM_pin);
     _GPIOPin = gpioController.OpenPin(GPIO_pin);
     _GPIOPin.Write(GpioPinValue.Low);
     _GPIOPin.SetDriveMode(GpioPinDriveMode.Output);
     _pwmPin.SetActiveDutyCyclePercentage(0);
 }
Пример #23
0
 private async void InitPwm()
 {
     //_controller = (await PwmController.GetControllersAsync(PwmPCA9685.PwmProviderSoftware.GetPwmProvider())).First();
     _controller = (await PwmController.GetControllersAsync(PwmSoftware.PwmProviderSoftware.GetPwmProvider())).First();
     _controller.SetDesiredFrequency(40);
     _pin = _controller.OpenPin(5);
     _pin.SetActiveDutyCyclePercentage(0.5);
 }
Пример #24
0
 public PWM(IO60P16Module parentModule, PwmPin pin, double frequency_Hz, double dutyCycle, bool invertOutput)
 {
     _parentModule = parentModule;
     _pin = pin;
     _frequency = frequency_Hz;
     _dutyCycle = dutyCycle;
     _invertOutput = invertOutput;
 }
Пример #25
0
 /// <summary>
 /// Disposes the underlying objects. This method will be called automatically and should not be called by user
 /// code, but inheritors should call the base method.
 /// </summary>
 protected override void DisposeResource()
 {
     if (_pin != null)
     {
         _pin.Dispose();
         _pin = null;
     }
 }
Пример #26
0
 virtual protected void Dispose(bool disposing)
 {
     if (disposing)
     {
         _pin.Stop();
         _pin.Dispose();
         _pin = null;
     }
 }
Пример #27
0
        /// <summary>
        /// Constructor of Tunes
        /// </summary>
        /// <param name="controller">string of controller (must be a P Socket)</param>
        /// <param name="pin">Pin number (generally pin 9 of P Socket)</param>
        public Tunes(string controller, int pin)
        {
            PwmController ctl = PwmController.FromId(controller);

            _pwmPin = ctl.OpenPin(pin);

            _playlist = new Queue();
            _syncRoot = new object();
        }
Пример #28
0
 private void DisposePin(PwmPin pin)
 {
     if (pin != null)
     {
         StopPin(pin);
         pin.Dispose();
         pin = null;
     }
 }
Пример #29
0
        public RgbLed(int PwmPinNumber)
        {
            //PWM redLed = new PWM(PWMChannels.PWM_PIN_D11, 100, 0, false);
            PwmController PWM = PwmController.GetDefault();

            Lamp = PWM.OpenPin(PwmPinNumber);

            PWM.SetDesiredFrequency(100);
        }
Пример #30
0
 public PWM(IO60P16Module parentModule, PwmPin pin, uint period, uint duration, ScaleFactor scale, bool invertOutput)
 {
     _parentModule = parentModule;
     _pin = pin;
     _period_ns = period * (uint)scale;
     _duration_ns = duration * (uint)scale;
     _scale = scale;
     _invertOutput = invertOutput;
 }
        static void Main()
        {
            var _config = new configs.config(configs.Configuration.GetConfiguration());

            Console.WriteLine("Starting... RaspiFanController StartingSettings is...");
            Console.WriteLine($"PwmPin :{_config.PWMPin} GpioLogicPin: {_config.LogicPin}");

            Console.WriteLine("\n**FanSpeedSettings");
            Console.WriteLine($"*Frequency: {_config.PwmFrequency}Hz	FanMaxSpeed: {_config.MaxSpeed}%  FanMinSpeed: {_config.MinSpeed}%");
            Console.WriteLine($"*FanMaxTemp:{_config.MaxSpeedTemp}C	FanMinTemp: {_config.MinSpeedTemp}C");

            using (var logicPin = new DigitalPin(_config.LogicPin, GpioPinDirection.Out))
                using (var pwmPin = new PwmPin(_config.PWMPin, _config.PwmFrequency, 1))
                {
                    Console.CancelKeyPress += (s, e) =>
                    {
                        Console.WriteLine("終了中...");
                        logicPin.Dispose();
                        pwmPin.Dispose();
                    };
                    logicPin.State = true;
                    Thread.Sleep(3000);

                    while (true)
                    {
                        float perSpeed = 1;

                        if (!float.TryParse(File.ReadAllText("/sys/class/thermal/thermal_zone0/temp"), out float temp))
                        {
                            return;
                        }
                        temp /= 1000;

                        if (_config.MaxSpeedTemp != _config.MinSpeedTemp)
                        {
                            float perTemp = (temp - _config.MinSpeedTemp) / (_config.MaxSpeedTemp - _config.MinSpeedTemp);
                            perSpeed = (_config.MinSpeed + ((_config.MaxSpeed - _config.MinSpeed) * perTemp)) / 100;

                            if (perTemp >= 1)
                            {
                                perSpeed = _config.MaxSpeed;
                            }
                            if (perTemp <= 0)
                            {
                                perSpeed = _config.MaxSpeed > _config.MinSpeed ? _config.MaxSpeed : _config.MinSpeed;
                            }
                        }

                        perSpeed = Math.Min(Math.Max(perSpeed, 0), 1);

                        Console.WriteLine($"[{DateTime.Now:yyyy/mm/dd HH:MM:ss}] Temp: {temp}C, Spd: {perSpeed * 100}%");
                        pwmPin.Duty = perSpeed;
                        Thread.Sleep(_config.GetStatePeriod * 1000);
                    }
                }
        }
Пример #32
0
 /// <summary>
 /// Creates an instance.
 /// </summary>
 /// <param name="pin">The PWM-enabled pin to use.</param>
 public AnalogPwmOutput(DigitalPwmOutputPin pin)
 {
     if (_controller == null)
     {
         CreateController(PwmFrequency);
     }
     _pin = _controller.OpenPin((int)pin);
     _pin.SetActiveDutyCyclePercentage(0.0);
     _pin.Start();
 }
Пример #33
0
 public PwmPin OpenPin(int number)
 {
     number.ValidateIn(0, PinCount.Value - 1, nameof(number));
     var pin = GetPin(number);
     if (pin == null)
     {
         pin = new PwmPin(this,
             string.Format($"Pin{number}"),
             number,
             Controller.OpenPin(number)
             );
         Children.Add(pin);
     }
     return pin;
 }
Пример #34
0
		/// <summary>
		/// Sets the duty cycle of the given pwm pin.
		/// </summary>
		/// <param name="pin">The pin to set the duty cycle for.</param>
		/// <param name="value">The new duty cycle between 0 (off) and 1 (on).</param>
		public void SetPwmDutyCycle(PwmPin pin, double value) {
			if (value < 0.0 || value > 1.0) throw new ArgumentOutOfRangeException(nameof(value));
			if (!Enum.IsDefined(typeof(PwmPin), pin)) throw new ArgumentException(nameof(pin));

			this.pwm.SetDutyCycle((int)pin, value);
		}