AX12 gros robot
Fork of command_AX12_gros_robot by
Diff: main.cpp
- Revision:
- 0:a2a44c043932
- Child:
- 1:b3ff77670606
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Mar 15 16:36:50 2017 +0000 @@ -0,0 +1,194 @@ +#include "mbed.h" +#include "AX12.h" +#include "cmsis.h" + + /* DECLARATION VARIABLES */ +Timer t; +Ticker flipper; +static char TAB[25]= {0x01,0x9A, 0x02, 0xFF, 0x00, // socle + 0x02,0x0A, 0x01, 0xFF, 0x00, // bas + 0x05,0xC8, 0x00, 0xFF, 0x00, // milieu + 0x0D,0x90, 0x01, 0xFF, 0x00, // haut + 0x09,0xD2, 0x01, 0xFF, 0x00}; //ventouse + +static char TAB2[25]= {0x01,0xE9, 0x00,0xFF, 0x00, // socle + 0x02,0x2C, 0x01, 0xFF, 0x00, // bas + 0x05,0xA6, 0x00, 0xFF, 0x00, // milieu + 0x0D,0xD2, 0x01, 0xFF, 0x00, // haut + 0x09,0xFF, 0x03, 0xFF, 0x00}; //ventouse + +static char TAB3[25]= {0x01,0xA6, 0x00,0xFF, 0x00, // socle + 0x02,0x6E, 0x01, 0xFF, 0x00, // bas + 0x05,0xE9, 0x00, 0xFF, 0x00, // milieu + 0x0D,0x90, 0x01, 0xFF, 0x00, // haut + 0x09,0xDD, 0x02, 0xFF, 0x00}; //ventouse + + /* ANGLE */ + +/* 10° = 0x21, 0x00 | 110°= 0x6E, 0x01 | 210°= 0xBC, 0x02 + 20° = 0x42, 0x00 | 120°= 0x90, 0x01 | 220°= 0xDD, 0x02 + 30° = 0x64, 0x00 | 130°= 0xB1, 0x01 + 40° = 0x85, 0x00 | 140°= 0xD2, 0x01 + 50° = 0xA6, 0x00 | 150°= 0xF4, 0x01 + 60° = 0xC8, 0x00 | 160°= 0x15, 0x02 + 70° = 0xE9, 0x00 | 170°= 0x36, 0x02 + 80° = 0x0A, 0x01 | 180°= 0x58, 0x02 + 90° = 0x2C, 0x01 | 190°= 0x79, 0x02 + 100°= 0x4D, 0x01 | 200°= 0x9A, 0x02 */ + + + /*static char Tab1[5]={ 0x09, + 0x5E, + 0x01, + 0x70, + 0x01};*/ + + /*static char Tab2[5]={ 0x05, + 0x96, + 0x01, + 0x85, + 0x05};*/ +float angle=0.0; +float test_socle=0.0,test_bas=0.0,test_milieu=0.0,test_haut=0.0,test_ventouse=0.0, test_calcul=0.0, valeur_test=0.0; +int torque_socle=0, torque_bas=0, torque_milieu=0, torque_haut=0, torque_ventouse=0; +int error_torque_socle=0, error_torque_bas=0, error_torque_milieu=0, error_torque_haut=0, error_torque_ventouse=0; + + /* DECLARATION PROTOTYPES & POINTEURS */ + +short vitesse=700; // Vitesse angulaire (0-1023) +AX12 *ventouse_myAX12, *haut_myAX12, *milieu_myAX12, *bas_myAX12, *socle_myAX12, *multiple_AX12 ; +void Init_AX12(void); +void Lecture(void); +void Flip(void); + + + + + /* FONCTIONS */ + +void Init_AX12() // Initialisation des différents paramétres +{ + + ventouse_myAX12-> Set_Goal_speed(vitesse); // vitesse (0-1023) + haut_myAX12-> Set_Goal_speed(vitesse); // vitesse (0-1023) + milieu_myAX12-> Set_Goal_speed(vitesse); // vitesse (0-1023) + bas_myAX12-> Set_Goal_speed(vitesse); // vitesse (0-1023) + socle_myAX12-> Set_Goal_speed(vitesse); // vitesse (0-1023) + + ventouse_myAX12->Set_Mode(0); // Mode Position(0) Mode Continu(1) + haut_myAX12-> Set_Mode(0); // Mode Position(0) Mode Continu(1) + milieu_myAX12-> Set_Mode(0); // Mode Position(0) Mode Continu(1) + bas_myAX12-> Set_Mode(0); // Mode Position(0) Mode Continu(1) + socle_myAX12-> Set_Mode(0); // Mode Position(0) Mode Continu(1) +} + +void Lecture() +{ + angle= socle_myAX12-> Get_Position(); + test_socle = socle_myAX12 -> read_and_test(angle,TAB); + + angle= bas_myAX12-> Get_Position(); + test_bas = bas_myAX12-> read_and_test(angle,TAB); + + angle= milieu_myAX12-> Get_Position(); + test_milieu = milieu_myAX12-> read_and_test(angle,TAB); + + angle= haut_myAX12-> Get_Position(); + test_haut = haut_myAX12-> read_and_test(angle,TAB); + + angle= ventouse_myAX12-> Get_Position(); + test_ventouse = ventouse_myAX12-> read_and_test(angle,TAB); + + valeur_test=test_bas+test_milieu+test_haut+test_socle+test_ventouse; + + #ifdef AX12_DEBUG + printf("\ntest_socle = %f",test_socle); + #endif + #ifdef AX12_DEBUG + printf("\ntest_bas = %f",test_bas); + #endif + #ifdef AX12_DEBUG + printf("\ntest_milieu = %f",test_milieu); + #endif + #ifdef AX12_DEBUG + printf("\ntest_haut = %f",test_haut); + #endif + #ifdef AX12_DEBUG + printf("\ntest_ventouse = %f",test_ventouse); + #endif + #ifdef AX12_DEBUG + printf("\nvaleur_test = %f",valeur_test); + #endif +} + + /* PROGRAMME PRINCIPAL*/ + +int main() +{ + flipper.attach(&Flip, 2.0); + + ventouse_myAX12 = new AX12(p9, p10, 9, 1000000); // Création objet : data pin 9&10, ID moteur 9, baud + haut_myAX12 = new AX12(p9, p10,13, 1000000); // Création objet : data pin 9&10, ID moteur 13, baud + milieu_myAX12 = new AX12(p9, p10, 5, 1000000); // Création objet : data pin 9&10, ID moteur 5, baud + bas_myAX12 = new AX12(p9, p10, 2, 1000000); // Création objet : data pin 9&10, ID moteur 2, baud + socle_myAX12 = new AX12(p9, p10, 1, 1000000); // Création objet : data pin 9&10, ID moteur 1, baud + multiple_AX12 = new AX12(p9,p10,0xFE,1000000); // Création objet : data pin 9&10, ID Broadcast, baud + + multiple_AX12->multiple_goal_and_speed(5,TAB); + + + while(valeur_test<4) + { + Lecture(); + } + + + multiple_AX12->multiple_goal_and_speed(5,TAB2); + + + +} + +void Flip () +{ + + #ifdef AX12_DEBUG + printf("\ntorque_ventouse avant = %d",torque_ventouse); + #endif + + torque_socle= socle_myAX12 -> Get_Torque_Enable(); + torque_bas= bas_myAX12 -> Get_Torque_Enable(); + torque_milieu= milieu_myAX12 -> Get_Torque_Enable(); + torque_haut= haut_myAX12 -> Get_Torque_Enable(); + torque_ventouse=ventouse_myAX12 -> Get_Torque_Enable(); + + + + /*if(torque_socle==1) + { + error_torque_socle=socle_myAX12 -> Set_Torque_Enable(0); + + } + if(torque_bas==1) + { + error_torque_bas=bas_myAX12 -> Set_Torque_Enable(0); + + } + if(torque_milieu==1) + { + error_torque_milieu=milieu_myAX12-> Set_Torque_Enable(0); + + } + if(torque_haut==1) + { + error_torque_haut=haut_myAX12 -> Set_Torque_Enable(0); + + } */ + + error_torque_ventouse=ventouse_myAX12 -> Set_Torque_Enable(0); + //error_torque_ventouse=ventouse_myAX12 -> Set_Torque_Enable(1); + #ifdef AX12_DEBUG + printf("\ntorque_ventouse apres = %d",torque_ventouse); + #endif + +}