关于#adruino#的adruino使用超声波传感器连续探测两次第二次测距结果始终为0,如何解决?

adruino使用超声波传感器连续探测两次第二次测距结果始终为0。
在小车上装载了3个超声波传感器,伸手拦在右传感器sensor[3]前(还隔着一点距离)
如图所示在loop的for循环中测量了一次sensor[3]对应的距离,for循环中的测距十分正常。
但后面再次测量时,得到的distanceR却始终为0,distanceL依然正常。

void moveStop();
void moveForward();
void moveBackward();
void turnLeft();
void turnRight();    
void avoidance();
void moveRight();
void moveLeft();


// Motor 前左轮
int enFL =8;
int inFL1=2;
int inFL2=3;
// Motor 前右轮
int enFR =9;
int inFR1=4;
int inFR2=5;
// Motor 后左轮
int enBL=12;
int inBL1=6;
int inBL2=7;
// Motor 后右轮
int enBR =13;
int inBR1=10;
int inBR2=11;
int distance=0;

int sensor[4][5]={{24,22,2,0,10},{38,40,3,0,30},{28,30,0,0,11},{39,37,1,0,30}};//后左前右,前两维为端口二维数组第三维为每个绝对方向,第四维为有无墙

int maps[4];//后左前右有无墙
int backWard=0;

void setup() {
  Serial.begin(9600);
  for(int i=1;i<4;i++){
  pinMode(sensor[i][0],OUTPUT);//trigpin
  pinMode(sensor[i][1],INPUT);//echopin
}

  // Set all the motor control pins to outputs
  pinMode(enFL, OUTPUT);
  pinMode(enFR, OUTPUT);
  pinMode(enBL, OUTPUT);
  pinMode(enBR, OUTPUT);
  pinMode(inFL1, OUTPUT);
  pinMode(inFL2, OUTPUT);
  pinMode(inFR1, OUTPUT);
  pinMode(inFR2, OUTPUT); 
  pinMode(inBL1, OUTPUT);
  pinMode(inBL2, OUTPUT); 
  pinMode(inBR1, OUTPUT);
  pinMode(inBR2, OUTPUT);

  
  // Turn off motors - Initial state
  digitalWrite(inFL1,LOW);
  digitalWrite(inFL2,LOW);
  digitalWrite(inFR1,LOW);
  digitalWrite(inFR2,LOW);
  digitalWrite(inBL1,LOW);
  digitalWrite(inBL2,LOW);
  digitalWrite(inBR1,LOW);
  digitalWrite(inBR2,LOW);
}

void loop() {
    for(int i=1;i<4;i++){
  digitalWrite(sensor[i][0],LOW);
  delayMicroseconds(2);
  digitalWrite(sensor[i][0],HIGH);
  delayMicroseconds(10);
  digitalWrite(sensor[i][0],LOW);
  distance = pulseIn(sensor[i][1],HIGH)/58.3;
  Serial.println(distance);
 if(distance<sensor[i][4]){                                                               
    sensor[i][3]=1;
  }}

 if(sensor[3][3]==0){
 
      moveStop();
      turnRight();
      moveStop();
      moveForward();
      delay(1100);
      
    }
    else{
      if(sensor[2][3]==0){
        
           digitalWrite(sensor[3][0],LOW);
  delayMicroseconds(2);
  digitalWrite(sensor[3][0],HIGH);
  delayMicroseconds(10);
  digitalWrite(sensor[3][0],LOW);
  int distanceR = pulseIn(sensor[3][1],HIGH)/58.3;
  Serial.println("L");
   Serial.println(distanceR);//调试用

   
  digitalWrite(sensor[1][0],LOW);
  delayMicroseconds(2);
  digitalWrite(sensor[1][0],HIGH);
  delayMicroseconds(10);
  digitalWrite(sensor[1][0],LOW);
  int distanceL = pulseIn(sensor[1][1],HIGH)/58.3;
  Serial.println("L:");
  Serial.println(distanceL);//调试用



        if(distanceL<=1)
          {moveRight();}
        
        else{
          if(distanceR<=1 &&distanceR!=0)
        {moveLeft();}
          else{
        moveForward();
        delay(10);
          }
        }
      }
      
      else{
        if(sensor[1][3]==0){
          moveStop();
          turnLeft();
          moveStop();
          moveForward();
          delay(1100);
        }
    
      else{
        if(sensor[3][3]==1 && sensor[2][3]==1 &&sensor[1][3]==1)
          {
          moveStop();
          turnRight();
          moveStop();
          turnRight();
          moveStop();
          
          }    
        
        else{
          moveStop();
          }
      }
      }
    }
  for(int i=1;i<4;i++){
    sensor[i][3]=0;
  }

}


img


求解谢谢

引用chatgpt内容作答:
根据您提供的代码,第二次测量距离始终为0的问题可能与以下原因相关:

超声波传感器连接问题:请确保超声波传感器的引脚连接正确,包括触发引脚(trigpin)和回响引脚(echopin)。检查传感器引脚的物理连接,确保没有松动或接触不良。

电路问题:检查电路是否存在任何短路或其他问题。确保传感器的供电和接地是正确的,并且没有其他电路问题干扰传感器的工作。

超声波传感器设置:在每次测量之前,您需要对超声波传感器进行正确的设置。根据您的代码,您使用了以下设置:

digitalWrite(sensor[i][0], LOW);
delayMicroseconds(2);
digitalWrite(sensor[i][0], HIGH);
delayMicroseconds(10);
digitalWrite(sensor[i][0], LOW);

这是触发传感器发射超声波脉冲的代码。请确保这部分代码正确设置了传感器的触发引脚。

测距延迟:在进行连续测量时,超声波传感器需要一定的时间来发送和接收超声波信号。在每次测量之间添加适当的延迟,以确保超声波信号完全返回传感器。

在您的代码中,可以尝试增加以下行来为传感器测量提供足够的延迟:

delay(100); // 在两次测量之间添加适当的延迟时间

这将在两次测量之间添加100毫秒的延迟,以确保超声波信号返回传感器。

请尝试上述建议,并确保您的超声波传感器的引脚连接和设置正确。