private void SetAddressWithShiftRegister(int addr) { for (var i = 0; i < this._addressLines.Count; i++) { var bit = 1 << i; var turnBitOnOrOff = (addr & bit) == bit; _sr.DigitalWrite(ShiftRegisterAddressGpioStart + i, turnBitOnOrOff ? GPIO.PinState.High : GPIO.PinState.Low); } }
public static void GpioAnimation(Nusbio nusbio, ShiftRegister74HC595 sr, int waitTime, bool demoGpio3to7Too = false) { // Gpio 0,1,2 are used to control the 2 shift register 74HC595, but we can use the other 5 var nusbioGpioLeft = new List <NusbioGpio>() { NusbioGpio.Gpio3, NusbioGpio.Gpio4, NusbioGpio.Gpio5, NusbioGpio.Gpio6, NusbioGpio.Gpio7, }; sr.SetGpioMask(ShiftRegister74HC595.ExGpio.None); if (!demoGpio3to7Too) { GpioAnimatioOneAtTheTime(nusbio, sr, waitTime, demoGpio3to7Too); } if (demoGpio3to7Too) // Demo internal nusbio gpio 3..7 also { for (int i = 0; i < nusbioGpioLeft.Count; i++) { nusbio[nusbioGpioLeft[i]].DigitalWrite(PinState.High); Console.WriteLine(nusbioGpioLeft[i]); Thread.Sleep(waitTime); if (Console.KeyAvailable) { return; } } } for (int i = 0; i < sr.GetGpioEnums().Count; i++) { sr.DigitalWrite(i + sr.MinGpioIndex, PinState.High); Console.WriteLine(sr.GpioStates); Thread.Sleep(waitTime); if (Console.KeyAvailable) { return; } } for (int i = sr.GetGpioEnums().Count - 1; i >= 0; i--) { sr.DigitalWrite(i + sr.MinGpioIndex, PinState.Low); Console.WriteLine(sr.GpioStates); Thread.Sleep(waitTime); if (Console.KeyAvailable) { return; } } if (demoGpio3to7Too) { for (int i = nusbioGpioLeft.Count - 1; i >= 0; i--) { nusbio[nusbioGpioLeft[i]].DigitalWrite(PinState.Low); Console.WriteLine(nusbioGpioLeft[i]); Thread.Sleep(waitTime); if (Console.KeyAvailable) { return; } } } sr.SetGpioMask(0); }