//Función que revisa los stacks izq y der para saber en qué dirección colocar al robot luego del backtracking
void revisarStacks(Stack *stder,Stack *stizq,Stack *stcamino){
  if(top(stder)==1&&top(stizq)==0) 
  {
    pop(stcamino);
    derecha();
    push(stcamino, -2);
    paso();
  } 
  if(top(stder)==0&&top(stizq)==1) 
  {
    pop(stcamino);
    izquierda();
    push(stcamino, -1);
    paso();
  }
  if(top(stder)==1&&top(stizq)==1) 
  {
    pop(stder);
    push(stder,0);
    derecha();
    push(stcamino, -2);
    paso();
  }

}   
//Función que revisa el stack de camino para regresar al robot hasta a la última bifurcación que encontró
void backtracking(Stack *stder,Stack *stizq,Stack *stcamino)
{
  int valor=0;
  while(top(stcamino)!=0)
  {
    if(top(stcamino)>0)
    {
      valor=top(stcamino);
      pop(stcamino);
      valor=valor*(-1);
      drive_goto(valor,valor);
    }  
    if(top(stcamino)==-1)
    {
      pop(stcamino);
      derecha();
    }
    if(top(stcamino)==-2)
    {
      pop(stcamino);
      izquierda();
    }    
  }
  revisarStacks(stder,stizq,stcamino);   
}
Exemple #3
0
void loop() {
//
//
//
 	if (!digitalread(I)) izquierda();
//
	if (!digitalread(D))  derecha();
	ServoWrite(LI,500); // enciende los led y varia su brillo
	ServoWrite(LD,20);
	adelante();
	
}
Exemple #4
0
cuadrado cuadrado:: dameCuadradoIzquierdo(GLdouble angulo)
{
	//GLdouble h=sqrt(2)*distancia/2.0;
	GLdouble h=distancia*sin(3.1416*angulo/180.0);
	cuadrado izquierda(esquina_superior_izquierda,h);
	izquierda.creaCuadrado(direccion-90-angulo);
	if (red!=0)
		izquierda.setRed(red-0.1);
	else
		izquierda.setRed(0);
	if (green!=1)
		izquierda.setGreen(green+0.1);
	else 
		izquierda.setGreen(1);
	if (blue!=0)
		izquierda.setBlue(blue-0.01);
	else
		izquierda.setBlue(0);
	return izquierda;
}
Exemple #5
0
int main()                                    // Main function
{
  low(26);
  low(27);
  
	// Add startup code here.
	while(1)
	{
	 	if(revisarDerecha()==1 && revisarAdelante()==1){
        derecha();
      }     
		while(revisarAdelante()==1&&revisarDerecha()==0){
        recto();    
	   }
    if(revisarAdelante()==0&&revisarDerecha()==1){
        derecha();    
	   }
    if(revisarAdelante()==0&&revisarDerecha()==0){
        izquierda();    
	   }
  }
}  
//Función main que tiene un while infinito para llamar a todas las funciones en cada ciclo, para que el robot resuelva el laberinto
int main()                                   
{
  //Se crean los stacks
  Stack *stder = createStack(100); 
  Stack *stizq = createStack(100);
  Stack *stcamino = createStack(100);
  while(1){

    revisar();
    magia(stder,stizq,stcamino);

    if(ade==1){
      paso();
    }
    else if(der==1){
      derecha();
      paso();
    }
    else if(izq==1){
      izquierda();
      paso();
    }  
  }   
}