我正在使用我在网上找到的程序,我想做的就是使用 micros() 函数替换 pulseIn() 函数。我的想法是在触发引脚变高时开始计数,当 Echo 引脚变低时,计算当前 micros() 与我事先获取距离的时间之间的差异。
#define echoPin 2
#define trigPin 3
long duration;
int distance;
void setup()
{
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop()
{
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
duration = pulseIn(echoPin, HIGH);
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
}
这是我尝试使用 micros() 函数来检查 Echo 引脚何时从高到低。
#define echoPin 2
#define trigPin 3
long duration;
long startTime;
int distance;
bool firstEcho;
bool secondEcho;
void setup()
{
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
Serial.begin(9600);
}
void loop()
{
micros();
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
firstEcho = digitalRead(echoPin);
startTime = micros();
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
secondEcho = digitalRead(echoPin);
if(firstEcho==1&&secondEcho==0)
{
duration = micros() - startTime;
}
distance = duration * 0.034 / 2;
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
}