Paso 15: Notas sobre el bosquejo
Tres aspectos del bosquejo valen el mencionar:
Biblioteca de la dirección
No sólo hace de biblioteca dirección de lectura y escritura a los pines de Arduino mucho más rápido, también permite tratar los pernos como variables.
En vez de escribir
uso sólo puede escribir
Biblioteca PinChangeInt
PinChangeInt le da acceso a interrupciones de pasador en todos los pines de Arduino. Esta biblioteca fue esencial para la codificación de la rutina de medición ultrasónico sin el uso de la función pulseIn .
Hay nada malo con pulseIn per se, salvo el hecho de que es función de bloqueo, es decir, hasta que el borde del pulso se detecta (o hasta un tiempo de espera) nada está sucediendo. Desde dibujo calabaza está escrito con la cooperativa multitaskling en mente, esto es inaceptable.
En lugar de utilizar pulseIn, el proceso de ultrasonido se divide en 3 pasos principales:
- Activar el pulso ultrasónico
- Trampa eco pin interrupción en el borde de subida (Inicio conteo microsegundos)
- Trampa eco pin interrupción en el borde de la caída (parada contando microsegundos)
Mientras está de viaje eco, microcontrolador puede ejecutar otras tareas.
Para más detalles, consulte dibujo de.
Biblioteca de TaskScheduler
TaskScheduler implementa la multitarea cooperativa para microcontroladores Arduino.
Una vez utilizas TaskScheduler, programación Arduino transforma en definir una serie de "tareas" que el dispositivo tiene que hacer, y las interacciones entre ellos.
Por ejemplo, la calabaza se tiene que hacer lo siguiente:
- Detección de movimiento
- Mida la distancia
- Ojos de "Wink" cuando se detecta movimiento
- 3 color LED "resplandor" cuando se detecta cierta distancia
- ": Grito" cuando alguien está muy cerca
Además, son necesarias 3 tareas específicas "hardware"
- Tarea para el control de los ojos (wink y abrir y cerrar)
- Tarea de control de motores (vibrar por un tiempo específico)
- Tarea de control LED (resplandor)
Cada una de las funciones anteriores se crea como una tarea. Por ejemplo:
tMotion tarea ejecuta una vez, y método de las llamadas MotionDetectedCallback, que se encarga de decidir lo que debe ocurrir una vez que se detecta movimiento basado en la distancia.
tarea tTimeout pone calabaza detrás para dormir si no hay actividad ocurrió durante 1 minuto.
TDistance tarea ejecuta cada 100 milisegundos y desencadena la medición ultrasónica de la distancia.
Hay una coordinación especial se requiere entre tareas independientes puesto que programador es cuidar de él.
Las dependencias explícitas entre las tareas se reflejan en el código de métodos de devolución de llamada, por ejemplo:
una vez que se detecta movimiento, la tarea de detección de movimiento:
- Reinicia la tarea de tiempo de espera
- Permite la medición (si no estaba habilitada ya) a distancia
- Comprueba si calabaza ya está guiñando un ojo, que brilla intensamente o gritando
- Si no, comienza la tarea de "guiño"
Para más información sobre TaskScheduler consulte la página de documentación en arduino.cc
Para más detalles consulte también la página de dibujo.