-1

我正在使用我在网上找到的程序,我想做的就是使用 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");
  
}
4

0 回答 0