1313
1414#include " Cnosos.h"
1515
16- // Constructor
16+ // Constructores
1717Cnosos::Cnosos (Robot r, byte bits) {
1818 robot = r;
1919 BITS = bits;
2020}
21+ // Constructor por defecto
22+ Cnosos::Cnosos (){
23+ Cnosos (Robot (), 255 );
24+ }
2125// Destructor
2226
2327
@@ -33,50 +37,51 @@ byte Cnosos::siguiente() {
3337 centro = SENSOR_CENTRO ;
3438 dcha = SENSOR_DCHA ;
3539 if (izda && centro && dcha) {
40+ // Se confirma que es una cinta atravesada
41+ delay (TIEMPO_CONFIRMACION );
3642 Serial.println (" Todos activados" );
37- if (SENSOR_IZDA && SENSOR_CENTRO && SENSOR_DCHA ) {
38- // cinta atravesada confirmada
39- bit = 1 ;
40- sigo = false ;
43+ // cinta atravesada confirmada
44+ bit = 1 ;
45+ sigo = false ;
46+ while (SENSOR_IZDA && SENSOR_CENTRO && SENSOR_DCHA ) {
47+ // Mientras haya cinta atravesada, sigue alante
48+ robot.alante ();
4149 }
4250 } else if (!izda && !centro && !dcha) {
51+ // TODO funciona raro, saltos entre sensores entran en esta categoria
4352 Serial.println (" Ninguno activado" );
44- if (!SENSOR_IZDA && !SENSOR_CENTRO && !SENSOR_DCHA ) {
53+ while (!SENSOR_IZDA && !SENSOR_CENTRO && !SENSOR_DCHA ) {
54+ // Mientras haya hueco, sigue alante
55+ robot.alante ();
56+ }
57+ // Si solo se activa el sensor del centro
58+ if (!SENSOR_IZDA && SENSOR_CENTRO && !SENSOR_DCHA ) {
4559 // hueco confirmado
4660 bit = 0 ;
4761 sigo = false ;
4862 }
63+ // Si se activa otro sensor, descartalo; ha sido un error
4964 }
50- // No hay ni hueco ni cinta atravesada todavia. Avanza normalmente .
51- else if (centro) {
65+ // Avanza normalmente a partir de ahora .
66+ if (centro) {
5267 robot.alante ();
5368 } else if (izda) {
5469 robot.rotaIzda ();
70+ Serial.println (" Girando izda" );
71+ // Espera a que se limpie el sensor izquierdo
72+ while (SENSOR_IZDA ){ }
73+ // Mientras haya un hueco, ignoralo
74+ while (!SENSOR_IZDA && !SENSOR_CENTRO && !SENSOR_DCHA ){ };
5575 } else if (dcha) {
5676 robot.rotaDcha ();
77+ Serial.println (" Girando dcha" );
78+ // Espera a que se limpie el sensor derecho
79+ while (SENSOR_DCHA ){ }
80+ // Mientras haya un hueco, ignoralo
81+ while (!SENSOR_IZDA && !SENSOR_CENTRO && !SENSOR_DCHA ){ };
5782 }
83+ Serial.println (" Otro bucle" );
5884 }
59-
60- // Bit identificado. Avanzamos hasta dejarlo atras.
61- robot.alante ();
62- if (bit) {
63- while (SENSOR_IZDA && SENSOR_CENTRO && SENSOR_DCHA );
64- } else {
65- while (!SENSOR_IZDA && !SENSOR_CENTRO && !SENSOR_DCHA );
66- }
67-
68- /*
69- // Bit sobrepasado. Enderezamos si es preciso.
70- while (SENSOR_IZDA || SENSOR_DCHA) {
71- if (SENSOR_IZDA) {
72- robot.rotaIzda();
73- while (SENSOR_IZDA);
74- } else if (SENSOR_DCHA) {
75- robot.rotaDcha();
76- while (SENSOR_DCHA);
77- }
78- }
79- */
8085 robot.para ();
8186 Serial.println (" Bit leido" );
8287 delay (TIEMPO_PENSAR );
@@ -153,8 +158,8 @@ void lee_nodo_B(Cnosos* cn, byte crucesEncontrados, byte id,
153158 * al cruce por el que el robot ha empezado a investigar el nodo.
154159 */
155160void Cnosos::lee_nodo (byte &etiq, byte &grado, byte &entrada) {
156- byte aux = lee_nodo_A (this , etiq);
157- lee_nodo_B (this , aux , etiq, grado, entrada);
161+ byte crucesEncontrados = lee_nodo_A (this , etiq);
162+ lee_nodo_B (this , crucesEncontrados , etiq, grado, entrada);
158163}
159164
160165/*
@@ -189,16 +194,16 @@ void Cnosos::sal(byte aristaATomar, byte grado, byte posicionInicial) {
189194 // Descarta el identificador, no lo necesitamos ahora
190195 lee_numero ();
191196 // La arista actual es 0 (no nos hemos saltado ninguna)
192- aristaActual = 0 ;
197+ aristaSaltada = 0 ;
193198 }else {
194199 // El robot no esta en zona de identificadores
195200 // Si encuentra un identificador, error
196201 if (this ->siguiente () == 0 ){
197202 this ->error ();
198203 }
199204 // El robot acaba de saltarse un cruce
200- // La arista actual aumenta en 1
201- aristaActual ++;
205+ // La arista saltada aumenta en 1
206+ aristaSaltada ++;
202207 }
203208 }
204209
0 commit comments