Exemplo n.º 1
0
 private void I2CStart()
 {
     // start signal = pull sda down while scl is high
     _sda.On();
     I2CSleep();
     _scl.On();
     I2CSleep();
     _sda.Off();
     I2CSleep();
     _scl.Off();
     I2CSleep();
 }
Exemplo n.º 2
0
        /// <summary>
        /// Create a shift register with the appropriate Pi pins
        /// </summary>
        /// <param name="signalPin">GPIO Pin connected to Pin 14 of the SN74HC595N</param>
        /// <param name="signalClockPin">GPIO Pin connected to Pin 11 of the SN74HC595N</param>
        /// <param name="registerClockPin">GPIO Pin connected to Pin 12 of the SN74HC595N</param>
        /// <param name="clearPin">GPIO Pin connected to Pin 10 of the SN74HC595N</param>
        /// <param name="outputEnabledPin">GPIO Pin connected to Pin 13 of the SN74HC595N</param>
        /// <param name="numChips">The number of SN74HC595N connected in series.</param>
        /// To connect multiple chips in series connect
        /// Pi                  Chip 1      Chip 2      Chip 3
        /// signalPin           -> Pin 14
        /// signalClockPin      -> Pin 11   -> Pin 11   -> Pin 11
        /// registerClockPin    -> Pin 12   -> Pin 12   -> Pin 12
        /// clearPin            -> Pin 10   -> Pin 10   -> Pin 10
        /// outputEnabledPin    -> Pin 13   -> Pin 13   -> Pin 13
        ///                        Pin 9    -> Pin 14
        ///                                    Pin 9    -> Pin 14
        public ShiftRegister(PreparedPin signalPin, PreparedPin signalClockPin, PreparedPin registerClockPin, PreparedPin clearPin, PreparedPin outputEnabledPin,
                             int numChips = 1)
        {
            _signalPin        = signalPin;
            _signalClockPin   = signalClockPin;
            _registerClockPin = registerClockPin;
            clearPin.On(); // make sure the clear pin is pulled high
            _outputEnabledPin = outputEnabledPin;

            _values = new bool[numChips * 8];

            SendAllValues();
        }
Exemplo n.º 3
0
        /// <summary>
        /// This is the bit that actually does the bit banging to the chip
        /// </summary>
        private void SendAllValues()
        {
            _registerClockPin.Off();

            foreach (var b in _values.Reverse())
            {
                _signalClockPin.Off();
                if (b)
                {
                    _signalPin.On();
                }
                else
                {
                    _signalPin.Off();
                }
                _signalClockPin.On();
            }

            _registerClockPin.On();
            _registerClockPin.Off();

            _outputEnabledPin.Off(); // low = enabled, ensure that the output is actually enabled
        }