Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带有超声波传感器(避障)代码的手势控制汽车无法正常工作_C++_Arduino_Arduino Uno - Fatal编程技术网

C++ 带有超声波传感器(避障)代码的手势控制汽车无法正常工作

C++ 带有超声波传感器(避障)代码的手势控制汽车无法正常工作,c++,arduino,arduino-uno,C++,Arduino,Arduino Uno,我正在做一个项目,在这个项目中,我正在制作一辆带有三个超声波传感器的手势控制汽车,下面是我编写的代码,但代码没有正常工作。当左、右或前传感器与障碍物之间的距离小于6厘米时,它应相应地避开障碍物,但它不是这样工作的,相反,它会向后移动并停止重复此操作 基本上,此代码应按以下方式工作: 从HT12D获取输入 检查针脚10、针脚11、针脚12或针脚13是否高或低,即1或0 Arduino将接受这一输入并做出相应的决定。 代码如下: #include <NewPing.h> #define

我正在做一个项目,在这个项目中,我正在制作一辆带有三个超声波传感器的手势控制汽车,下面是我编写的代码,但代码没有正常工作。当左、右或前传感器与障碍物之间的距离小于6厘米时,它应相应地避开障碍物,但它不是这样工作的,相反,它会向后移动并停止重复此操作

基本上,此代码应按以下方式工作:

从HT12D获取输入 检查针脚10、针脚11、针脚12或针脚13是否高或低,即1或0 Arduino将接受这一输入并做出相应的决定。 代码如下:

#include <NewPing.h>
#define Q0 0//connect pin 10 of HT12D to arduino D0
#define Q1 1//connect pin 11 of HT12D to arduino D1
#define Q2 2//connect pin 12 of HT12D to arduino D2
#define Q3 3//connect pin 13 of HT12D to arduino D3
#define TRIGGER_PIN 4//connect trigpin of ultrasonic sensor 1 to arduino D4
#define TRIGGER_PIN1 5//connect trigpin of ultrasonic sensor 2 to arduino D5
#define TRIGGER_PIN2 6//connect trigpin of ultrasonic sensor 3 to arduino D6
#define ECHO_PIN 7//connect echopin of ultrasonic sensor 1 to arduino D7
#define ECHO_PIN1 8//connect echopin of ultrasonic sensor 2 to arduino D8
#define ECHO_PIN2 9//connect echopin of ultrasonic sensor 3 to arduino D9
#define P1 10//connect D10 of arduino to pin 2 of L293D
#define P2 11//connect D11 of arduino to pin 7 of L293D
#define P3 12//connect D12 of arduino to pin 15 of L293D
#define P4 13//connect D13 of arduino to pin 10 of L293D
#define MAX_DISTANCE 200//Maximum distance we want to ping (in cm)
long duration, distance, RightSensor, FrontSensor, LeftSensor;

void setup() 
{
  Serial.begin (9600);
pinMode(TRIGGER_PIN, OUTPUT);
pinMode(ECHO_PIN, INPUT);
pinMode(TRIGGER_PIN1, OUTPUT);
pinMode(ECHO_PIN1, INPUT);
pinMode(TRIGGER_PIN2, OUTPUT);
pinMode(ECHO_PIN2, INPUT);
pinMode(Q0, INPUT);
pinMode(Q1, INPUT);
pinMode(Q2, INPUT);
pinMode(Q3, INPUT);
pinMode(P1, OUTPUT);
pinMode(P2, OUTPUT);
pinMode(P3, OUTPUT);
pinMode(P4, OUTPUT);

}

void loop() 
{ 
NewPing sonar(TRIGGER_PIN, ECHO_PIN);//pings fornt sensor
RightSensor = distance;
NewPing sonar1(TRIGGER_PIN1, ECHO_PIN1);//pings right sensor
LeftSensor = distance;
NewPing sonar2(TRIGGER_PIN2, ECHO_PIN2);//pings left sensor
FrontSensor = distance;

Serial.print(LeftSensor);
Serial.print(" - ");
Serial.print(FrontSensor);
Serial.print(" - ");
Serial.println(RightSensor);
if(RightSensor>5 && LeftSensor>5 && FrontSensor>5)//if the bot is in safe zone then
  {
    if(Q0==1 && Q1==0 && Q2==1 && Q3==0)
    forward_();
    else if(Q0==0 && Q1==1 && Q2==0 && Q3==1)
     backward_();
    else if(Q0==1 && Q1==0 && Q2==0 && Q3==1)
     right_();
    else if(Q0==0 && Q1==1 && Q2==1 && Q3==0)
     left_(); 
  }
else if(FrontSensor<=5)
 {
   if(LeftSensor>5 && RightSensor<5)
   {
    backward_();
    delay(250);
    left_();
    delay(500);
   }
   else if(RightSensor>5 && LeftSensor<5)
   {
   backward_();
   delay(250);
   right_();
   delay(500);
   }
   else if(RightSensor<5 && LeftSensor<5)
   {
   backward_();
   delay(250);
   stop_();
   delay(500);
 }
}
else if(LeftSensor<=5)
 {
  right_();
  delay(250);
  backward_();
  delay(500);
 }
else if(RightSensor<=5)
{
  left_();
  delay(250);
  backward_();
  delay(500);
}

}

void stop_()
{
  Serial.println("");
  Serial.println("STOP");
  digitalWrite(P1,LOW);
  digitalWrite(P2,LOW);
  digitalWrite(P3,LOW);
  digitalWrite(P4,LOW);
}
void forward_()
{
  Serial.println("");
  Serial.println("FORWARD");
  digitalWrite(P1,HIGH);
  digitalWrite(P2,LOW);
  digitalWrite(P3,HIGH);
  digitalWrite(P4,LOW);
}
void backward_()
{
  Serial.println("");
  Serial.println("BACKWARD");
  digitalWrite(P1,LOW);
  digitalWrite(P2,HIGH);
  digitalWrite(P3,LOW);
  digitalWrite(P4,HIGH);
}
void left_()
{
  Serial.println("");
  Serial.println("LEFT");
  digitalWrite(P1,LOW);
  digitalWrite(P2,HIGH);
  digitalWrite(P3,HIGH);
  digitalWrite(P4,LOW);
}
void right_()
{
  Serial.println("");
  Serial.println("RIGHT");
  digitalWrite(P1,HIGH);
  digitalWrite(P2,LOW);
  digitalWrite(P3,LOW);
  digitalWrite(P4,HIGH);
}

您从未实际测量过距离,这会导致所有右/前/左传感器小于5

代码中出现错误的地方:

NewPing sonar(TRIGGER_PIN, ECHO_PIN);//pings fornt sensor
RightSensor = distance;
已声明变量“距离”,但从未指定值。我很惊讶你没有得到编译错误

根据NewPing库的文档,请阅读-请阅读!:

首先创建一个NewPing对象。你说对了——新的触发针,回声针;。但是,这不是“执行ping”,而是创建一个可用于执行ping的对象。因此,您应该在void设置中执行此操作。你只需要创建一次声纳,三次一次,即:前、左、右,然后每次敲击同一个物体


接下来,在void循环中,您可以使用RightSensor=sonar.ping_cm;这将ping传感器并以厘米为单位返回距离。

这是关于检测手势或障碍物的吗?请关注问题并通过忽略其他内容来创建一个。实际上,问题在于机器人无法检测障碍物,它只能返回并停止并重复,相反,它应该接受输入并避开障碍物