首页 > 解决方案 > 我该怎么做才能让我的漫游者在拍照后向左移动

问题描述

目前我正在尝试让我的流浪者驾驶直到他找到一个对象。然后他应该向右走,停下来拍照。在第一次巡视之后,漫游者应该绕着物体行驶,并且应该经常拍照。问题是他首先向右行驶,但总是向前行驶而不是四处行驶。

我已经在这个小组中寻求帮助,他只能移动和开车,但我会为自己尝试他开车但没有成功。

在这里你可以看到我正在使用的 Arduino 代码。

// Define SensorS pins
#define trigPin 15
#define echoPin 2

//Define SensorXL pins
#define trigPinXL 14
#define echoPinXL 13

//Define Raspberry Pin
#define RaspiPin 26

//Define Motor pins
#define motorIn3 16 //Input 3
#define motorIn1 17 //Input 1
#define motorIn4 18 //Input 4
#define motorIn2 19 //Input 2

// Defines variables
long duration;
int distance;

// Define ActivateDistance
const int activateDistance = 40;
const int activateDistance2 =40;

void setup()
{
    // Sets the trigPin as an Output
    pinMode(trigPin, OUTPUT);
    pinMode(trigPinXL, OUTPUT);
    // Sets the echoPin as an Input
    pinMode(echoPin, INPUT);
    pinMode(echoPinXL, INPUT);
    // sets the Motorpins  as outputs:
    pinMode(motorIn1, OUTPUT);
    pinMode(motorIn2, OUTPUT);
    pinMode(motorIn3, OUTPUT);
    pinMode(motorIn4, OUTPUT);
    //Sets Raspberry Pin as output
    pinMode(RaspiPin, OUTPUT);
    // Starts the serial communication
    Serial.begin(9600); 
}

void stop()
{
    // stop motor without duration
    Serial.println("STOP");
    digitalWrite(motorIn1, LOW);
    digitalWrite(motorIn2, LOW);
    digitalWrite(motorIn3, LOW);
    digitalWrite(motorIn4, LOW);
}

void stopp(int duration)
{
    // stop motor without duration
    Serial.println("STOP");
    digitalWrite(motorIn1, LOW);
    digitalWrite(motorIn2, LOW);
    digitalWrite(motorIn3, LOW);
    digitalWrite(motorIn4, LOW);
    delay(duration);
    stop();
}

void left(int duration)
{
    //Motor goes to left
    Serial.println("LEFT");
    digitalWrite(motorIn1, LOW);
    digitalWrite(motorIn2, HIGH);
    digitalWrite(motorIn3, HIGH);
    digitalWrite(motorIn4, LOW);
    delay(duration);
    stop();
}

void right(int duration)
{
    //Motor goes to left
    Serial.println("RIGHT");
    digitalWrite(motorIn1, HIGH);
    digitalWrite(motorIn2, LOW);
    digitalWrite(motorIn3, LOW);
    digitalWrite(motorIn4, HIGH);
    delay(duration);
    stop();
}

void forward(int duration)
{
    //Motor goes forward
    Serial.println("FORWARD");
    digitalWrite(motorIn2, HIGH);
    digitalWrite(motorIn4, HIGH);
    digitalWrite(motorIn3, LOW);
    digitalWrite(motorIn1, LOW);
    delay(duration);
    stop();
}

long get_distance(void)
{
    //get distance from sensor
    // Clears the trigPin
    digitalWrite(trigPin, LOW);
    delayMicroseconds(2);
    // Sets the trigPin on HIGH state for 10 micro seconds
    digitalWrite(trigPin, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPin, LOW);
    // Reads the echoPin, returns the sound wave travel time in microseconds
    duration = pulseIn(echoPin, HIGH);
    // Calculating the distance
    distance = duration * 0.034 / 2;
    return distance;
}

long get_distanceXL(void)
{
    //get distance from sensor
    // Clears the trigPin
    digitalWrite(trigPinXL, LOW);
    delayMicroseconds(2);
    // Sets the trigPin on HIGH state for 10 micro seconds
    digitalWrite(trigPinXL, HIGH);
    delayMicroseconds(10);
    digitalWrite(trigPinXL, LOW);
    // Reads the echoPin, returns the sound wave travel time in microseconds
    duration = pulseIn(echoPinXL, HIGH);
    // Calculating the distance
    distance = duration * 0.034 / 2;
    return distance;
}

int turn = 0;
void loop()
{
    //Define Raspi Pin as Low
    digitalWrite(RaspiPin, LOW);
    // check sensor
    if (get_distance() <= activateDistance)
    {
        // go right for 1 second
        right(1000);
        //stop for 2 seconds
        stopp(2000);
        //make a Photo
        digitalWrite(RaspiPin, HIGH);
        delay(100);
        digitalWrite(RaspiPin, LOW);
        while(turn<4)
        {
          if(get_distanceXL()>activateDistance2)
          {
            //go left for 1 second
            left(1000);
            forward(1000);
            stopp(2000);
            digitalWrite(RaspiPin, HIGH);
            delay(100);
            digitalWrite(RaspiPin, LOW);
            forward(500);
            turn = turn + 1;                                      
          }
          else
            //go forward for 1 second
            forward(500);
            stopp(2000);
            digitalWrite(RaspiPin, HIGH);
            delay(100);
            digitalWrite(RaspiPin, LOW);
            forward(500);
        }
    }

    else
        // go forward for 1 second
        forward(1000);
}

标签: arduinoesp32

解决方案


推荐阅读