/// <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(); }
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(); }
/// <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; }