Paso 5: código
Escribí una biblioteca y un programa de ejemplo con mbed para un quadcopter que puedes encontrar en aquí. Mbed para es mucho más rápido que el Arduino y tiene más memoria, así que podría utilizarse para quadcopter más grande.
I2C y choque PWM
Antes de que el programa se podría escribir es necesario para hacer frente a ciertos problemas que se presentan debido a un número limitado de pines disponibles en el tablero del Beetle. Tabla de conexión está claro que a pesar de que hay 4 salidas PWM, uno de lo PWM también se utiliza para SCL (I2C a MPU6050). Por lo tanto, dos opciones - utilice una biblioteca externa para la adaptación de I2C en otros pasadores o una biblioteca externa para la adaptación de salidas PWM en las patas. Ambas opciones están disponibles, sin embargo específicamente opté por usar SoftI2C biblioteca como al parecer trabaja aun mejor que Wire.h lib que tiene velocidad específica y problemas de longitud de alambre. También PWM es muy importante en nuestro caso así que quiero ser capaz de manejar de cualquier manera posible ajustar para un mejor funcionamiento. Código fuente está disponible en github. Te darás cuenta que hay
Interrumpir el Pin
De documentación Leonardo Junta tiene interrupciones de pines 0, 1, 2, 3 y 7. Pines 0 y 1 están disponibles sin embargo planeaba utilizar para comunicación Serial (tal vez más tarde en subir el dibujo a través de bluetooth que no es difícil de hacer pero requiere otro módulo HC-05). Por lo tanto podría utilizarse otra biblioteca externa que permite para añadir una interrupción a cualquier pin "PinChangeInterrupt.h" (de 2014-2015 NicoHood). Que la importación a través de Android: dibujo -> Biblioteca incluyen -> Administrar bibliotecas -> buscar para PinChangeInterrupt. Un ejemplo de código se da que es diferente de la biblioteca de interrupción regular por las siguientes líneas:
pinMode (interruptPin, INPUT_PULLUP);
attachPinChangeInterrupt(digitalPinToPinChangeInterrupt(interruptPin), postInterruptFunction, RISING);
o
attachPCINT(digitalPinToPCINT(interruptPin), postInterruptFunction, RISING);
Biblioteca MPU6050
Biblioteca de MPU6050 está disponible por Jeff Rowberg 2012. El código de ejemplo proporcionado MPU6050_DMP6 se utiliza como el código principal para el proyecto.
Si usted decide utilizar mi marco y motores, más probable es que no necesita modificar el código más como controlador PID ya fue fijado para el funcionamiento más o menos buena. Sin embargo si utilizas un fotograma diferente, se necesita establecer nuevos valores para el controlador PID. Lleva bastante tiempo si lo hace por primera vez.