public static void BitBangSend(this IPiGPIO gpio, int gpioData, int gpioClock, byte[] data) { for (int i = 0; i < data.Length; i++) { for (int o = 7; o >= 0; o--) { gpio.Write(gpioData, (data[i] & o) != 0); gpio.Write(gpioClock, true); gpio.Write(gpioClock, false); } } }
private static int Run(IPiGPIO gpio) { Console.WriteLine("Starting application..."); using (gpio) { g = gpio; Console.WriteLine("Starting driver..."); drv = new CoremanHub75LedMatrix(gpio, Hub75PinLayout.Regular); //Set all to 0 drv.Init(); Console.WriteLine("Looping..."); Console.CancelKeyPress += (s, e) => { if (run) { e.Cancel = true; run = false; Console.WriteLine("Soft exiting..."); } else { Console.WriteLine("Hard exiting..."); } }; KeyHelp(false); bool a = false; bool b = false; bool o = false; bool c = false; bool l = false; g.Write(drv.Layout.A, a); g.Write(drv.Layout.B, b); g.Write(drv.Layout.OE, o); g.Write(drv.Layout.Strobe, l); g.Write(drv.Layout.Clock, c); int pos = 0; while (run) { if (!Console.KeyAvailable) { Thread.Sleep(10); continue; } var key = Console.ReadKey(true); switch (key.Key) { case ConsoleKey.F1: KeyHelp(); break; case ConsoleKey.D: TransmitRowPixel(pos, false, false, true); Console.Write("d"); break; case ConsoleKey.A: a = !a; gpio.Write(drv.Layout.A, a); Console.Write(a ? "A" : "a"); break; case ConsoleKey.B: b = !b; gpio.Write(drv.Layout.B, b); Console.Write(b ? "B" : "b"); break; case ConsoleKey.C: c = !c; gpio.Write(drv.Layout.C, c); Console.Write(c ? "C" : "c"); break; case ConsoleKey.O: o = !o; gpio.Write(drv.Layout.OE, o); Console.Write(o ? "O" : "o"); break; case ConsoleKey.L: l = !l; gpio.Write(drv.Layout.Strobe, l); Console.Write(l ? "L" : "l"); break; case ConsoleKey.Add: pos = Math.Min(63, pos + 1); Console.Write("+{0:X2}", pos); break; case ConsoleKey.Subtract: pos = Math.Max(0, pos - 1); Console.Write("-{0:X2}", pos); break; case ConsoleKey.I: Interleaved(); Console.Write("i"); break; case ConsoleKey.U: Interleaved2(); Console.Write("u"); break; case ConsoleKey.X: ChessBoardScan(); break; } } } return(0); }
private static void Clock() { g.Write(drv.Layout.Clock, true); g.Write(drv.Layout.Clock, false); }