Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 2:62ccfb1a8e17, committed 2017-06-07
- Comitter:
- Cointepas
- Date:
- Wed Jun 07 18:26:34 2017 +0000
- Parent:
- 1:87582f792133
- Commit message:
- final;
Changed in this revision
main.cpp | Show annotated file Show diff for this revision Revisions of this file |
mbed.bld | Show annotated file Show diff for this revision Revisions of this file |
diff -r 87582f792133 -r 62ccfb1a8e17 main.cpp --- a/main.cpp Sat May 27 16:20:06 2017 +0000 +++ b/main.cpp Wed Jun 07 18:26:34 2017 +0000 @@ -5,6 +5,13 @@ #include <sstream> +using namespace std; + +DigitalOut led1(LED1); +DigitalOut led2(LED2); +DigitalOut led3(LED3); +DigitalOut led4(LED4); + /* ************************************************************ */ /* Déclarations variables globales et fonctions pour HMC5883L */ /* ************************************************************ */ @@ -15,44 +22,72 @@ void hmc_config(void); void hmc_lecture(void); -/* ********************************************* */ -/* Déclarations des var globales moteur */ +/* ************************************************** */ +/* Déclarations des var globales de communication */ +/* ************************************************** */ +Serial conf(p9, p10); +Serial pc(USBTX, USBRX); + /* ********************************************* */ -DigitalOut led1(LED1); -DigitalOut led2(LED2); -DigitalOut led3(LED3); - -Serial conf(p13, p14, 9600); //(tx, rx, baud) -AX12 myax01 (p9, p10, 1); -AX12 myax02 (p9, p10, 2); -AX12 myax06 (p9, p10, 6); - +/* Déclarations des var globales de position */ +/* ********************************************* */ int moteur1i; int moteur2i; int moteur3i; -int checkmot1; -int checkmot2; -int checkmot3; +/* ********************************************* */ +/* Déclarations des var globales de position */ +/* ********************************************* */ +bool flag; -void lecture_12octets(void); +/* ********************************************* */ +/* Déclarations des var globales moteur */ +/* ********************************************* */ +AX12 myax01 (p28, p27, 1); +AX12 myax02 (p28, p27, 2); +AX12 myax03 (p28, p27, 3); +AX12 myax04 (p28, p27, 6); + +/* ********************************************* */ +/* Déclarations des var globales des relever de position */ +/* ********************************************* */ +float checkmot1; +float checkmot2; +float checkmot3; +float checkmot4; + +void Lecture(void); void envoi_position(void); void lecture_position(void); void envoi_12octets(void); + int main() { - - lecture_12octets(); + led1 = 1; + Lecture(); + led1 = 0; + led2 = 1; envoi_position(); + led2 = 0; + led3 = 1; hmc_config(); + led3 = 0; + led4 = 1; hmc_lecture(); + led4 = 1; + led1 = 1; lecture_position(); + led1 = 0; + led2 = 1; envoi_12octets(); - + led1 = 1; + led2 = 1; + led3 = 1; + led4 = 1; - pc.printf("\nBx=%d, By=%d, Bz=%d\n\r",Bx*4.35,By*4.35,Bz*4.35); + // pc.printf("\nBx=%d, By=%d, Bz=%d\n\r",Bx*4.35,By*4.35,Bz*4.35); @@ -66,6 +101,7 @@ /* ************************************** */ void hmc_config(void) { + conf.baud(9600); //Variable interne à la fonction. char config_hmc[2]; config_hmc[0]=0x00; // adresse registre A @@ -103,88 +139,105 @@ wait(0.07); } - + /* ********************************************* */ + /* Fonction de lecture de la trame */ /* ********************************************* */ - /* Fonction de lecture de la trame sur 12 Octets */ - /* ********************************************* */ - - void lecture_12octets(void) -{ - //Variable interne a la fonction. + +void Lecture(void) { + string trame; //Trame complète. stringstream sstr; //stringstream permet de faire la liaison entre le string de départ et le int sortant. - int cchecksum; //Octet permetant le controle de 'checksumi'. - string start1; //Octet de start. - int start1i; //'start1' converti en int. - string start2; //Octet de start. - int start2i; //'start2' converti en int. + int cchecksum = 0; //Octet permetant le controle de 'checksumi'. string moteur1; //Octet de position moteur1. string moteur2; //Octet de position moteur2. string moteur3; //Octet de position moteur3. string checksum; //Octet du checksum. int checksumi; //'checksum' converti en int. - char tablecture[7]; //Tableau de reception - - led1 = 1; - conf.gets(tablecture, 12); //Récupère la trame complète sur 12 Octets dans un trableau de char. - ttrame = tablecture; //Copie le contenue de 'tablecture' dans 'trame'. - wait (2.0); - led1 = 0; - led2 = 1; + char tablecture[15]; //Tableau de reception + char reception[1]; + int tablecturei[15]; //Tableau de reception converti en int + string tab; //Octet de start. + int tabi[14]; //'start1' converti en int. + string start1; //Octet de start. + int start1i; //'start1' converti en int. + string start2; //Octet de start. + int start2i; //'start2' converti en int. + string start3; //Octet de start. + int start3i; //'start1' converti en int. + string start4; //Octet de start. + int start4i; //'start2' converti en int. + conf.baud(9600); + + + //tablecture = conf.getc(); - start1 = trame.substr(0,2); //Enregistrement de deux Nombres à partir de 0. - sstr << start1; //Stock le contenue du string 'start1' dans le buffer 'sstr'. - sstr >> dec >> start1i; //Enregistre le contenue du buffer 'sstr' en hexa dans l'int 'start1i'. - sstr.clear(); //Vide le buffer de 'sstr'. + for(int i = 0; i<15; i++){ + conf.gets(reception, 2); + pc.printf("\nreception = %s \n",reception); + trame += reception; + //tablecture[i] = conf.getc(); //Récupère la trame complète sur 15 Octets dans un trableau de char. + //conf.scanf("%d", &tablecture[i]); + //pc.printf("\ntablecture[%d] = %s \n",i,tablecture[i]); + //pc.printf("\ntablecturei[%d] = %d \n",i,tablecturei[i]); + //trame = tablecture[i]; + } - start2 = trame.substr(2,2); //Enregistrement de deux Nombres à partir de 2. - sstr << start2; //Stock le contenue du string 'start2' dans le buffer 'sstr'. - sstr >> dec >> start2i; //Enregistre le contenue du buffer 'sstr' en hexa dans l'int 'start2i'. - sstr.clear(); //Vide le buffer de 'sstr'. + //trame = tablecture; //Copie le contenue de 'tablecture' dans 'trame'. + pc.printf("\ntrame = %s \n",trame); + led1 = 1; - moteur1 = trame.substr(4,2); //Enregistrement de deux Nombres à partir de 4. + for(int i=0; i<13; i++){ + tab = trame.substr(i,1); + tabi[i] = tab[0]; + cchecksum += tabi[i]; + pc.printf("\ntab[%d] = %s \n", i, tab); + pc.printf("\ntabi[%d] = %d \n", i, tabi[i]); + pc.printf("\ncchecksum = %d \n",cchecksum); + } + + pc.printf("\ncchecksum = %d \n",cchecksum); + moteur1 = trame.substr(4,3); //Enregistrement de deux Nombres à partir de 4. sstr << moteur1; //Stock le contenue du string 'start2' dans le buffer 'sstr'. sstr >> dec >> moteur1i; //Enregistre le contenue du buffer 'sstr' en hexa dans l'int 'start2i'. sstr.clear(); //Vide le buffer de 'sstr'. + pc.printf("\nmoteur1 = %s \n",moteur1); + pc.printf("\nmoteur1i = %d \n",moteur1i); - moteur2 = trame.substr(6,2); //Enregistrement de deux Nombres à partir de 6. + moteur2 = trame.substr(7,3); //Enregistrement de deux Nombres à partir de 6. sstr << moteur2; //Stock le contenue du string 'start2' dans le buffer 'sstr'. sstr >> dec >> moteur2i; //Enregistre le contenue du buffer 'sstr' en hexa dans l'int 'start2i'. sstr.clear(); //Vide le buffer de 'sstr'. + pc.printf("\nmoteur2 = %s \n",moteur2); + pc.printf("\nmoteur2i = %d \n",moteur2i); - moteur3 = trame.substr(8,2); //Enregistrement de deux Nombres à partir de 8. + moteur3 = trame.substr(10,3); //Enregistrement de deux Nombres à partir de 8. sstr << moteur3; //Stock le contenue du string 'start2' dans le buffer 'sstr'. sstr >> dec >> moteur3i; //Enregistre le contenue du buffer 'sstr' en hexa dans l'int 'start2i'. sstr.clear(); //Vide le buffer de 'sstr'. led2 = 0; + pc.printf("\nmoteur3 = %s \n",moteur3); + pc.printf("\nmoteur3i = %d \n",moteur3i); - checksum = trame.substr(10,2); //Enregistrement de deux Nombres à partir de 10. + checksum = trame.substr(13,2); //Enregistrement de deux Nombres à partir de 10. sstr << checksum; //Stock le contenue du string 'checksum' dans le buffer 'sstr'. sstr >> dec >> checksumi; //Enregistre le contenue du buffer 'sstr' en hexa dans l'int 'checksumi'. sstr.clear(); //Vide le buffer de 'sstr'. + pc.printf("\nchecksum = %s \n",checksum); + pc.printf("\nchecksumi = %d \n",checksumi); - cchecksum = start1i + start2i + moteur1i + moteur2i + moteur3i; //Additionne les valeurs et les enregistres dans 'vhecksum'. + cchecksum = cchecksum % 256; //'cchecksum' % 256. + pc.printf("\ncchecksum = %d modulo 256\n",cchecksum); + cchecksum = cchecksum % 100; //'cchecksum' % 100. + pc.printf("\ncchecksum = %d modulo 100\n",cchecksum); - wait (0.5); - led3 = 1; - - if((cchecksum ) == checksumi){ //Si le calcul du 'vhecksum' est égale a "checksumi" - //cout << "Trame valide" << endl; //Trame validé. - for(int d = 0; d<10; d++){ - led1 = 1; - wait (4.0); - } + if((cchecksum) == checksumi){ + led2 = 1; + flag = 1; } else{ - //cout << "Error 01-checksum attendu '" << hex << uppercase << (vhecksum & 0xFF) << "'" << endl; //Trame fausse. - while(1){ - led2 = 1; - led3 = 1; - wait (2.0); - led3 = 0; - wait (2.0); - } + led3 = 1; + flag = 0; } } @@ -192,30 +245,38 @@ /* Fonction d'envoi de position moteur */ /* ********************************************* */ - void envoi_position(void){ - myax01.SetGoal(moteur1i); // go to 100 degrees - myax02.SetGoal(moteur2i); - myax06.SetGoal(moteur3i); - } +void envoi_position(void){ + int moteur4i; + myax01.SetGoal(moteur1i); //Va a la position 'moteur1i'. + wait(0.25); //Attente de 0.25sec avant de commencer a placer le moteur suivant. + myax02.SetGoal(moteur2i); //Va a la position 'moteur2i'. + wait(0.25); //Attente de 0.25sec avant de commencer a placer le moteur suivant. + myax03.SetGoal(moteur3i); //Va a la position 'moteur3i'. + moteur4i = 300 - moteur3i; //Calcul pour la position du moteur myax03.SetGoal. + myax04.SetGoal(moteur4i); //Va a la position 'moteur4i'. + wait(3); + } /* ********************************************* */ /* Fonction de lecture de position moteur */ /* ********************************************* */ - void lecture_position(void){ - checkmot1 = myax01.GetGoal(); - checkmot2 = myax02.GetGoal(); - checkmot3 = myax06.GetGoal(); - } - +void lecture_position(void){ + checkmot1 = myax01.GetPosition(); //Récupération de la position du moteur 'myax01'. + checkmot2 = myax02.GetPosition(); //Récupération de la position du moteur 'myax02'. + checkmot3 = myax03.GetPosition(); //Récupération de la position du moteur 'myax03'. + checkmot4 = myax04.GetPosition(); //Récupération de la position du moteur 'myax04'. + } /* ********************************************* */ /* Fonction d'envoi de la trame sur 12 Octets */ /* ********************************************* */ void envoi_12octets(void){ + Serial conf(p13, p14); //(tx, rx, baud) //Varible interne a la fonction int start3 = 0xFF; //Octet de start int start4 = 0xFF; //Octet de start int echecksum; //Octet de Checksum + conf.baud(9600); led1 = 0;
diff -r 87582f792133 -r 62ccfb1a8e17 mbed.bld --- a/mbed.bld Sat May 27 16:20:06 2017 +0000 +++ b/mbed.bld Wed Jun 07 18:26:34 2017 +0000 @@ -1,1 +1,1 @@ -https://mbed.org/users/mbed_official/code/mbed/builds/4eea097334d6 \ No newline at end of file +http://mbed.org/users/mbed_official/code/mbed/builds/63bcd7ba4912