private void OnIsrEcho() { int now = WiringPi.Micros(); if (WiringPi.DigitalRead(ECHOPin) == WiringPiConst.High) { _startTime = now; } else { _endTime = now; _dataValid = true; } }
public void Read() { for (Tries = 1; Tries < Retries + 1; Tries++) { WiringPi.PinMode(DataPin, WiringPiConst.Output); WiringPi.DigitalWrite(DataPin, WiringPiConst.Low); WiringPi.DelayMicroseconds(20000); WiringPi.DigitalWrite(DataPin, WiringPiConst.High); WiringPi.DelayMicroseconds(30); WiringPi.PinMode(DataPin, WiringPiConst.Input); // Chip start to transfer int state = WiringPi.DigitalRead(DataPin); int lastState = WiringPiConst.High; for (int i = 0; i < MaxTransferReads; i++) { int readCounter = 0; do { readCounter++; lastState = state; WiringPi.DelayMicroseconds(1); state = WiringPi.DigitalRead(DataPin); } while (!(lastState == WiringPiConst.High && state == WiringPiConst.Low) && readCounter < 100); // --> High->Low trigger lastState = WiringPiConst.Low; _timeOfChange[i] = WiringPi.Micros(); } GetDHTData(1); if (IsDataValid) { break; } else { Thread.Sleep(400); } } }