Bonjour, dans le cadre de mon Projet de Terminale je souhaite créer un programme Arduino qui permet de faire tourner un servo-moteur grâce à un joystick ( 2 servos en réalité , un sur chaque axe du joystick).
Pour l'instant j'ai réussi a faire tourner mon servo avec le joystick en utilisant le programme Knob prévu pour un potentiomètre et cela marche bien, mon problème est que lorsque je lâche le joystick et qu'il revient en position initiale, le servo revient aussi en position initiale, or je veux qu'il reste en place à sa dernière position.
Ce que je voudrais c'est un programme qui ferait qu'a chaque fois que je met un à-coup à gauche ou à droite, le servo incrémente de x degrés dans un sens ou dans l'autre et qu'il ne revienne pas en position initiale quand je relache le joystick. Etant un grand débutant en programmation je ne trouve vraiment pas comment faire, je vous demande donc un peu d'aide, si quelqu'un pouvait poster un programme simple qui puisse faire ça, ca m'aiderait beaucoup, je pourrais tester le programme cette après-midi en PPE car je n'ai pas le matériel chez moi.
Si ton servo revien à sa position initiale, tu as sans doute acheter un servo avec retour automatique. Normalement c'est un servo a rotation qu'il faudrait acheter
#include <Servo.h>
Servo myservo; // create servo object to control a servo
int potpin = 0; // analog pin used to connect the potentiometer
int val; // variable to read the value from the analog pin
int total = 0; // variable de calcul
int tensionbouton = 13;
int valbouton = 14;
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode (tensionbouton, OUTPUT);
pinMode (valbouton, INPUT);
digitalWrite (tensionbouton, HIGH);
}
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, 0, 179); // scale it to use it with the servo (value between 0 and 180)
total = total+val;
myservo.write(total); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
if (valbouton == 1){
total = 0;
}}
Comme tu le vois j'ai rajouté un bouton poussoir pour remettre le servo à sa position initiale
C'est quand même pas bien compliqué ... Il suffit juste, au lieu d'utiliser directement la variable qui correspond à la tension du potar, d'insérer une variable intermédiaire qui s'incrémentera ou se décrémentera. Dans l'idée ça donne :
x=analogRead(AxeX);
if(x>520) ConsigneServoX++;
if(x<500) ConsigneServoX--;
ConsigneServoX=constrain(ConsigneServoX,0,1023);
// et tu commandes ton servo avec ConsigneServoX au lieu de x
B@tto:
C'est quand même pas bien compliqué ... Il suffit juste, au lieu d'utiliser directement la variable qui correspond à la tension du potar, d'insérer une variable intermédiaire qui s'incrémentera ou se décrémentera. Dans l'idée ça donne :
x=analogRead(AxeX);
if(x>520) ConsigneServoX++;
if(x<500) ConsigneServoX--;
ConsigneServoX=constrain(ConsigneServoX,0,1023);
// et tu commandes ton servo avec ConsigneServoX au lieu de x
C'est presque bon : tel qu'il est total ne peut qu'augmenter puisque val ne peut être que positif (en plus que les 180 on s'en fiche un peu, il faut un incrément + constrain). Donc il faudrait plus quelque chose comme :
#include <Servo.h>
#define Increment 20;
void loop()
{
val = analogRead(potpin); // reads the value of the potentiometer (value between 0 and 1023)
val = map(val, 0, 1023, -Increment, Increment);
total = total+val;
total=constain(total,0,180);
myservo.write(total); // sets the servo position according to the scaled value
delay(15); // waits for the servo to get there
if (valbouton == 1){
total = 0;
}}
Et j'ai pas compris ce que tu voulais faire avec ton setup() et tensionbouton :
void setup()
{
myservo.attach(9); // attaches the servo on pin 9 to the servo object
pinMode (tensionbouton, OUTPUT);
pinMode (valbouton, INPUT);
digitalWrite (tensionbouton, HIGH);
}
En gros je met une tension sur une groche de l'arduino qui est relié au bouton et le cable qui resort du bouton est relié à une autre broche qui mesurre la tension