Hola a todos.
Estoy realizando un proyecto fin de curso que consiste en un robot resuelve laberinto, pero no doy con las ordenes adecuadas para que realice el método de girar siempre a la derecha. Si alguien con más conocimientos que yo (que serán la mayoría) me pudiese orientar se lo agradecería.
Dejo copiado el código y a la espera de vuestros buenos consejos.
Estoy realizando un proyecto fin de curso que consiste en un robot resuelve laberinto, pero no doy con las ordenes adecuadas para que realice el método de girar siempre a la derecha. Si alguien con más conocimientos que yo (que serán la mayoría) me pudiese orientar se lo agradecería.
Dejo copiado el código y a la espera de vuestros buenos consejos.
Código:
[COLOR=#7E7E7E]// Ultrasonic - Library for HR-SC04 Ultrasonic Ranging Module.[/COLOR]
[COLOR=#7E7E7E]// Proyecto fin de curso:[/COLOR]
[COLOR=#7E7E7E]// PRADUINO_BOT_113[/COLOR]
[COLOR=#7E7E7E]// BOT RESUELVE LABERINTO[/COLOR]
[COLOR=#7E7E7E]// By: Eumelvi[/COLOR]
[COLOR=#7E7E7E]//se incluye una librería para el control de los sensores SRF05, [/COLOR]
[COLOR=#7E7E7E]//(la librería es para los HR-SC04, pero es válida para los SRF05)[/COLOR]
[COLOR=#7E7E7E]//cortesía de [URL="http://www.ardublog.com"]www.ardublog.com[/URL][/COLOR]
#include <[COLOR=#CC6600]Ultrasonic[/COLOR].h>
[COLOR=#7E7E7E]//definir variables globales:[/COLOR]
[COLOR=#CC6600]Ultrasonic[/COLOR] ultra(7,6); [COLOR=#7E7E7E]// asignamos los pines del sensor delantero llamado ultra(pulso7,Eco6)[/COLOR]
[COLOR=#CC6600]Ultrasonic[/COLOR] ultraDer(9,8); [COLOR=#7E7E7E]// y para el derecho (Trig PIN,Echo PIN)[/COLOR]
[COLOR=#CC6600]int[/COLOR] motor1_a = 3; [COLOR=#7E7E7E]//asignamos los pines de los motores[/COLOR]
[COLOR=#CC6600]int[/COLOR] motor1_b = 4; [COLOR=#7E7E7E]//motor1=derecho[/COLOR]
[COLOR=#CC6600]int[/COLOR] motor2_c = 11; [COLOR=#7E7E7E]//motor2=izquierdo[/COLOR]
[COLOR=#CC6600]int[/COLOR] motor2_d = 12; [COLOR=#7E7E7E]//a-c=adelante/b-d=atrás[/COLOR]
[COLOR=#7E7E7E]//se definen las funciones de los movimientos de motores (direcciones de avance)[/COLOR]
[COLOR=#CC6600]void[/COLOR] adelante() [COLOR=#7E7E7E]//creamos función()[/COLOR]
{
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_a,[COLOR=#006699]HIGH[/COLOR]); [COLOR=#7E7E7E]//se ponen en alto las salidas[/COLOR]
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_b,[COLOR=#006699]LOW[/COLOR]); [COLOR=#7E7E7E]//a-c y en bajo b-d[/COLOR]
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_c, [COLOR=#006699]HIGH[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_d, [COLOR=#006699]LOW[/COLOR]);
}
[COLOR=#CC6600]void[/COLOR] atras()
{
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_a,[COLOR=#006699]LOW[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_b,[COLOR=#006699]HIGH[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_c, [COLOR=#006699]LOW[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_d, [COLOR=#006699]HIGH[/COLOR]);
}
[COLOR=#CC6600]void[/COLOR] paro()
{
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_a,[COLOR=#006699]LOW[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_b,[COLOR=#006699]LOW[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_c, [COLOR=#006699]LOW[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_d, [COLOR=#006699]LOW[/COLOR]);
}
[COLOR=#CC6600]void[/COLOR] derecha()
{
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_a,[COLOR=#006699]LOW[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_b,[COLOR=#006699]HIGH[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_c, [COLOR=#006699]HIGH[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_d, [COLOR=#006699]LOW[/COLOR]);
}
[COLOR=#CC6600]void[/COLOR] izquierda()
{
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_a,[COLOR=#006699]HIGH[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_b,[COLOR=#006699]LOW[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_c, [COLOR=#006699]LOW[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_d, [COLOR=#006699]HIGH[/COLOR]);
}
[COLOR=#CC6600]void[/COLOR] corrDer()
{
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_a,[COLOR=#006699]HIGH[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_b,[COLOR=#006699]LOW[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_c, [COLOR=#006699]LOW[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_d, [COLOR=#006699]LOW[/COLOR]);
}
[COLOR=#CC6600]void[/COLOR] corrIzq()
{
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_a,[COLOR=#006699]LOW[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR](motor1_b,[COLOR=#006699]LOW[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_c, [COLOR=#006699]HIGH[/COLOR]);
[COLOR=#CC6600]digitalWrite[/COLOR] (motor2_d, [COLOR=#006699]LOW[/COLOR]);
}
[COLOR=#CC6600]void[/COLOR] [COLOR=#CC6600][B]setup[/B][/COLOR]()
{
[COLOR=#CC6600][B]Serial[/B][/COLOR].[COLOR=#CC6600]begin[/COLOR](9600); [COLOR=#7E7E7E]//inicializar las comunicaciones serie[/COLOR]
[COLOR=#CC6600]pinMode[/COLOR](motor1_a, [COLOR=#006699]OUTPUT[/COLOR]); [COLOR=#7E7E7E]//pone en salida los pines de los motores[/COLOR]
[COLOR=#CC6600]pinMode[/COLOR](motor1_b, [COLOR=#006699]OUTPUT[/COLOR]);
[COLOR=#CC6600]pinMode[/COLOR](motor2_c, [COLOR=#006699]OUTPUT[/COLOR]);
[COLOR=#CC6600]pinMode[/COLOR](motor2_d, [COLOR=#006699]OUTPUT[/COLOR]);
}
[COLOR=#CC6600]void[/COLOR] [COLOR=#CC6600][B]loop[/B][/COLOR]()
{
[COLOR=#CC6600][B]Serial[/B][/COLOR].[COLOR=#CC6600]print[/COLOR]([COLOR=#006699]"delante: "[/COLOR]); [COLOR=#7E7E7E]//imprime en monitor[/COLOR]
[COLOR=#CC6600][B]Serial[/B][/COLOR].[COLOR=#CC6600]print[/COLOR](ultra.[COLOR=#CC6600]Ranging[/COLOR](CM)); [COLOR=#7E7E7E]//escribe en CM or INC las medidas de los sensores[/COLOR]
[COLOR=#CC6600][B]Serial[/B][/COLOR].[COLOR=#CC6600]print[/COLOR]([COLOR=#006699]" cm "[/COLOR] ); [COLOR=#7E7E7E]//imprime cm despues de los datos medidos[/COLOR]
[COLOR=#CC6600]delay[/COLOR](50); [COLOR=#7E7E7E]//espera hasta escribir la siguiente medicion[/COLOR]
[COLOR=#CC6600][B]Serial[/B][/COLOR].[COLOR=#CC6600]print[/COLOR]([COLOR=#006699]"derecha: "[/COLOR]);
[COLOR=#CC6600][B]Serial[/B][/COLOR].[COLOR=#CC6600]print[/COLOR](ultraDer.[COLOR=#CC6600]Ranging[/COLOR](CM)); [COLOR=#7E7E7E]// CM or INC[/COLOR]
[COLOR=#CC6600][B]Serial[/B][/COLOR].[COLOR=#CC6600]println[/COLOR]([COLOR=#006699]" cm"[/COLOR] );
[COLOR=#CC6600]delay[/COLOR](50);
[COLOR=#CC6600]int[/COLOR] cm, cm2; [COLOR=#7E7E7E]//declara las variables de las medidas de los sensores[/COLOR]
cm=ultra.[COLOR=#CC6600]Ranging[/COLOR](CM); [COLOR=#7E7E7E]//cm= a la medida en cm del sensor delantero[/COLOR]
cm2=ultraDer.[COLOR=#CC6600]Ranging[/COLOR](CM); [COLOR=#7E7E7E]//cm2= a la medida del derecho[/COLOR]
[COLOR=#7E7E7E]//aquí comienzan las órdenes y decisiones que tomará el bot.[/COLOR]
[COLOR=#CC6600]if[/COLOR](cm2>5&&cm2<10)
{
adelante();[COLOR=#7E7E7E]//avanza[/COLOR]
[COLOR=#CC6600]delay[/COLOR](10);[COLOR=#7E7E7E]//10ms[/COLOR]
}
[COLOR=#CC6600]if[/COLOR](cm<8&&cm2>5)
{
derecha();
[COLOR=#CC6600]delay[/COLOR](1);
}
[COLOR=#7E7E7E]/*[/COLOR]
[COLOR=#7E7E7E]if(cm2<9&&cm2>8)[/COLOR]
[COLOR=#7E7E7E] {[/COLOR]
[COLOR=#7E7E7E] adelante(); [/COLOR]
[COLOR=#7E7E7E] delay(1); [/COLOR]
[COLOR=#7E7E7E] paro(); [/COLOR]
[COLOR=#7E7E7E] }[/COLOR]
[COLOR=#7E7E7E] else [/COLOR]
[COLOR=#7E7E7E] {[/COLOR]
[COLOR=#7E7E7E] if (cm2<8) [/COLOR]
[COLOR=#7E7E7E] { [/COLOR]
[COLOR=#7E7E7E] izquierda(); [/COLOR]
[COLOR=#7E7E7E] delay(1);[/COLOR]
[COLOR=#7E7E7E] paro(); [/COLOR]
[COLOR=#7E7E7E] }[/COLOR]
[COLOR=#7E7E7E] else[/COLOR]
[COLOR=#7E7E7E] {[/COLOR]
[COLOR=#7E7E7E] derecha();[/COLOR]
[COLOR=#7E7E7E] delay(1);[/COLOR]
[COLOR=#7E7E7E] paro(); [/COLOR]
[COLOR=#7E7E7E] }[/COLOR]
[COLOR=#7E7E7E] }*/[/COLOR]
}
Última edición por un moderador: