Étape 5: Code
J’ai écrit une bibliothèque et un exemple de programme utilisant mbed pour une quadcopter que vous pouvez trouver ici. Mbed est beaucoup plus rapide que l’Arduino et il a plus de mémoire que donc il pourrait être utilisé pour la plus grande quadcopter.
I2C & Clash PWM
Avant que le programme pourrait être écrit, il est nécessaire pour faire face à certains problèmes qui surviennent en raison d’un nombre limité de broches sur la carte de la Beetle. Tableau de connexion , il est clair que même si il y a 4 sorties PWM, un de la PWM est également utilisé pour SCL (I2C à MPU6050). Par conséquent deux options - soit utiliser une bibliothèque externe pour adapter I2C sur autres broches ou une bibliothèque externe pour adapter les sorties PWM sur des broches. Les deux options sont disponibles, cependant j’ai choisi spécifiquement d’utiliser la bibliothèque de SoftI2C car apparemment il fonctionne encore mieux que Wire.h lib qui a vitesse spécifique et des problèmes de longueur de fil. Aussi PWM est très important dans notre cas donc que je veux être en mesure de le gérer en aucune façon possible d’ajuster pour un meilleur fonctionnement. Pour cela le code source est disponible sur github. Vous remarquerez qu’il y a
Interrompre le Pin
De documentation Leonardo board a interruptions sur 0, 1, 2, 3 et 7 broches. Broches 0 et 1 sont disponibles, cependant, j’avais prévu de les utiliser pour la communication série (peut-être plus tard sur Télécharger le croquis par l’intermédiaire de bluetooth qui n’est pas difficile à faire, mais nécessite un autre module HC-05). C’est pourquoi une autre bibliothèque externe pourrait être utilisée qui permet d’ajouter une interruption aucune broche « PinChangeInterrupt.h » (par le NicoHood de 2014-2015). Importer que par le biais de Android : Esquisse -> Bibliothèque incluent -> gérer les bibliothèques -> recherche de PinChangeInterrupt. Un exemple de code est donnée qui diffère de la bibliothèque d’interruption régulière par les lignes suivantes :
pinMode (interruptPin, INPUT_PULLUP) ;
attachPinChangeInterrupt(digitalPinToPinChangeInterrupt(interruptPin), postInterruptFunction, RISING) ;
ou
attachPCINT(digitalPinToPCINT(interruptPin), postInterruptFunction, RISING) ;
MPU6050 bibliothèque
MPU6050 bibliothèque est disponible par Jeff Rowberg 2012. Le code de l’exemple fourni MPU6050_DMP6 est utilisé comme le code principal pour le projet.
Si vous avez décidé d’utiliser mon châssis et moteurs, très probablement vous n’aurez pas besoin de modifier le code pas plus que le régulateur PID est déjà fixé pour plus ou moins bonnes performances. Toutefois, si vous utilisez une image différente, vous devrez définir de nouvelles valeurs pour le contrôleur de PID. Il faut un certain temps si vous le faites pour la première fois.