Paso 23:
La programación.
Para capturar los datos de RC estoy usando una simple función de Arduino llamada pulseIn(). Puedes ver toda la referencia en la página de Arduino. Descubrí esta función mientras que googlear "joystick de control de radio al arduino" y encuentra este gran ejemplo de Sparkfun.
Todo el código está disponible en github.
Hay una carpeta llamada "RC_reader" con un programa que capta todos los canales RC 6 e imprime valores crudos a la consola. Utilizando este código, estoy leyendo datos desde el RC, ahora solo falta asignar datos a un formato utilizable (0 - 1023) o (0 - 255) o (0 - 180).
--
El código tiene tres funciones importantes:
asignar valores crudos de RC a valores utilizables
rc_mapper();
asignar valores utilizables a valores PWM
motionMapper();
controles de movimiento con sensor de infrarrojos y control RC
motionControl();
--
rc_mapper() - mapas de la palanca de mando para una unidad diferenciada y una vez más google hizo mi día, de lo contrario todavía sería estar luchando con este componente. Esta función le dará dos valores 'left_vertical' y 'right_horizontal' que se utilizará más adelante para asignar la velocidad a los motores.
motionMapper() - todos los de origen para esta función pueden ser visto aquí. Tuve que hackear este poco de código para utilizar con el Motoruino2, porque los motores son en un uC de esclavo, estoy usando una función para configurar el PWM para ambos motores.
motionControl() - utiliza sólo los valores que viene de los motionMapper() y los envía a través de la función setPWM (leftMotor, rightMotor).
--
También estoy usando la perilla derecha del control remoto para ajustar la velocidad máxima.
--
También hay un Sensor de distancia Sharp que se utiliza para evitar colisiones. En el control de movimiento estoy probando la distancia, y si está por debajo de 100 el bot funciona normalmente, si está más allá de 100 y por debajo de 200 se mueve lentamente, y si está más allá de 200 paradas. Siempre puede moverse hacia atrás, todavía hay algunos tweak que quiero hacer aquí, por ejemplo, quiero ser capaz de habilitar o deshabilitar esta característica en tiempo de ejecución.
De la luz estoy usando uno de los palillos con 3 posiciones. Cada posición da un valor, cada valor corresponderá a un estado de luz.
No a mucho que decir sobre el control del servo. Sólo hay que verificar los límites del curso para evitar colisiones con otros componentes en el bot.
Todo el código está disponible y comentada en GitHub.