Example #1
0
 /// <summary>
 ///     Construct a new Button attached to a DigitalIn input.
 /// </summary>
 /// <param name="input">The DigitalIn the button is attached to</param>
 /// <param name="activeLow">Whether the button is active-low (true, default). If the button is active-high, set to false.</param>
 public Button(DigitalIn input, bool activeLow = true)
 {
     Input                      = input;
     this.activeLow             = activeLow;
     input.DigitalValueChanged += Input_DigitalValueChanged;
     input.MakeDigitalInAsync();
 }
Example #2
0
        public Nau7802(I2C i2c, DigitalIn drdy = null) : base(null, 24, 0)
        {
            parent = this;

            if (drdy != null)
            {
                this.drdy = drdy;
                drdy.MakeDigitalInAsync();
                drdy.DigitalValueChanged += Drdy_DigitalValueChanged;
            }

            AutoUpdateWhenPropertyRead = true;

            dev       = new SMBusDevice(0x2A, i2c);
            registers = new Nau7802Registers(new SMBusRegisterManagerAdapter(dev));

            registers.puCtrl.registerReset = 1;  // reset all registers
            registers.puCtrl.write().Wait();
            registers.puCtrl.registerReset  = 0; // clear reset
            registers.puCtrl.powerUpDigital = 1; // power up digital
            registers.puCtrl.write().Wait();

            Task.Delay(10).Wait();
            if (registers.puCtrl.read().Result.powerUpReady == 0)
            {
                Utility.Error("Could not power up NAU7802");
                return;
            }


            // useful defaults
            registers.puCtrl.useExternalCrystal = 0;
            registers.puCtrl.useInternalLdo     = 1;
            registers.puCtrl.powerUpDigital     = 1;
            registers.puCtrl.powerUpAnalog      = 1;
            registers.puCtrl.write().Wait();

            registers.ctrl1.setVldo(Vldoes.mV_3000);
            registers.ctrl1.write().Wait();

            UpdateReferenceVoltage(); // set the pins up with the default gains

            registers.pga.pgaBypass      = 0;
            registers.pga.disableChopper = 1;
            registers.pga.write().Wait();

            registers.adc.setRegChpFreq(RegChpFreqs.off);
            registers.adc.regChp = 0;
            registers.adc.write().Wait();

            registers.i2cCtrl.bgpCp = 0;
            registers.i2cCtrl.write().Wait();

            registers.ctrl2.setConversionRate(ConversionRates.Sps_10);
            registers.ctrl2.write().Wait();

            registers.puCtrl.cycleStart = 1;
            registers.puCtrl.write().Wait();
        }
Example #3
0
        /// <summary>
        ///     Construct a new RotaryEncoder from two digital inputs
        /// </summary>
        /// <param name="a">A channel input</param>
        /// <param name="b">B channel input</param>
        /// <param name="stepsPerTick">The number of steps to count as one "tick"</param>
        public RotaryEncoder(DigitalIn a, DigitalIn b, int stepsPerTick = 1)
        {
            this.stepsPerTick = stepsPerTick;
            this.a            = a;
            this.b            = b;

            a.MakeDigitalInAsync();
            b.MakeDigitalInAsync();

            Position = 0;

            a.DigitalValueChanged += A_DigitalValueChanged;
            b.DigitalValueChanged += B_DigitalValueChanged;
        }