Bonjour!
Je réalise avec mon IUT, un projet de drone birotor.
Le probleme, c'est que j'arrive à lire mon capteur 9dof IMU, mais faire fonctionner les servomoteurs en même temps pose probleme.
J'ai beau chercher, je trouve pas la solution.
Donc je vous met mon programme au cas ou vous trouverez la solution :
////////////////////////////////////////////////////////////////////////////////
/
#include <NewSoftSerial.h>
#include <Servo.h>
int RESET = 7;
const int servo1 = 10;
Servo mon_servo1;
const int servo2 = 9;
Servo mon_servo2;
byte pinRx=6;
byte pinTx=8;
char TabX[10],TabY[10],TabZ[10];
byte Resultat=0;
int Calc=0,i=0,Res=0,Res2=0;
NewSoftSerial IMU(pinRx,pinTx);
void setup()
{
pinMode(RESET,OUTPUT);
Serial.begin(115200);
IMU.begin(9600);
pinMode(pinRx, INPUT);
pinMode(pinTx, OUTPUT);
pinMode(servo1, OUTPUT);
pinMode(servo2, OUTPUT);
mon_servo1.attach(servo1);
mon_servo2.attach(servo2);
}
void loop()
{
int X1=0,Y1=0,Z1=0;
int x=0,y=0,z=0;
delay(1);
if(IMU.available()>0)
{
Resultat=IMU.read();
if(Resultat==':'){
do{
if(IMU.available()>0)
{
Resultat=IMU.read();
if(Resultat!=','){
TabX[x]=Resultat;
x++;}
}
}while(Resultat!=',');
TabX[x]='\0';
do{
if(IMU.available()>0)
{
Resultat=IMU.read();
if(Resultat!=','){
TabY[y]=Resultat;
y++;}
}
}while(Resultat!=',');
TabY[y]='\0';
do{
if(IMU.available()>0)
{
Resultat=IMU.read();
if(Resultat!=0xD){
TabZ[z]=Resultat;
z++;}
}
}while(Resultat!=0xD);
TabZ[z]='\0';
X1=atoi(TabX);
//Serial.print("X = ");
//Serial.print(X1);
//Serial.print(" ");
Y1=atoi(TabY);
Serial.print("Y = ");
Serial.println(Y1);
// Serial.print(" ");
Z1=atoi(TabZ);
//Serial.print("Z = ");
//Serial.println(Z1);
}
}
Res=90-(2*Y1);
Res2=90+(2*Y1);
if((Res2>=0)&&(Res2<=150)){
mon_servo1.write(Res2);}
if((Res>=30)&&(Res<=180)){
mon_servo2.write(Res);}
if(Res2<0){
Res2=0;
mon_servo1.write(Res2);
}
if(Res>180){
Res=180;
mon_servo2.write(Res);
}
delay(20);
}
//////////////////////////////////////////////////////////////////////////////
La vitesse que j'ai choisis pour mon IMU et de 9600.
Voilà, si vous avez sinon un programme simple, pour m'inspirer la solution, pour que je puisse lire les valeurs de l'IMU en même temps que de commander les servo.
Sinon, j'ai une intuition sur les temps de communication, car l'IMU est a 960Hz et les servo a 50Hz.
merci d'avance de votre aide.
-----