Olá ![]()
Estou fazendo TCC e to travado na programação ![]()
Bem o projeto é composto por : O arduino mega com o shield l293d + 2 sensores HC SR-04 numa plataforma com 2 motores DC feita por mim mesmo (imitando aquelas que é só comprar).
E como funciona : Os 2 sensores indicam o obstaculos, por exemplo, se o sensor da esquerda detectar q ha algo perto demais e o da direita detectar q o caminho esta livre o robo fara uma curvar a direita para desviar do obstaculo.
Meu problema : como comandar os motores de acordo com as leituras dos sensores.
eis a programação
#include <NewPing.h>
#include <AFMotor.h>
#define MAX_DISTANCE 300
#define LEFT_TRIGGER_PIN 14
#define LEFT_ECHO_PIN 15
#define RIGHT_TRIGGER_PIN 16
#define RIGHT_ECHO_PIN 17
NewPing sensorLeft = NewPing(LEFT_TRIGGER_PIN, LEFT_ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
NewPing sensorRight = NewPing(RIGHT_TRIGGER_PIN, RIGHT_ECHO_PIN, MAX_DISTANCE); // NewPing setup of pins and maximum distance.
AF_DCMotor motor(1); // Motor da direita
AF_DCMotor motor2(2); // Motor da esquerda
void setup()
{
Serial.begin(9600);
}
void loop()
{
// Wait 50ms between pings (about 20 pings/sec). 29ms should be the shortest delay between pings.
delay(50);
// Send ping, get ping time in microseconds (uS) then convert to CM.
unsigned int left = sensorLeft.ping() / US_ROUNDTRIP_CM;
unsigned int right = sensorRight.ping() / US_ROUNDTRIP_CM;
Serial.print("Left: ");
Serial.print(left);
Serial.print(" | Right: ");
Serial.print(right);
Serial.println("");
switch (left >= 1 || right >= 1)
{
case 1: // IR PARA FRENTE
left >= 15 || right >= 15;
Serial.println("CASE 1");
motor.setSpeed(255);
motor2.setSpeed(255);
motor.run(FORWARD);
motor2.run(FORWARD);
break;
case 2: // IR PARA TRAS
left <= 5 || right <= 5;
//Serial.println("CASE 2");
motor.setSpeed(255);
motor2.setSpeed(255);
motor.run(BACKWARD);
motor2.run(BACKWARD);
break;
case 3: // VIRAR PARA A DIREITA
left <= 15 || right >= 10;
//Serial.println("CASE 3");
motor.setSpeed(255);
motor2.setSpeed(255);
motor.run(BACKWARD);
motor2.run(FORWARD);
delay(1000);
break;
case 4: // VIRAR PARA A ESQUERDA
left >= 10 || right <= 15;
//Serial.println("CASE 4");
motor.setSpeed(255);
motor2.setSpeed(255);
motor.run(FORWARD);
motor2.run(BACKWARD);
delay(1000);
break;
default: // PARA TUDO
motor.setSpeed(0);
motor2.setSpeed(0);
motor.run(RELEASE);
motor2.run(RELEASE);
return;
}
}
Bem oq acontece é que quando coloco esse programa pra rodar ele fica travado no CASE 1 e se eu desplugar os sensores(ou eles derem leitura 0cm) ele vai para o Default, não sei como resolver( por isso to aqui :P).
Alguem tem alguma idéia de como sair disso? To usando o comando case mas não axo um exemplo mais elaborado dele na net, só os basicos q não me dão muita idéia de como funciona extamente.
Bem é isso, espero resposta e ja agradeço por ter lido até aqui ![]()
Ps: eu fiz esse projeto baseado nesse Tutorial: Aplicação com Plataforma Robótica Magician + Arduino - YouTube
esse projeto do link é muito simples, o carro SÓ VIRA PRA ESQUERDA!
quero algo mais incremetado mas não sei programação, faz 1 semana q comecei a programa ![]()