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.![Smile :) :)](data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)
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: