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); } } }
private void WriteByte(byte data) { byte mask = 0x01; for (int bit = 0; bit < 8; bit++) { WiringPi.DigitalWrite(CLKPin, WiringPiConst.Low); WiringPi.DigitalWrite(DIOPin, (data & 1 << bit) > 0 ? WiringPiConst.High : WiringPiConst.Low); mask <<= 1; WiringPi.DigitalWrite(CLKPin, WiringPiConst.High); WiringPi.DelayMicroseconds(1); } // switch DIO to input for ACK reading WiringPi.PinMode(DIOPin, WiringPiConst.Input); // reset DIO before set to output WiringPi.DigitalWrite(DIOPin, WiringPiConst.Low); // start ACK reading WiringPi.DigitalWrite(CLKPin, WiringPiConst.Low); ACKErr = true; for (int readTry = 1; readTry <= 100; readTry++) { // read/wait ACK (max. 100us) if (WiringPi.DigitalRead(DIOPin) == WiringPiConst.High) { WiringPi.DelayMicroseconds(1); } else { ACKErr = false; break; } } WiringPi.DigitalWrite(CLKPin, WiringPiConst.High); WiringPi.PinMode(DIOPin, WiringPiConst.Output); WiringPi.DigitalWrite(CLKPin, WiringPiConst.Low); }