Ligne 47 : |
Ligne 47 : |
| | | |
| =Actionneurs= | | =Actionneurs= |
| + | |
| + | =Explication Programme= |
| + | Le programme peut être séparé en 3 principales parties : |
| + | - Le Main.c et FreeRTOS |
| + | - Les fichiers de configuration |
| + | - Les tâches |
| + | ==Main.c et FreeRTOS== |
| + | |
| + | ==Les fichiers de configuration== |
| + | |
| + | ===Odometry=== |
| + | ====MCP233.c==== |
| + | Ce fichier contient les commandes permettant de configurer le moteur |
| + | ====rbtMovement.c==== |
| + | On trouvera ici toutes les commandes de déplacement pour le robot |
| + | |
| + | <syntaxhighlight lang="c"> |
| + | void rbtMovement Init ( uint16_t whDist , uint16_t dmWh1, uint16_t dmWh2, |
| + | uint16_t ticks 1 , uint16_t ticks 2 ) |
| + | </syntaxhighlight> |
| + | |
| + | Cette fonction permet de configurer les encodeurs : |
| + | |
| + | 1. whDist = distance entre les 2 encodeurs |
| + | |
| + | 2. dmWh1 et dmWh2 = diamètre en mm de chaque encodeur |
| + | |
| + | 3. ticks1 et ticks2 = nombre de ticks par rotation des encodeurs |
| + | |
| + | <syntaxhighlight lang="c"> |
| + | void rbtMove ( int32_t dist ) //Deplacement du robo t en ligne droite en mm |
| + | void rbt_turn ( int16_t angle ) // Rotation du robot en degre |
| + | </syntaxhighlight> |
| + | |
| + | |
| + | <syntaxhighlight lang="c"> |
| + | static void rb tS ta teMachine ( int32_t targetEncoderCountsM1 , int32_ttargetEncoderCountsM2 ) |
| + | </syntaxhighlight> |
| + | |
| + | Cette fonction permet de recevoir l’état du robot : |
| + | |
| + | 1. BLOCKED = le robot ne bouge pas |
| + | |
| + | 2. READY_TO_SEND = prêt à envoyer une commande |
| + | |
| + | 3. IDLE = prêt à recevoir une commmande |
| + | |
| + | 4. BUSY = En train d’exécuter une commande |
| + | |
| + | 5. PAUSED = une commande a été annulée, le mouvement doit reprendre avant de repasser en état IDLE |
| + | |
| + | 6. RESUMING = compléte la commande qui a été annulée avant de repasser en IDLE |
| + | |
| + | ==Tâches== |
| + | |
| + | ===movementTask.c=== |
| + | |
| + | Les taches que le robot pourra effectuer Pour l’instant il n'y en a qu’une seule : movement-Task.c |
| + | |
| + | <syntaxhighlight lang="c"> |
| + | #include "movementTask.h" |
| + | #include "rbtMovement.h" |
| + | #include "MCP233.h" |
| + | |
| + | |
| + | /* Variables */ |
| + | |
| + | robotState_t robotState = BLOCKED; |
| + | |
| + | |
| + | /* Task */ |
| + | |
| + | void StartSendMovementCmd(void const * argument){ |
| + | /******** Initializations ********/ |
| + | //TODO measure accurately |
| + | |
| + | rbtMovementInit(265, 88, 88, 4096, 4096); |
| + | drive_forward(0); //making sure that the MCP command buffer is empty |
| + | |
| + | robotState = IDLE; |
| + | |
| + | /******** Movement path command list ********/ |
| + | |
| + | /*Aller retour x2*/ |
| + | |
| + | rbtMove(1000); //distance en mm |
| + | rbt_turn(180); //angle en degres, (-) pour tourner a gauche et (+) pour tourner a droite |
| + | rbtMove(1000); |
| + | rbt_turn(180); |
| + | |
| + | while(1){ |
| + | osDelay(1); //boucle pour debugger, le programme devrait rester bloquer ici a la fin de son execution |
| + | } |
| + | |
| + | /* USER CODE END 5 */ |
| + | } |
| + | |
| + | </syntaxhighlight> |