public static void Main() { //setup dependencies -- no container manager //DebugRoutines debugRoutines = new DebugRoutines(); //debugRoutines.Loop(); IOutputPort bankZeroDataPort = new OutputPort(new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D0, false)); IOutputPort bankOneDataPort = new OutputPort(new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D1, false)); IOutputPort bankTwoDataPort = new OutputPort(new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D2, false)); IOutputPort bankThreeDataPort = new OutputPort(new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D3, false)); IOutputPort bankFourDataPort = new OutputPort(new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D4, false)); IOutputPort bankFiveDataPort = new OutputPort(new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D5, false)); IOutputPort bankSixDataPort = new OutputPort(new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D8, false)); IOutputPort bankSevenDataPort = new OutputPort(new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D9, false)); IOutputPort bankEightDataPort = new OutputPort(new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D10, false)); IOutputPort ledPort = new OutputPort(new Microsoft.SPOT.Hardware.OutputPort(Pins.ONBOARD_LED, false)); var portLayout = new PortLayout { DataPorts = new[] { bankZeroDataPort, bankOneDataPort, bankTwoDataPort, bankThreeDataPort, bankFourDataPort, bankFiveDataPort, bankSixDataPort, bankSevenDataPort, bankEightDataPort }, ClockPort = new OutputPort(new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D6, false)), LatchPort = new OutputPort(new Microsoft.SPOT.Hardware.OutputPort(Pins.GPIO_PIN_D7, false)) }; var logger = new Logger(ledPort); var portManager = new PortManager(portLayout, logger); portManager.setBanks(NUM_BANKS); // DDL, you can move this later var rgbManager = new RgbManager(portManager, NUM_BANKS, NUM_CHANNELS); var complexBehaviorManager = new ComplexBehaviorManager(rgbManager, logger); //begin behavior routines complexBehaviorManager.RunInitalizeSequence(1000, 500); complexBehaviorManager.ChaseFadedLight(0, 10, 100, LedColor.GetBlue); var colors = new LedColor[6]; colors[0] = LedColor.GetRed; colors[1] = LedColor.GetGreen; colors[2] = LedColor.GetBlue; colors[3] = LedColor.GetA; colors[4] = LedColor.GetB; colors[5] = LedColor.GetC; complexBehaviorManager.ParadeForward(1000, 500, colors); portLayout.Dispose(); }
//this could throw an exception if the colors are more than available channels in any bank public void ParadeForward(int delay, int cycles, LedColor[] colors) { for (int i = 0; i < colors.Length; i++) { _rgbManager.UpdateSingleCrossSection(i, colors[i]); } _rgbManager.PushArrayToDisplay(); for(int i = 0; i < cycles; i++) { Thread.Sleep(delay); _rgbManager.ShiftForward(_rgbManager.GetSingleChannel(0, _rgbManager.NumChannels - 1)); _rgbManager.PushArrayToDisplay(); } }
public void ChaseFadedLight(int bank, int cycles, int delay, LedColor pureColor) { _rgbManager.UpdateSingleBank(bank, LedColor.GetNone); _rgbManager.PushArrayToDisplay(); for(int i =0; i < cycles; i++) { for (int channel = 0; channel < _rgbManager.NumChannels; channel++) { WriteFadedLight(bank, channel, pureColor); _rgbManager.PushArrayToDisplay(); Thread.Sleep(delay); _logger.LogLight(); } for (int channel = _rgbManager.NumChannels - 1; channel >= 0; channel--) { WriteFadedLight(bank, channel, pureColor); _rgbManager.PushArrayToDisplay(); Thread.Sleep(delay); } } }
public void FillColor(LedColor color) { for (int bank = 0; bank < _numBanks; bank++) { for (int channel = 0; channel < _numChannels; channel++) { UpdateSingleChannel(bank, channel, color); } } }
public void UpdateSingleCrossSection(int channel, LedColor color) { for (int bank = 0; bank < _rgbArray.Length; bank++) { UpdateSingleChannel(bank, channel, color); } }
public void UpdateSingleChannel(int bank, int channel, LedColor color) { _rgbArray[bank][channel][0] = color.Red; _rgbArray[bank][channel][1] = color.Green; _rgbArray[bank][channel][2] = color.Blue; }
public void UpdateSingleBank(int bank, LedColor color) { for(int channel = 0; channel < _rgbArray[bank].Length; channel++) { UpdateSingleChannel(bank, channel, color); } }
public void ShiftForward(LedColor replacementColor) { foreach (var bank in _rgbArray) { for (int channelToUpdate = bank.Length; channelToUpdate > 1; channelToUpdate--) { bank[channelToUpdate][0] = bank[channelToUpdate][0] - 1; bank[channelToUpdate][1] = bank[channelToUpdate][1] - 1; bank[channelToUpdate][2] = bank[channelToUpdate][2] - 1; } bank[0][0] = replacementColor.Red; bank[0][0] = replacementColor.Green; bank[0][0] = replacementColor.Blue; } }
private void WriteFadedLight(int bank, int channel, LedColor pureColor) { _rgbManager.UpdateSingleBank(bank, LedColor.GetNone); var oneOff = new LedColor(pureColor.Red / 2, pureColor.Green / 2, pureColor.Blue / 2); var twoOff = new LedColor(oneOff.Red / 2, oneOff.Green / 2, oneOff.Blue / 2); _rgbManager.UpdateSingleChannel(bank, channel, pureColor); if (channel > 0) { _rgbManager.UpdateSingleChannel(bank, channel - 1, oneOff); } if (channel < _rgbManager.NumChannels - 1) { _rgbManager.UpdateSingleChannel(bank, channel + 1, oneOff); } if (channel > 1) { _rgbManager.UpdateSingleChannel(bank, channel - 2, twoOff); } if (channel < _rgbManager.NumChannels - 2) { _rgbManager.UpdateSingleChannel(bank, channel + 2, twoOff); } }