Esempio n. 1
0
        /// <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);
            }
        }
Esempio n. 2
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();
 }
Esempio n. 3
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();
        }
Esempio n. 4
0
        public void setup()
        {
            ioMock = new Mock <IOPort>();
            port   = 0xf0;

            IOPort.set(ioMock.Object);
            digitalIn = new DigitalIn(port);
        }
Esempio n. 5
0
        /// <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;
        }
Esempio n. 6
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;
        }
Esempio n. 7
0
        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));
        }
Esempio n. 8
0
        /// <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);
            }
        }