//Das zuletzt geschriebene Bit liegt an Ausgang 0 an //Returnwert ist der hinausgeschobene Teil private static int WriteByteReturn(int state) { int shiftout = 0; int soll; WiringPiWrapperDirect.digitalWrite(StorageClockPin, 0); for (int i = 1; i < 0x100; i = i << 1) { if (WiringPiWrapperDirect.digitalRead(ShiftOutPin) > 0) { shiftout |= i; } soll = (state & i) > 0 ? 1 : 0; WiringPiWrapperDirect.digitalWrite(SerialDataPin, soll); Pulse(ShiftClockPin); for (int sleep = 0; sleep < 40; sleep++) // Verzögerung von In zu Out { ; } } WiringPiWrapperDirect.digitalWrite(StorageClockPin, 1); return(shiftout); }
public static void RotaryPoller() { Console.WriteLine("Polling"); while (true) { int binaryRotaryValue = 0; if (WiringPiWrapperDirect.digitalRead(DataPin) == 0) { binaryRotaryValue += DataPinValue; } if (WiringPiWrapperDirect.digitalRead(ClockPin) == 0) { binaryRotaryValue += ClockPinValue; } if (WiringPiWrapperDirect.digitalRead(ClickPin) == 0) //Pull Up/Down Vertauschung { binaryRotaryValue += ClickPinValue; } if (binaryRotaryValue != BinaryRotaryValue) { BinaryRotaryValue = binaryRotaryValue; RotaryChanged.Set(); } Thread.Sleep(1); //Nachdem Prellen ist doof } }
static void TasterWiringPi() { Console.WriteLine("Dehre"); WiringPiWrapperDirect.WiringPiSetupGpio(); WiringPiWrapperDirect.pinMode(17, PinType.OUTPUT); WiringPiWrapperDirect.pinMode(18, PinType.INPUT); WiringPiWrapperDirect.digitalWrite(17, 0); bool lastButtonPressed = false; bool ledBurning = false; //while(WirinPiWrapper.millis() < 30000) for (var i = 0; i < 100000000; i++) { bool buttonPressed = WiringPiWrapperDirect.digitalRead(18) > 0; //Draufdrücken if (buttonPressed && !lastButtonPressed) { Console.WriteLine("Press"); if (ledBurning) { WiringPiWrapperDirect.digitalWrite(17, 0); } else { WiringPiWrapperDirect.digitalWrite(17, 1); } ledBurning = !ledBurning; lastButtonPressed = true; } //Loslassen if (!buttonPressed && lastButtonPressed) { Console.WriteLine("Release"); lastButtonPressed = false; Thread.Sleep(30); //Prellschalter } } WiringPiWrapperDirect.digitalWrite(17, 0); Console.WriteLine("sers."); }
public static void WiringPiBenchmarkWriteReadWrite() { Console.WriteLine("Servus Luigi."); WiringPiWrapperDirect.WiringPiSetupGpio(); WiringPiWrapperDirect.pinMode(17, PinType.OUTPUT); WiringPiWrapperDirect.pinMode(19, PinType.OUTPUT); WiringPiWrapperDirect.pinMode(18, PinType.INPUT); DateTime start = DateTime.Now; WiringPiWrapperDirect.digitalWrite(17, 0); int testCount = 1000000000; start = DateTime.Now; int soll; int ist; for (int i = 0; i < testCount; i++) { soll = i & 1; WiringPiWrapperDirect.digitalWrite(17, soll); //WirinPiWrapper.delayMicroseconds (1); //Seltener Fehler, delay drückt von 2 MHz auf 0,2 MHz fehlerlos //for (int y = 0; y < 30; y++) //0,55 MHz fehlerfrei! // ; ist = WiringPiWrapperDirect.digitalRead(18); WiringPiWrapperDirect.digitalWrite(19, ist); //if (WirinPiWrapper.digitalRead(18) != soll) // Console.WriteLine ("Scheisndregg " + i); } TimeSpan duration = new TimeSpan(DateTime.Now.Ticks - start.Ticks); Console.WriteLine("WiringPi WriteReadTime = " + (duration.TotalMilliseconds / testCount) + "ms, " + testCount / (duration.TotalMilliseconds * 1000) + " MHz"); }