User Guide
lista. Cuando compiles el código AVR Studio compila automáticamente todos los ficheros del
proyecto.
8.c Mano izquierda contra el muro
Una estrategia básica para solucionar laberintos se llama “left hand on the wall”. Imagínate
– uno típico, rodeado de muros – y pones tu mano
izquierda sobre el muro para seguir el camino varias veces. Puedes girar a izquierda siempre que
signed char fo
eft)
n() corresponden a los valores usador por turn(), siempre que
ctamente en el bucle principal.
La estrategia del programa se encuentra en el fichero
maze-solve.c. Muy importante, si queremos
a ruta recorrida hay que crear una matriz de almacenamiento de hasta
100 datos que serán los mismos caracteres utilizados en la función turn(). También tenemos que
n loop” se encuentra en la función maze_solve(), que es llamada después de la
ta función incluye dos bucles principales – el primero en donde
lica la solución para mejorar el
ind the goal, we use break; to get out of this)
an infinite loop - we can re-run the maze as many
caminando por un laberinto de verdad
sea posible y solo puedes girar a derecha en una intersección. Algunas veces cuando vas a parar
a un callejón sin salida debes girar 180º y retornar por donde has venido. Supongamos que a lo
largo del trayecto no hay bucles, tu mano viajaría a lo largo de cada tramo del muro de la misma
manera y al final encontrarías la salida. Si hay una habitación en algún lugar del laberinto con
un monstruo o algún tesoro, encontrarás el camino, ya que recorres cada pasillo exactamente dos
veces. Usamos esta sencilla y fiable estrategia en nuestro 3pi como solución al ejemplo:
1. // maze solving. It uses the variables found_left, found_straight, and
2. // This function decides which way to turn during the learning phase of
3. // found_right, which indicate whether there is an exit in each of the
4. // three directions, applying the “left hand on the wall” strategy.
5. char select_turn(unsigned char found_left, unsigned char found_straight, un
und_right)
6. {
7. // Make a decision about how to turn. The following code
8. // implements a left-hand-on-the-wall strategy, where we always
9. // turn as far to the left as possible.
if(found_l10.
11. return ‘L’;
12. else if(found_straight)
13. return ‘S’;
ht) 14. else if(found_rig
15. return ‘R’;
16. else
17. return ‘B’;
18. }
ct_turLos valore devueltos por sele
estas funciones trabajen corre
8.d Bucle(s) principal
hacer un seguimiento de l
hacer un seguimiento de la longitud actual del camino para que sepamos que valores poner en la
matriz.
1. char path[100] = “”;
2. unsigned char path_length = 0; // the length of the path
El “mai
calibración, desde main.c. Es
“manualmente” se resuelve el laberinto y el segundo donde se rep
tiempo. De hecho, el segundo bucle es en realidad un bucle dentro de un bucle, ya que queremos
ser capaces de reproducir la solución varias veces. He aquí un esbozo del código:
1. // This function is called once, from main.c.
2. void maze_solve()
3. {
4. while(1)
5. {
N LOOP BODY 6. // FIRST MAI
// (when we f7.
8. }
ow enter9. // N
10. // times as we want to.
11. while(1)
12. {










