-1

オンラインで見つけたプログラムを使用していますが、やりたいことは、micros() 関数を使用して pulseIn() 関数を置き換えることだけです。私が考えたのは、トリガーピンがハイになったときにカウントを開始し、エコーピンがローになったときに、現在の 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