44 lines
869 B
C++
44 lines
869 B
C++
|
#include "distancethread.h"
|
||
|
#include <wiringPi.h>
|
||
|
|
||
|
volatile unsigned int timestampHigh = 0;
|
||
|
volatile unsigned int timestampLow = 0;
|
||
|
|
||
|
DistanceThread::DistanceThread()
|
||
|
{
|
||
|
wiringPiSetup();
|
||
|
pinMode(m_triggerPin, OUTPUT);
|
||
|
pinMode(m_echoPin, INPUT);
|
||
|
}
|
||
|
|
||
|
void DistanceThread::run()
|
||
|
{
|
||
|
wiringPiISR(m_echoPin, INT_EDGE_BOTH, []
|
||
|
{
|
||
|
if (digitalRead(29) == HIGH)
|
||
|
{
|
||
|
timestampHigh = micros();
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
timestampLow = micros();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
while (true)
|
||
|
{
|
||
|
digitalWrite(m_triggerPin, HIGH);
|
||
|
delayMicroseconds(10);
|
||
|
digitalWrite(m_triggerPin, LOW);
|
||
|
delayMicroseconds(40);
|
||
|
|
||
|
unsigned int delayUS = timestampLow - timestampHigh;
|
||
|
if (delayUS < 25e3)
|
||
|
{
|
||
|
emit distanceUpdated(delayUS / 0.58);
|
||
|
}
|
||
|
|
||
|
delay(100);
|
||
|
}
|
||
|
}
|