Go Down

Topic: Problème servomoteurs (Read 377 times) previous topic - next topic

STI2D2

Nous réalisons un projet qui consiste à reproduire les mouvements d'une main humaine avec une main mécanique.
Pour cela nous avons un gants avec des capteurs de flexion placés sur chaque doigt. Nous avons donc 2 carte Arduino équipées de modules XBee qui permettent la transmission par radiofréquence, sur l'une sont branchés les servos et sur l'autre le gant.

Nous avons un problème pour actionner les servos en fonction des capteurs.
Nous ne connaissons pas les syntaxes exacte pouvez vous nous fournir de l'aide s'il vous plait !
Si vous avez besoin de plus d'informations nous sommes la pour vous en donner, merci d'avance !

Voici le code récepteur
Quote
Code: [Select]

#include <Servo.h>
#include <SoftwareSerial.h>
#include "SimpleXbee.h"



const int rxXbee=2;
const int txXbee=3;

Servo ServoA;
Servo ServoB;

//on cr?e l'objet Xbee en initialisation son fonctionnement ? partir des ports 2 et 3 comme port COM (bouton DLINE sur l'xBeeShield)
SimpleXbee simpleXbee(rxXbee,txXbee);

char reponse[20];
char *rep=reponse; //le pointeur rep pointe vers le d?but du tableau

//aficheage des infos de debuggage dans la console
void affDebug(char * str) {
Serial.print(str);
}
void affDebugln(char * str) {
Serial.println(str);
}

void convOctet2Chaine(byte valSource, char * chCible) {
chCible[0]=(valSource/100)+'0';
chCible[1]=((valSource/10)%10)+'0';
chCible[2]=(valSource%10)+'0';
chCible[3]=0x00; //fin de cha?ne
}

byte convChaine2Octet(char * chSource, int nbCar) {
byte val=0;
int mul=1;
for (int i=nbCar-1;i>=0; i--) {
val+=(chSource[i]-'0')*mul;
mul*=10;
}
return val;
}

void setup()
{
        ServoA.attach(12);
        ServoB.attach(13);
Serial.begin(9600);

//on attend 3s avant d?marrage pour laisser le temps au module xBee..
affDebug("Demarrage module dans 3s");
for (int i=0; i<3; i++) {
affDebug(".");
delay(1000);
}
}

void loop()
{       
        int valServoB;
        int valServoA;
int valPotar=0;
byte octetPotar=0;
char chValPotar[5]="V000";
        char ServoA[3];

delay(1200); //on attend 1,2s avant de repasser en mode config
//on passe en mode config
if (simpleXbee.entreModeATConfig()) affDebugln("le module est en mode config...");
else affDebugln("Erreur ! Impossible de rentrer en mode config...");
delay(1000); //on attend encore 1s derri?re avant toute autre commande
 
//fixe le canal a 0B
simpleXbee.sendATCmdReponse("CH0B");
//fixe l'ID du reseau ? 1234
simpleXbee.sendATCmdReponse("ID1234");
//fixe l'adresse 16 bits du module ? 0x07 - le r?cepteur
simpleXbee.sendATCmdReponse("MY0007");
//fixe l'adresse de destination sur 16 bits ? 0x05 //l'?metteur
simpleXbee.sendATCmdReponse("DH00000000"); //poids fort
simpleXbee.sendATCmdReponse("DL00000005"); //poids faible
//on quitte le mode config
simpleXbee.sendATCmdReponse("CN");

affDebugln("config xBee terminee...");


//boucle infinie
while(1) {

rep=simpleXbee.lit(';'); //lit la chainejusqu'? recevoir un ';' de fin de cha?ne
affDebugln(rep);
octetPotar=convChaine2Octet(rep+1,3);         
                 
                              }
}

et le code émetteur
[/quote]


Et le code émetteur :

Quote
Code: [Select]

#include <SoftwareSerial.h>
#include "SimpleXbee.h"

const int potar=0;
const int potar2=1;
int zero = 0;
int zero2 = 0;
const int rxXbee=2;
const int txXbee=3;
//on cr?e l'objet Xbee en initialisation son fonctionnement ? partir des ports 2 et 3 comme port COM (bouton DLINE sur l'xBeeShield)
SimpleXbee simpleXbee(rxXbee,txXbee);

char reponse[20];

char *rep=reponse; //le pointeur rep pointe vers le d?but du tableau


char reponse2[20];

char *rep2=reponse2;

//aficheage des infos de debuggage dans la console
void affDebug(char * str) {
Serial.print(str);
}
void affDebugln(char * str) {
Serial.println(str);
}

void convOctet2Chaine(byte valSource, char * chCible) {
chCible[0]=(valSource/100)+'0';
chCible[1]=((valSource/10)%10)+'0';
chCible[2]=(valSource%10)+'0';
chCible[3]=0x00; //fin de cha?ne
}

void setup()
{

Serial.begin(9600);

//on attend 3s avant d?marrage pour laisser le temps au module xBee..
affDebug("Demarrage module dans 3s");
for (int i=0; i<3; i++) {
affDebug(".");
delay(1000);
}
}

void loop()
{
int valPotar=0;
byte octetPotar=0;
char chValPotar[5]="V000";


        int valPotar2=0;
byte octetPotar2=0;
char chValPotar2[5]="A000";

delay(1200); //on attend 1,2s avant de repasser en mode config
//on passe en mode config
if (simpleXbee.entreModeATConfig()) affDebugln("le module est en mode config...");
else affDebugln("Erreur ! Impossible de rentrer en mode config...");
delay(1000); //on attend encore 1s derri?re avant toute autre commande
 
//fixe le canal a 0B
simpleXbee.sendATCmdReponse("CH0B");
//fixe l'ID du reseau ? 1234
simpleXbee.sendATCmdReponse("ID1234");
//fixe l'adresse 16 bits du module ? 0x05 - l'?metteur
simpleXbee.sendATCmdReponse("MY0005");
//fixe l'adresse de destination sur 16 bits ? 0x07 - le r?cepteur
simpleXbee.sendATCmdReponse("DH00000000"); //poids fort
simpleXbee.sendATCmdReponse("DL00000007"); //poids faible
//on quitte le mode config
simpleXbee.sendATCmdReponse("CN");

affDebugln("config xBee terminee...");


//boucle infinie
while(1) {

valPotar=analogRead(potar); //on lit la valeur analogique du potar
                for (int i =0; i < 10; i++) {
                 zero += valPotar/2;
                                   
                }
               
               
                valPotar2=analogRead(potar2); //on lit la valeur analogique du potar
                for (int i =0; i < 10; i++) {
                 zero2 += valPotar/10;
                                   
                }
octetPotar=map(valPotar,0,1023,10,170);
                octetPotar2=map(valPotar2,0,1023,10,170);                                              //on ram?ne la valeur qui va de 0 ? 1023 ? une valeur qui va de 0 ? 255 (octet)
convOctet2Chaine(octetPotar, chValPotar+1); //on convertit la valeur num?rique en chaine de caract?re sur 3 chiffres qu'on place ? la suite du V de chValPotar
                convOctet2Chaine(octetPotar2, chValPotar2+1);
               
               
               
simpleXbee.envoie(chValPotar); //on envoie la valeur par l'xBee
simpleXbee.envoie(";");
simpleXbee.envoie(chValPotar2);
                simpleXbee.envoie(";");     //on envoie le caract?re de fin de chaine par l'xBee

Serial.println(chValPotar);



             

Serial.println(chValPotar2);

delay(20); //chaque 20 ms

}

}
[/quote]


Go Up