private void OnIsrEcho()
        {
            int now = WiringPi.Micros();

            if (WiringPi.DigitalRead(ECHOPin) == WiringPiConst.High)
            {
                _startTime = now;
            }
            else
            {
                _endTime   = now;
                _dataValid = true;
            }
        }
Exemplo n.º 2
0
 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);
         }
     }
 }