- Robot Maker
- → Affichage d'un profil : Messages: huntor
Statistiques de la communauté
- Groupe Membres
- Messages 4
- Visites sur le profil 4 495
- Titre Nouveau membre
- Âge 36 ans
- Date de naissance Juillet 13, 1988
-
Gender
Homme
0
Neutral
Outils utilisateur
Messages que j'ai postés
Dans le sujet : VBnette
09 août 2012 - 03:07
Si tu connais la taille maximal de ta requête. Il te faut mettre sa taille max +1 donc on va dire que tes moteurs vont de 0 à 100% en marche avant et arrière se qui fait pour chaque moteur maximum 5 caractère (1 pour le type, 1 pour le sens et 3 pour la vitesse) vue que tu en as deux donc 2*5=10 caractère + 2 de contrôle ce qui fait une taille de 12+1=13.
Dans le sujet : VBnette
09 août 2012 - 01:56
Désoler mon programme précédent ne fonctionnait pas donc je l'ai donc refait depuis le début
Si tu ne comprend pas quelque chose n’hésite pas à demander. Après je ne connais pas la librairie que tu utilise pour commander tes moteurs, j'ai donc mis en commentaire cette partie.
//#include <SabertoothSimplified.h> //SabertoothSimplified ST(Serial1); //Created Objet sabertooth using serial1 char commande[40]; int gSpeed,dSpeed; int gSens, dSens; boolean allData; int indice=0; int mode=0; char c; /* Protocol de communication : Bit de start 'S' + Choix du moteur 'G'ou'D' + sens '-' pour marche arrière ou rien pour marche avant + vitesse du moteur en % + bit de fin 'E' Exemple = "SG67D-56E" Moteur gauche à 67% en marche avant et Moteur droit à 56% en marche arrière */ void setup() { Serial.begin(9600);// port série de communication pc//Arduino //Serial1.begin(38400); // This is the baud rate (SERIAL1) you chose with the sabertooth's DIP switches. } void loop() { if (Serial.available())// si réception de donnée { // read the incoming byte: c = Serial.read(); commande[indice++]=c;// incrémentation du buffer // say what you got: // Serial.print("I received: "); //Serial.println(c); if(c=='E')//Réception du bit de fin { allData=true; } } if(allData && indice) { for(int i=0; i<indice; i++)// analyse du buffer { switch (commande[i]) { case 'S': Serial.println("Reception des donnees"); break; case 'G': mode=1; break; case 'D': mode=2; break; default: break; } if(mode==1)//Réception des données du moteur gauche { //Serial.println("mode1"); if(commande[i]=='-')// caractère '-' pour indiquer la marche arrière { gSens=2; }else gSens=1; if (commande[i] >= '0' && commande[i] <= '9') { gSpeed = gSpeed * 10 + (commande[i]-'0');// "(commande[i]-'0')" converti le Char en Int } } if(mode==2)//Réception des données du moteur droit { //Serial.println("mode2"); if(commande[i]=='-')// caractère '-' pour indiquer la marche arrière { dSens=2; }else dSens=1; if (commande[i] >= '0' && commande[i] <= '9') { dSpeed = dSpeed * 10 + (commande[i]-'0');// "(commande[i]-'0')" converti le Char en Int } } }//fin analyse //ST.motor(gSens, gSpeed); Serial.print("Moteur gauche : "); if(gSens==1)Serial.print("Marche avant "); else if(gSens==2) Serial.print("Marche arriere "); Serial.print(gSpeed,DEC); Serial.println (" %"); //ST.motor(dSens, dSpeed); Serial.print("Moteur droit : "); if(dSens==1)Serial.print("Marche avant "); else if(dSens==2) Serial.print("Marche arriere "); Serial.print(dSpeed,DEC); Serial.println (" %"); gSpeed=0; dSpeed=0; indice=0; allData=false; } }
Si tu ne comprend pas quelque chose n’hésite pas à demander. Après je ne connais pas la librairie que tu utilise pour commander tes moteurs, j'ai donc mis en commentaire cette partie.
Dans le sujet : VBnette
09 août 2012 - 10:02
J'ai modifier le code pour qu'il te conviens. Si tu veut que le moteur tourne en marche arrière tu as juste a rajouter un '-' devant la valeur
Apres si ça ne marche pas, affiche la chaîne de caractère que tu reçoit pour vérifier qu'elle est bonne.
Apres si ça ne marche pas, affiche la chaîne de caractère que tu reçoit pour vérifier qu'elle est bonne.
#include <SabertoothSimplified.h> SabertoothSimplified ST(Serial1); //Created Objet sabertooth using serial1 /** * Command Line Interface for Arduino * * Julien Holtzer for www.pobot.org * * 18 mars 2009, late in the night */ // numerical value to be decoded after specific commands int value = 0; // where we currently are in the sequence construction or decoding int indice = 0; // the sequence of characters where is stored what the user wants char commande[40]; // reduce the length to save memory (if necessary) int sensg=0; int sensd=0; int tempg; int tempd; /** * */ void setup() { Serial.begin(9600); Serial1.begin(38400); // This is the baud rate (SERIAL1) you chose with the sabertooth's DIP switches. } /** * */ void loop() { // Start a new reception, reinit the browser index of the array indice = 0; // Fill-in the sequence of chars with all received characters while (Serial.available()) { commande[indice++] = Serial.read(); } // End the array with a specific character (E=End) // (means that you can't choose 'E' as a user meaning command commande[indice] = 'E'; // Don't continue the loop if no command (adapt to your own code) if (indice == 0) return; // DEBUG Display that a new sequence has been found //Serial.print("> Received command, length="); //Serial.println(indice); // Start parsing the sequence array indice = 0; while (commande[indice] != 'E') { // Reinit the numerical value value = 0; // switch (commande[indice]) { case 'S': Serial.println("> Start command."); break; case 'G': // Continue to the next char (could contain the numerical value indice++; if(commande[indice]=='-') { sensg=2; indice++; }else sensg=1; while (commande[indice] >= 48 && commande[indice] <= 57) { value = value * 10 + (commande[indice]-48); // next digit indice++; } // Back if no more digit to be added to numerical value indice--; // Serial.print("sensg= "); // Serial.println(sensg); tempg=value; ST.motor(sensg, tempg); Serial.print("> servo gauche : "); if(sensg==1)Serial.print("Marche avant "); else if(sensg==2) Serial.print("Marche arriere "); Serial.print(tempg,DEC); Serial.println (" %"); break; case 'D': // Continue to the next char (could contain the numerical value indice++; if(commande[indice]=='-') { sensd=2; indice++; }else sensd=1; while (commande[indice] >= 48 && commande[indice] <= 57) { value = value * 10 + (commande[indice]-48); // next digit indice++; } // Back if no more digit to be added to numerical value indice--; //Serial.print("sensd= "); // Serial.println(sensd); tempd=value; ST.motor(sensd, tempd); Serial.print("> servo droit : "); if(sensd==1)Serial.print("Marche avant "); else if(sensd==2) Serial.print("Marche arriere "); Serial.print(tempd,DEC); Serial.println (" %"); break; default: //Serial.print("> unrecognized command : "); //Serial.println(commande[indice]); break; } indice++; } }
Dans le sujet : VBnette
09 août 2012 - 08:37
Salut,
Juste en regardant vite fait le code on peut voir:
Donc si tu n'as pas le caractère 'E' à la fin de ta chaîne de caractère le programme risque de ne pas marcher.
Juste en regardant vite fait le code on peut voir:
// End the array with a specific character (E=End) // (means that you can't choose 'E' as a user meaning command commande[indice] = 'E';
Donc si tu n'as pas le caractère 'E' à la fin de ta chaîne de caractère le programme risque de ne pas marcher.
- Robot Maker
- → Affichage d'un profil : Messages: huntor
- Privacy Policy