static void Main(string[] args) { Console.WriteLine("Hello World!"); // pins var ledOne = 16; var ledTwo = 21; var ledThree = 20; var buttonOne = 26; var buttonSleep = 50; var volumeSleep = 50; // volume support var initialSleep = 100; var sleep = initialSleep; Volume volume = null; // this line should only be enabled if a trimpot is connected volume = Volume.EnableVolume(); Console.WriteLine($"Let's blink some LEDs!"); using (GpioController controller = new GpioController(PinNumberingScheme.Logical)) { controller.OpenPin(ledOne, PinMode.Output); controller.OpenPin(ledTwo, PinMode.Output); controller.OpenPin(ledThree, PinMode.Output); controller.OpenPin(buttonOne, PinMode.Input); Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs eventArgs) => { controller.Dispose(); Console.WriteLine("Pin cleanup complete!"); }; var timer1 = new TimeEnvelope(1000); var timer2 = new TimeEnvelope(1000); var timer3 = new TimeEnvelope(4000); var timers = new TimeEnvelope[] { timer1, timer2, timer3 }; while (true) { // behavior for ledOne if (timer1.Time == 0) { Console.WriteLine($"Light LED one for 800ms"); controller.Write(ledOne, PinValue.High); } else if (timer1.IsLastMultiple(200)) { Console.WriteLine($"Dim LED one for 200ms"); controller.Write(ledOne, PinValue.Low); } // behavior for ledTwo if (timer2.IsMultiple(200)) { Console.WriteLine($"Light LED two for 100ms"); controller.Write(ledTwo, PinValue.High); } else if (timer2.IsMultiple(100)) { Console.WriteLine($"Dim LED two for 100ms"); controller.Write(ledTwo, PinValue.Low); } // behavior for ledThree if (timer3.Time == 0) { Console.WriteLine("Light LED two for 2000 ms"); controller.Write(ledThree, PinValue.High); } else if (timer3.IsFirstMultiple(2000)) { Console.WriteLine("Dim LED two for 2000 ms"); controller.Write(ledThree, PinValue.Low); } // behavior for buttonOne if (volume != null) { var update = true; var value = 0; while (update) { (update, value) = volume.GetSleepforVolume(initialSleep); if (update) { sleep = value; Thread.Sleep(volumeSleep); } } } while (controller.Read(buttonOne) == PinValue.High) { Console.WriteLine("Button one pin value high!"); controller.Write(ledOne, PinValue.High); controller.Write(ledTwo, PinValue.High); controller.Write(ledThree, PinValue.High); Thread.Sleep(buttonSleep); } Console.WriteLine($"Sleep: {sleep}"); Thread.Sleep(sleep); // starts at 100ms TimeEnvelope.AddTime(timers, 100); // always stays at 100 } } }
static void Main() { // pins const int ledOne = 9; const int ledTwo = 10; const int ledThree = 11; const int buttonOne = 14; const int buttonSleep = 50; const int volumeSleep = 50; // volume support const int initialSleep = 100; int sleep = initialSleep; Volume volume = null; TimeEnvelope[] envelopes = new TimeEnvelope[] { new TimeEnvelope(1000), new TimeEnvelope(1000), new TimeEnvelope(4000) }; Console.WriteLine("Hello World!"); Console.WriteLine($"Let's blink some LEDs!"); using (Seesaw seesawDevice = new Seesaw(I2cDevice.Create(new I2cConnectionSettings(1, 0x49)))) using (SeesawGpioDriver seesawGpioDevice = new SeesawGpioDriver(seesawDevice)) using (GpioController controller = new GpioController(PinNumberingScheme.Logical, seesawGpioDevice)) { // this line should only be enabled if a trimpot is connected volume = Volume.EnableVolume(seesawDevice); controller.OpenPin(ledOne, PinMode.Output); controller.OpenPin(ledTwo, PinMode.Output); controller.OpenPin(ledThree, PinMode.Output); controller.OpenPin(buttonOne, PinMode.InputPullDown); Console.CancelKeyPress += (object sender, ConsoleCancelEventArgs eventArgs) => { controller.Dispose(); Console.WriteLine("Pin cleanup complete!"); }; while (true) { // behavior for ledOne if (envelopes[0].Time == 0) { Console.WriteLine($"Light LED one for 800ms"); controller.Write(ledOne, PinValue.High); } else if (envelopes[0].IsLastMultiple(200)) { Console.WriteLine($"Dim LED one for 200ms"); controller.Write(ledOne, PinValue.Low); } // behavior for ledTwo if (envelopes[1].IsMultiple(200)) { Console.WriteLine($"Light LED two for 100ms"); controller.Write(ledTwo, PinValue.High); } else if (envelopes[1].IsMultiple(100)) { Console.WriteLine($"Dim LED two for 100ms"); controller.Write(ledTwo, PinValue.Low); } // behavior for ledThree if (envelopes[2].Time == 0) { Console.WriteLine("Light LED three for 2000 ms"); controller.Write(ledThree, PinValue.High); } else if (envelopes[2].IsFirstMultiple(2000)) { Console.WriteLine("Dim LED three for 2000 ms"); controller.Write(ledThree, PinValue.Low); } // behavior for buttonOne if (volume != null) { var update = true; var value = 0; while (update) { (update, value) = volume.GetSleepForVolume(initialSleep); if (update) { sleep = value; Thread.Sleep(volumeSleep); } } } while (controller.Read(buttonOne) == PinValue.High) { Console.WriteLine("Button one pin value high!"); controller.Write(ledOne, PinValue.High); controller.Write(ledTwo, PinValue.High); controller.Write(ledThree, PinValue.High); Thread.Sleep(buttonSleep); } Console.WriteLine($"Sleep: {sleep}"); Thread.Sleep(sleep); // starts at 100ms TimeEnvelope.AddTime(envelopes, 100); // always stays at 100 } } }