un exemple de code complet les utilisant ?
Non pas vraiment : j'ai repris le principe que je fais dans un autre code et ait écrit les fonctions pour correspondre à vos cas directement sur le forum juste pour vous ( "vous "car ça intéresse Telson aussi normalement ^^ ) et pour tous ceux qui viendront lire le sujet.
Du coup vu que j'ai écrit sans tester, j'ai pas vérifier, c'est possible qu'il y ait une eurreur de frappe ou d'inattention qui se soit glissé, mais sur le principe la logique est bonne.
Mais si tu as des questions hésites pas à les poser ! =)

Problème avec shield servo PCA9685
#21
Posté 15 juillet 2016 - 02:47
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
#22
Posté 15 juillet 2016 - 03:56
ok merci Mike118 ;-)
oui j'ai repris ton code comme base sur un nouveau sketch mais je me demande comment tu fais pour passer tes variables ...
j'en suis la pour l'instant !
#include <Wire.h> #include <Adafruit_PWMServoDriver.h> // called this way, it uses the default address 0x40 Adafruit_PWMServoDriver pwm = Adafruit_PWMServoDriver(); #define SERVOMIN 150 // this is the 'minimum' pulse length count (out of 4096) #define SERVOMAX 590 // this is the 'maximum' pulse length count (out of 4096) const int DePin = 3; int servoNum = 0; const int maxNum = 5; void runServo() { for( servoNum=0;servoNum<maxNum; servoNum++) { pwm.setPWM(servoPin[servoNum],0,targetPos[servoNum]); currentPos[servoNum] = targetPos[servoNum]; } } void setTargetPos(){ for(servoNum=0;servoNum<maxNum; servoNum++) { timeServo[servoNum]=timeServo[servoNum]+1; if( timeServo[servoNum]> tempo[servoNum]) { timeServo[servoNum]=0; if(currentPos[servoNum]<(finalPos[servoNum]-pas[servoNum])) { targetPos[servoNum]= currentPos[servoNum]+ pas[servoNum]; } else if(currentPos[servoNum]>(finalPos[servoNum]+pas[servoNum]) { targetPos[servoNum] = currentPos[servoNum]- pas[servoNum]; } else targetPos[servoNum] = finalPos[servoNum]; } } } void setup() { pinMode(DePin, OUTPUT); digitalWrite(DePin, LOW); Serial.begin(9600); Serial.println("K ARM ROBOT"); pwm.begin(); delay(1000); pwm.setPWMFreq(60); yield(); } void loop() { runServo(); setTargetPos(); }
donc si je comprends bien il faut un tableau avec la séquence ?
#23
Posté 15 juillet 2016 - 10:19
#define NSERVO 6 uint8_t servoPin[NSERVO]; // pas forcément utile si on met les servo dans l'ordre mais utilise si jamais on veut facilement changer les ordres des servos uint16_t targetPos[NSERVO]; // position intérmédiaire targété pour avoir un mouvement soft uint16_t timeServo[NSERVO]; // temps passé pour chaque servo uint8_t tempo[NSERVO]; // Temps à passer avant d'avancer d'un pas pour chaque servo uint16_t currentPos[NSERVO]; // position courante pour chaque servo uint16_t finalPos[NSERVO]; // position finale pour chaque servo uint8_t pas[NSERVO]; // pas pour chaque servo
Si mon commentaire vous a plus laissez nous un avis !
Nouveau sur Robot Maker ?
Jetez un oeil aux blogs, aux tutoriels, aux ouvrages, au robotscope aux articles, à la boutique et aux différents services disponible !
En attendant qu'une bibliothèque de fichiers 3D soit mise en place n'hésitez pas à demander si vous avez besoin du fichier 3D d'un des produits de la boutique... On l'a peut être !
Si vous souhaitez un robot pilotable par internet n'hésitez pas à visiter www.vigibot.com et à lire le sous forum dédié à vigibot!
Répondre à ce sujet

0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users