Paso 6: La programa lógica
El bloque principal ("Loop") es realmente muy simple:
Busca mensajes en llegar al buffer serial, desde el dispositivo Android verifica si debe ser el modo de control Local o remoto (el valor predeterminado es Local). Compruebe si se utiliza un comando para ejecutar el "programa" (secuencia de pasos). Si es así, ejecútelo. De lo contrario, el "programa" no está completo y aún debe escribir nuevos pasos. Si se define una "nueva posición", agregar al programa de espalda al principio y realice el paso 1 nuevamente.
void loop)
{
checkBTcmd ();
defineLocalRemote ();
execTaskCmd = digitalRead (execTaskPin);
Si (execTaskCmd == || HIGH command == "runon")
{
RunProgram ();
}
otra cosa (de recArmPosition);
comando = "";
}
La función checkBTcmd () monta una cadena con los caracteres de individuos que llega desde el módulo de BT. Se pasa esta cadena a la variable "comando".
La función defineLocalRemote () considera la variable "comando" comprobar si se recibe un comando para cambiar el modo remoto o viceversa. El comando de la alarma también se analiza aquí. Para la lógica del programa, si la "alarma" se activa en el dispositivo Android, el brazo necesariamente debe ir al modo de control remoto.
La función RunProgram () realiza las preparaciones, encender LEDs de encendido / apagado, etc. y sobre todo invocar la función: (ExecuteTask). El último es la función que contiene la lógica de la ejecución de la secuencia de pasos. La función aumenta el envío de los datos de posición al brazo de uno a uno con la herramienta "positionIndex": armPosition (agarre, base, hombro, codo).
Por último, la función que realmente los servos de comandos y escribe los "pasos" es el (recArmPosition). Función de recibir el comando Android, esta función define el posicionamiento de los servos que pueden ser a través de las ollas, o a través de los "reguladores" de la aplicación para Android. Con el cambio de la posición, esta función envía las coordenadas a los servos usando la función armPosition (agarre, base, hombro, codo). La lectura de la posición real de las macetas o deslizadores y la correspondiente activación de servors produce cuando el comando "Guardar" o "Programa" se activa. En ese momento, se incrementa el índice de arrays'position y guarda el paso.
Para simplificar el entendimiento, el código se basaba en funciones específicas. El bloque de configuración, lazo y las funciones descritas son casi todas en el archivo:
MJRoBot_Arm_Robot_Task_Prgm.ino
Las funciones más generales como leer comando BT: void checkBTcmd (); generador de sonidos: anular pitido (pin int, int freq, ms largo) y contra rebotes: debounce booleano (int pin); Están en el archivo:
General_Functions.ino
Un hecho importante. Como el Arduino ejecuta instrucciones basadas en un reloj de 16Mhz, se espera que los botones de control se leen cientos o incluso miles de veces por segundo, por lo tanto, es importante hacer un botón "contra rebotes" que establece el paso de la grabación.
El cuarto y último archivo es:
Arm_Ctrl_and_Display.ino
En este archivo están las ollas de las funciones de la lectura: bool readPotenciometers (); lectura de Android deslizadores: bool readSliders (); colocación de los servos: void armPosition (int gripp, int base, int de hombro, codo int). Las demás funciones que se incluyen en el archivo son para Mostrar datos en la LCD Serial Monitor, alarmas, etc..
El código fuente completo del proyecto puede encontrarse en GITHUB:
https://github.com/Mjrovai/MJRoBot-Programmed-ARM
o aquí en este instructable
El video muestra el brazo robótico 4DOF "meArm" ser programado remotamente mediante la aplicación para Android.