Bonjour à tous,
Pour le compte de notre club robotique, j'ai écrit un petit code qui permet de piloter un petit bras robotique composé de 5 servomoteurs.
Ce code fonctionne.
Le voici
[code]
#include <Servo.h>
Servo ouvepince; Servo base; Servo epaule; Servo poignet; Servo coude;
#define pinX A0 // L'axe X du Joystick1 est branché sur la pin analogique A0
#define pinY A1 // L'axe Y du Joystick1 est branché sur la pin analogique A1
#define pinX2 A2 // L'axe X du Joystick2 est branché sur la pin analogique A2
#define pinY2 A3 // L'axe Y du Joystick2 est branché sur la pin analogique A3
bool BP1, BP2;
int J1, J2, J3, J4;
int pulse1, pulse2, pulse3, pulse4, pulse5;
void setup() {
coude.attach(3); //sortie numérique 3
poignet.attach(5); //sortie numérique 9
ouvepince.attach(10); //sortie numérique 10
epaule.attach(6);//sortie numérique 6
base.attach(9);//sortie numérique 9
pinMode(7, INPUT_PULLUP); //entrée numérique 7
pinMode(11, INPUT_PULLUP); //entrée numérique 11
//On utilise le VCC et la résistance de pullup de l’Arduino >> cela évite de rajouter un VCC et une résistance dans le montage
BP1 = BP2 = 1; // On initialise à 1 (HIGH) 1es deux entrées des boutons.
pulse1 = pulse2 = pulse3 = pulse4 = pulse5 = 1200; //initialisation de la variable de positionnement des servomoteurs à 1200 (100°). La plage 0° – 180° se traduit par 1000µs – 2000µs.
pinMode(pinX, INPUT); // les axes des joystick sont des entrées (INPUT)
pinMode(pinY, INPUT);
pinMode(pinX2, INPUT);
pinMode(pinY2, INPUT);
}
void loop() {
BP1 = digitalRead(7); BP2 = digitalRead(11); //Les variables BP1 et BP2 prennent La valeur booléenne de l'entrée 7 et 11, ce sera soit 1 ou soit 0 (si le bouton est appuyé)
J1 = analogRead(pinX); J2 = analogRead(pinY); //Les variables J1,J2,J3 et J4 prennent la valeur des entrées analogiques pinX, pinY,pinX2 et pinY2 (de 0 à 1023)
J3 = analogRead(pinX2); J4 = analogRead(pinY2);
coude.writeMicroseconds(pulse1); // initialisation de la position de tous les servomoteurs
poignet.writeMicroseconds(pulse2);
epaule.writeMicroseconds(pulse3);
base.writeMicroseconds(pulse4);
ouvepince.writeMicroseconds(pulse5);
int pas = 20; // création d'une variable "pas" qui établit l'écart de degré donné à chaque mouvement de joystick pour l'ensemble des servomoteurs
//action sur le coude
if (J1 < 15) // si la valeur de pinX est inférieure à 15, autrement dit si l'utilisateur "met à gauche" le joystick1 au maximum ( <15)
{
pulse1 += pas; // la valeur de l'angle du servomoteur du "coude" augmente de la variable "pas" (ici 20°)
}
if (J1 > 1000) // si la valeur de pinX est supérieure à 1000, autrement dit si l'utilisateur "met à droite" le joystick1 au maximum ( >1000)
{
pulse1 -= pas; // la valeur de l'angle du servomoteur du "coude" baisse de la variable "pas" (ici 20°)
}
//action sur le poignet
if (J2 < 15) // si la valeur de pinY est inférieure à 15, autrement dit si l'utilisateur "baisse" le joystick1 au maximum ( <15)
{
pulse2 += pas; // la valeur de l'angle du servomoteur du "poignet" augmente de la variable "pas" (ici 20°)
}
if (J2 > 1000) // si la valeur de pinY est supérieure à 1000, autrement dit si l'utilisateur "monte" le joystick1 au maximum ( >1000)
{
pulse2 -= pas; // la valeur de l'angle du servomoteur du "poignet" baisse de la variable "pas" (ici 20°)
}
//action sur l'épaule
if (J3 < 15)
{
pulse3 += pas;
}
if (J3 > 1000) {
pulse3 -= pas;
}
//action sur la base
if (J4 < 15)
{
pulse4 += pas;
}
if (J4 > 1000)
{
pulse4 -= pas;
}
//lecture BP1 et BP2, et action sur l'angle du servomoteur pince
if (BP1 == LOW) {
pulse5 -= 10;
}
if (BP2 == LOW) {
pulse5 += 10;
}
delay(15);
}
[/code]
Pour des raisons pédagogiques, j'aimerai créer une librairie contenant un fichier joybrasservo.h et un joybrasservo.cpp contenant ma fonction controlebras(), et n'avoir dans mon programme principale que quelque chose comme ça
#include <Servo.h>
#include "joybrasservo.h"
void setup() {
}
void loop() {
controleBras(9, 6, 3, 5, 10, 7, 11, 20); // void controleBras(int pinBase, int //pinEpaule, int pinCoude, int pinPoignet, int pinPince, int pinJoyBouton1, int
// pinJoyBouton2, int pas)
delay(15);
}
J'ai essayé beaucoup de choses, mais je me retrouve tout le temps en difficulté avec tout un tas de variables qui ne sont pas dans les bons "scope", je m'arrache les cheveux.
Pourriez vous m'aiguiller pour parvenir à organiser cette librairie?
Je vous remercie!!!
Romain pour Novamake73