comment utiliser 2 potentiométre pour un servo moteur

bonjour a tous et a toute

voila je debute dan l arduino,
j'ai bien comprie le code pour gerer la vitesse de boucle entre O et 180°
j'ai bien compri le code de placement de l'angle
mais c est a cette etape que je bug
j'aimerai pouvoir que lors de mon reglage de mon angle de depart (de mon potentiométre 1) fasse le changemet comme mon point de depart de ma boucle
je vous remercie d'avance de votre aide
bonne soirée a vous

Pas bien compris ce que vous dites mais si vous voulez qu’une valeur entière X soit le point de départ d’une boucle il suffit d’écrirefor (int i = X; i <= 180; i++) {...}

Et si X provient d’une lecture du potentiomètre connecté sur A0

int X = analogRead(A0);
X = map(X, 0, 1023, 0, 180);

ceci j'ai bien compris
j'explique mon projet créé une boucle avec un servomoteur avec un potentiométre de vitesse et un potentométre qui gere le point de depart de la boucle
les 2 separe je sais le faire mais comment mettre les 2 ensemble dans l'ecriture c'est la que sa me pause souci

Si tu nous montrais ton (tes) code(s) et que l'on discute autour de quelque chose de clair ce serait sans doute plus productif.

A mon avis il ne faut pas de boucle (for, while) il faut sans doute utiliser millis() et laisser la loop tourner - éventuellement avec une petite machine à état.

Postez vos deux codes que vous souhaitez intégrer

bonjour,
merci pour tous vos retour pour m’aidez voici les 2 code que j’aimerai integrée

voici le 1 er

#include <Servo.h>

Servo myservo;  

int potpin = 0;  // potar gestion point 0
int val; 
int potar = 1;  // potar gestion vitesse de boucle
int val1   

void setup() {
  myservo.attach(9); 
}

void loop() {
  val = analogRead(potpin);            
  val = map(val, 0, 1023, 0, 180);     
  myservo.write(val);                 
  delay(15);                           
}

voici le 2 eme

#include <Servo.h>

Servo myservo;  
 
int potar = 1;  // potar gestion vitesse de boucle
int val1   

void setup() {
  myservo.attach(9); 
}

{
 
  for(pos = 0; pos <= 180; pos += 1) 
  {     
    checkPot();
    myservo1.write(pos); 
    delayMicroseconds(val); 
  }
  for(pos = 180; pos>=0; pos-=1)     
  {                               
    checkPot();
    myservo1.write(pos); 
    delayMicroseconds(val); 
  }
}
 
void checkPot(){
  val1 = analogRead(potpin1);            
  val1 = map(val, 0, 1023, 100, 20000);  
}

voila 2 code ou je n’ai rien inventé
donc la je dit d’allez du point 0 a 180 et 180 a 0
donc il me faut trouver comment dire que 0 peut changer par rapport au potar du 1 er code

merci de votre aide

corrigez votre post ci dessus et rajoutez les code tags autour du code:
[code]`` [color=blue]// votre code ici[/color] ``[/code].

ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)

ben comme dans ma réponse #1

for (int [color=red][b]i = X[/b][/color]; i <= 180; i++) {...}

et pour le retour il faudra faire un

for (int i = 180; [color=red][b]i >= X[/b][/color]; i--) {...}

je te remercie pour t'on retour mon post est modifier
je comprend bien le I=X mais se X comment le dedier au code du 1 er c'est cette logique que j'ai du mal a capté
merci de t'on aide c'est cool

Tu veux que X varie avec la position du potentiomètre il me semble.
Donc tu pourrais peut-être faire une analogie entre ce X et le val que tu as dans le premier code tu ne penses pas?

oui c’est bien sa sauf qu’avec se 1 er potentiometre je change la valeur de mon point 0
donc dans mon potentiometre de vitesse il ne faut pas que j’ecrive

for(pos = 0; pos <= 180; pos += 1)

mais

for(pos = val; pos <= 180; pos += 1)

c’est bien sa?

je debute j’asseye de comprendre
merci de votre aide

Essayez :slight_smile:

sa ne marche pas sniiff
du moin il m’indique des erreur pourtant j’ai juste fait des copie collé de code qui fonctionne correctement séparement

est ce une erreur de parenthése ou d’ordre d’ecriture?

#include <Servo.h>

Servo myservo;

int potpin = 0;  // potar gestion point 0
int val;
int potar = 1;  // potar gestion vitesse de boucle
int valu

void setup() {
  myservo.attach(9);
}

void loop() {
  val = analogRead(potpin);
  val = map(val, 0, 1023, 0, 180);
  myservo.write(val);
  delay(15);
}

{

  for (pos = val; pos <= 180; pos += 1)
  {
    checkPot();
    myservo1.write(pos);
    delayMicroseconds(valu);
  }
  for (pos = 180; pos >= val; pos -= 1)
  {
    checkPot();
    myservo1.write(pos);
    delayMicroseconds(valu);
  }
}

void checkPot() {
  valu = analogRead(potar);
  valu = map(val, 0, 1023, 100, 20000);
}

Bonjour moonlight59

moonlight59:
du moin il m'indique des erreur pourtant j'ai juste fait des copie collé de code qui fonctionne correctement séparement

est ce une erreur de parenthése ou d'ordre d'ecriture?

Pour la 1ère erreur le compilateur vous indique précisement le lieu et la cause de l'erreur :

sketch_dec30a:10:1: error: expected initializer before 'void'

Regardez attentivement la ligne précédente :

int valu

Idem pour la 2ème erreur :
sketch_dec30a:21:1: error: expected unqualified-id before '{' token

Regardez la """ } """ précédente : à quoi sert-elle?

Pour les 3ème à 6ème erreurs , je vous laisse chercher.

Le copier-coller doit se faire avec prudence et attention !

Cordialement,
bidouilleelec

bidouilleelec:
Bonjour moonlight59
Pour la 1ère erreur le compilateur vous indique précisement le lieu et la cause de l'erreur :

sketch_dec30a:10:1: error: expected initializer before 'void'

Regardez attentivement la ligne précédente :

int valu

Idem pour la 2ème erreur :
sketch_dec30a:21:1: error: expected unqualified-id before '{' token

Regardez la """ } """ précédente : à quoi sert-elle?

Pour les 3ème à 6ème erreurs , je vous laisse chercher.

Le copier-coller doit se faire avec prudence et attention !

Cordialement,
bidouilleelec

je te remercie pour t'on aide j'avence
j'ai choisi la technique du copier coller pour comprendre la logique (etre sur d'avoir des code bon de base en solo)
j'était conscient que la superposition de code pris a droite et a gauche n'allez pas forcement marché de suite
c'est pour cela que je demande pas qu'on face le code a ma place mais m'orienter dans la reflexion
comme je debute j'ai pence que cette technique est pas trop mal pour comprendre les chose
et oui je sais que le copier collé a c'est limite

encore merci de votre aide je continu a résoudre mais erreur et encore quelque ligne a change et sa sera bon je pense

#include <Servo.h>

Servo myservo;

int potpin = 0;  // potar gestion point 0
int val;
int potard = 1;  // potar gestion vitesse de boucle
int valu;


void setup()
{
  myservo.attach(9);
}

void loop() {
  val = analogRead(potpin);
  val = map(val, 0, 1023, 0, 180);
  myservo.write(val);
  delay(15);
}

// code de mouvement

void checkPot() {
  valu = analogRead(potard);
  valu = map(val, 0, 1023, 100, 20000);
}


for ( pos = val; pos <= 180; pos += 1)
{
  checkPot();
  myservo1.write(posi);
  delayMicroseconds(valu);
}

for ( pos = 180; pos >= val; pos -= 1)
{
  checkPot();
  myservo1.write(posi);
  delayMicroseconds(valu);
}

alors voila il me reste je pense que 1 erreur comme je suis arrivé a la fin du code mais la je la comprend pas
c’est sur la ligne retour
for ( pos = 180; pos >= val; pos -= 1)
j’ai pas d’erreur sur l’allez mais sur le retour oui et la je comprend pas et je vois pas d’erreur de syntax du moin il me semble et la je sèche

Regarde bien comment ton code est structuré.
Tu as de nombreuses lignes qui ne sont dans aucune fonction.

Bonjour moonlight59 (bonne année),

1/ Les instructions :

moonlight59:

for ( pos = val; pos <= 180; pos += 1)

{
 checkPot();
 myservo1.write(posi);
 delayMicroseconds(valu);
}

for ( pos = 180; pos >= val; pos -= 1)
{
 checkPot();
 myservo1.write(posi);
 delayMicroseconds(valu);
}

sont placées en dehors de toute fonction.

Les instructions DOIVENT être placées à l’intérieur d’une fonction.

Je reconnais que le message d’erreur n’est pas très explicite.

Cordialement,
bidouilleelec

void mouvement (int val)
{
int i;

for ( i = val; i <= 180; i += 1)
{
  checkPot();
  myservo.write(potard);
  delayMicroseconds(valu);
}


for ( i = 180; i >= val; i-= 1)
{
  checkPot();
  myservo.write(potard);
  delayMicroseconds(valu);
}
}

deja commençons part la base Bonne année a tous et je vous souhaite a tous de belle ligne de programmation

voila grace a votre aide il a plus d’erreur sur me ligne de programmation et pour sa un grand merci a vous
et maintenant j’attend avec impatience d’etre rentré du travaille pour pouvoir le teste
merci a vous

moonlight59:

void mouvement (int val)

{
int i;

for ( i = val; i <= 180; i += 1)
{
 checkPot();
 myservo.write(potard);
 delayMicroseconds(valu);
}

for ( i = 180; i >= val; i-= 1)
{
 checkPot();
 myservo.write(potard);
 delayMicroseconds(valu);
}
}

Dans tous les cas il faut poster le code entier.

J’aime bien les variables au nom “parlant”.
Exemple :
potPosition au lieu de potpin
valPosition au lieu de val
potVitesse au lieu de potard
valVitesse au lieu de valu

Cordialement,
bidouilleelec