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
1 utilisateur(s) li(sen)t ce sujet
0 members, 1 guests, 0 anonymous users













