Juntar codigos em c++

estou a mais de 4 HORAS tentando solucionar esse problema,eu estou querendo juntar 2 codigos onde um segue linha e outro desvia de obstaculos,eu preciso por favor saber como posso juntar os dois para um projeto da escola

primeiro codigo:
#include <AFMotor.h>
#include <NewPing.h>
#include <Servo.h>

#define TRIG_PIN A0
#define ECHO_PIN A1
#define MAX_DISTANCE 100 //200
#define MAX_SPEED 100 // sets speed of DC motors
#define MAX_SPEED_OFFSET 20

NewPing sonar(TRIG_PIN, ECHO_PIN, MAX_DISTANCE);

AF_DCMotor motor3(3, MOTOR34_1KHZ);
AF_DCMotor motor4(4, MOTOR34_1KHZ);
Servo myservo;

boolean goesForward=false;
int distance = 150;//150
int speedSet = 0;

void setup() {

myservo.attach(10);
myservo.write(115);
delay(2000);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
}

void loop() {
int distanceR = 0;
int distanceL = 0;
delay(40);

if(distance<=35)
{
moveStop();
delay(100);
moveBackward();
delay(300);
moveStop();
delay(200);
distanceR = lookRight();
delay(200);
distanceL = lookLeft();
delay(200);

if(distanceR>=distanceL)
{
turnRight();
moveStop();
}else
{
turnLeft();
moveStop();
}
}else
{
moveForward();
}
distance = readPing();
}

int lookRight()
{
myservo.write(50);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
}

int lookLeft()
{
myservo.write(170);
delay(500);
int distance = readPing();
delay(100);
myservo.write(115);
return distance;
delay(100);
}

int readPing() {
delay(70);
int cm = sonar.ping_cm();
if(cm==0)
{
cm = 250;
}
return cm;
}

void moveStop() {
motor3.run(RELEASE);
motor4.run(RELEASE);

}

void moveForward() {

if(!goesForward)
{
goesForward=true;
motor3.run(FORWARD);
motor4.run(FORWARD);

for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
motor3.setSpeed(speedSet);
motor4.setSpeed(speedSet);

delay(5);

}
}
}

void moveBackward() {
goesForward=false;
motor3.run(BACKWARD);
motor4.run(BACKWARD);

for (speedSet = 0; speedSet < MAX_SPEED; speedSet +=2) // slowly bring the speed up to avoid loading down the batteries too quickly
{
motor3.setSpeed(speedSet);
motor4.setSpeed(speedSet);

delay(5);

}
}

void turnRight() {
motor3.run(FORWARD);
motor4.run(BACKWARD);

delay(500);
motor3.run(FORWARD);
motor4.run(FORWARD);

}
void turnLeft() {
motor3.run(BACKWARD);
motor4.run(FORWARD);

delay(500);
motor3.run(FORWARD);
motor4.run(FORWARD);

}
segundo codigo:
#include <AFMotor.h>

//defining pins and variables
#define lefts A3
#define rights A2

//defining motors
AF_DCMotor motor3(4, MOTOR12_8KHZ);
AF_DCMotor motor4(3, MOTOR12_8KHZ);

void setup() {

//setting the speed of motors
motor3.setSpeed(90);
motor4.setSpeed(90);
//declaring pin types
pinMode(lefts,INPUT);
pinMode(rights,INPUT);
//begin serial communication
Serial.begin(9600);

}

void loop(){
//printing values of the sensors to the serial monitor
Serial.println(analogRead(lefts));
Serial.println(analogRead(rights));
//line detected by both
if(analogRead(lefts)<=400 && analogRead(rights)<=400){
//stop
motor3.run(FORWARD); //RELEASE
motor4.run(FORWARD); //RELEASE
}
//line detected by left sensor
else if(analogRead(lefts)<=400 && !analogRead(rights)<=400){
//turn left
motor3.run(FORWARD); //BACKWARD
motor4.run(BACKWARD); //FORWARD

}
//line detected by right sensor
else if(!analogRead(lefts)<=400 && analogRead(rights)<=400){
//turn right
motor3.run(BACKWARD); //FORWARD
motor4.run(FORWARD); //BACKWARD

}
//line detected by none
else if(!analogRead(lefts)<=400 && !analogRead(rights)<=400){
//stop
motor3.run(RELEASE);//
motor4.run(RELEASE);//

}

}
quem puder me ajudar pfv

Olá! Bem vindo ao Forum.

Os dois programas já funcionam corretamente com o seu hardware quando operados separadamente?

Se sim, use o seguidor de linha como base e:

  1. acrescente no código o trecho relativo à leitura do sensor ultrassônico. Veja se funciona corretamente;
  2. acrescente a lógica do que o carro deve fazer quando encontrar um obstáculo.

Como é seu primeiro post, não se esqueça de ler o tópico Como Obter o Melhor desse Forum. Ele tem dicas importantes sobre como fazer para ser ajudado de forma mais eficiente.

qual seria exatamente o trecho?

É, pensando bem, há um bocado de trechos diferentes lendo a distância. Mas você tem uma função que faz isso:

int readPing() {
delay(70);
int cm = sonar.ping_cm();
if(cm==0)
{
cm = 250;
}
return cm;
}

Ao invés de ler em diferentes pontos do programa, como você está fazendo em lookLeft() e lookRight(), você pode chamar ela de dentro dessas funções.

Uma outra dica é que em aplicações como essa (tanto seguir linha como desviar de objetos) não é uma boa ideia usar delays. A função delay() para toda a execução do programa até que passe o tempo estipulado. Nesse período os sensores não serão lidos e você pode imaginar o resultado, né?

Eu acho que você precisava dar um passo atrás e começar a fazer o seu programa do zero, entendendo como cada coisa funciona e controlando cada uma delas separadamente (motores, sonar e depois acrescentando as lógicas).

Esse trecho mesmo do seu setup(), eu não sei pra que serve:

distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);
distance = readPing();
delay(100);

O que você entende que essas linhas estão fazendo?

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.