/// <summary> /// Initialisiert die Roboter-Konsole mit den dazugehörigen LED's und Schalter. /// </summary> public RobotConsole() { if (Constants.IsWinCE == false) { _digitalIn = new DigitalInSim(); _digitalOut = new DigitalOutSim(); } else { _digitalIn = new DigitalInHW(Constants.IOConsoleSWITCH); _digitalOut = new DigitalOutHW(Constants.IOConsoleLED); } _leds = new Led[4]; for (int i = 0; i < _leds.Length; i++) { _leds[i] = new Led((Leds)i, _digitalOut); } _switches = new Switch[4]; for (int i = 0; i < _switches.Length; i++) { _switches[i] = new Switch((Switches)i, _digitalIn); } }
/// <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(); }
public void setup() { ioMock = new Mock <IOPort>(); port = 0xf0; IOPort.set(ioMock.Object); digitalIn = new DigitalIn(port); }
/// <summary> /// Initializes a new instance of the <see cref="Switch" /> class. /// </summary> /// <param name="swi">The swi.</param> /// <param name="digitalIn">The digital in.</param> /// <exception cref="System.ArgumentNullException"></exception> public Switch(Switches swi, DigitalIn digitalIn) { if (digitalIn == null) throw new ArgumentNullException("digitalIn"); _switch = swi; _digitalIn = digitalIn; _digitalIn.DigitalInChanged += DigitalInChanged; _oldState = false; }
/// <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; }
public Nrf24l01(Spi spi, SpiChipSelectPin csPin, DigitalOut cePin, DigitalIn irqPin) { dev = new SpiDevice(spi, csPin); this.irqPin = irqPin; this.cePin = cePin; Task.Run(irqPin.MakeDigitalInAsync).Wait(); Task.Run(cePin.MakeDigitalPushPullOutAsync).Wait(); cePin.DigitalValue = false; irqPin.DigitalValueChanged += IrqPin_DigitalValueChanged; Task.Run(() => dev.SendReceiveAsync(new byte[] { 0x50, 0x73 })).Wait(); // enable feature register Task.Run(() => WriteRegister((byte)Registers.Feature, 0b00000111)).Wait(); Task.Run(() => WriteRegister((byte)Registers.DynamicPayloadLength, 0b00111111)).Wait(); Task.Run(writeConfig).Wait(); for (int i = 0; i < 6; i++) { pipes[i] = new Pipe(i, this); } // set default addresses pipes[0].address = 0xE7E7E7E7E7; pipes[1].address = 0xC2C2C2C2C2; pipes[2].address = 0xC2C2C2C2C3; pipes[3].address = 0xC2C2C2C2C4; pipes[4].address = 0xC2C2C2C2C5; pipes[5].address = 0xC2C2C2C2C6; // set default enable state pipes[0].enablePipe = true; pipes[1].enablePipe = true; Task.Run(() => Task.Delay(5)).Wait(); Task.Run(FlushRx).Wait(); Task.Run(FlushTx).Wait(); powerUp = true; Task.Run(writeConfig).Wait(); Task.Run(() => Task.Delay(5)).Wait(); // manually call the ISR just in case there's something pending IrqPin_DigitalValueChanged(this, new DigitalInValueChangedEventArgs(cePin.DigitalValue)); }