domingo, 13 de abril de 2008

Configuración software

Tras mucho debatir sobre qué implementación era mejor: interrumpir cada vez que el receptor de infrarrojos detecte señal (flanco) o interrumpir periódicamente y mapear el puerto de entrada donde el receptor está conectado; finalmente nos decidimos por la segunda por dos razones:
- Podría ser que el receptor detectara señal en una posición en la que no está realmente el emisor, pero detecta señal debido al ángulo de emisión del emisor. Cómo la interrupción se produciría cuando éste empieza a detectar, seguramente la hormiga se orientaría a una posición incorrecta.
- Con el segundo método, tomamos varias muestras en el tiempo y finalmente la hormiga se orienta a una posición media de ellas.

Y una vez decidido... ¡ a programarlo !
Programamos pues el Timer 2 para que interrumpa cada 50 ms. Vale, nos hemos pasado. Lo cambiaremos a 200ms. En cada interrumpción se llama a la rutina que se encarga de verificar si en el pin 4 del puerto de entrada hay nivel alto. Si hay nivel alto es que el receptor está detectando algo. Guardamos la posición del servo del brazo en un array. Cuando se hayan alcanzado un número de muestras establecdio (establecemos que sean 3), se calcula la media de ellas y se establece un grado de giro en función de este valor.
Problema: Vale, se programa un giro, pero si no se hace nada más, la hormiga siempre estará andando con ese giro y por tanto no se alcanzará la meta.
Solución: No pasa nada. Como esto se está ejecutando por siempre, se repetirá el ciclo y la hormiga se volverá a reorientar con otro ángulo de giro, hasta que detecte al emisor en una posición más o menos en línea recta, momento en el cual se pone a caminar en línea recta.

Pero a la hora de probarlo...
Parece que el sistema funciona. Cuando se detecta un valor alto en el puerto se guardan las posiciones y al alcanzar 3 muestras la hormiga se orienta. Pero no funciona como es debido ya que por causas aún desconocidas siempre se orienta igual y luego no se re-orienta. Continuaremos experimentando...

No hay comentarios: