Paso 9: P.3, código: implementar la comunicación Serial
A los efectos de este tutorial, voy a suponer que decide utilizar un Arduino con la capacidad de comunicación serial por USB (así, no un Arduino Mini Pro o el chip Atmega desnudo) y que va a utilizar C, C++, u otro lenguaje basado en C como Objective-C (lo que hicimos) en lado del ordenador para controlar el brazo. También se asume que usted está usando un sistema operativo basado en UNIX como linux o OSX (lo que hicimos). El código para enviar serial transmisiones es diferente en windows - todavía puede seguir junto con el resto del tutorial, pero que tendrá que realizar cambios en unas pocas líneas de código (me refiero a popen y pclose, que no funcionan en windows, lo que sé - puedo equivocarme).
El objetivo de su paquete de software todo será determinar un conjunto de coordenadas y Estados de pinza (principalmente, encendido o apagado) para el brazo para elegir y colocar los objetos en el tablero y luego a enviar estas coordenadas como una corriente del servo ángulos a Arduino, que se traduce esta información en pulsos PWM servo. Ya se conocen las ubicaciones de todos los objetos antes de la competición, las ubicaciones será codificado, con la opción de ajustar un poco durante los tres minutos para explicar variaciones leves en el tablero de juego.
Así que vamos a empezar!
La primera tarea es escribir algún código básico que se toma la entrada del usuario desde la consola y enviarlo a Arduino. El microcontrolador entonces responderá estableciendo el ángulo de un servo para el usuario. Error de comprobación de la entrada del usuario no es necesario en este punto ya podemos asumir que en última instancia, las ubicaciones de ángulo del servo codificadas no tendrá errores, y que cualquier usuario de entrada se realizará a través de una GUI que no sufre de errores si el usuario aplasta en las teclas al azar en la consola... porque no hay ser una consola.
En C, popen se utiliza para acceder a los comandos de sistema, tanto como uno haría uso de la línea de comandos. Envío de datos a la Arduino algo como esto sería del lado de la computadora (en Objective-C):
.. .en el archivo .h:
(en la declaración)
NSString * serialPort;
.. .en el archivo .m:
(en el método init)
serialPort = [[NSString alloc] initWithString:
... algo de código...
(en el método de transmisión)
NSString * str = [NSString stringWithFormat: % > toBeSent %, serialPort];
char * toSend = [str UTF8String];
ARCHIVO * remitente = popen (toSend, "r");
pclose(Sender);
Estas líneas de código serían transmitir la cadena toBeSent para el Arduino en puerto serial /dev/tty.usbmodemfd121.
Para encontrar el puerto serie que el Arduino se encuentra en, todo lo que necesita hacer es conectarlo en y mira en el nombre que aparece en Herramientas > Serial Port en la herramienta de código de Arduino. Usted querrá asegurarse de conectar tu Arduino en el mismo puerto USB que el mismo.
La tarea de recuperar la entrada numérica de la consola y el envío a través de la serie se deja al lector... a menos que quieras engañar por echar un vistazo al código de ejemplo incluye. Si construir y ejecutar con Xcode y escriba en números entre 0 y 176 (los límites del servo particular que estábamos probando con), debe generar la misma salida que el cuadro en la parte superior:
SH: /dev/tty.usbmodemfd121: Permiso denegado
No se ven bien! , Sin embargo, nos dice que se llama el comando echo con éxito, pero que no existe ninguna "/ dev/tty.usbmodemfd121". Para solucionar esto, tenemos que conectar un Arduino.