[conseil] I/O PWM

bonjour à tous,

Je suis un petit nouveau arduino :slight_smile: je taff en ce moment sur un projet de pilotage de moteur brushless ainsi que de servomoteur.
Pour les piloter je me sers d’une télécommande (4 voies + recepteur) envoyant des signaux PWM avec une plage de variation entre la position haute et basse de 1,5ms. Je fais rentrer les signaux de reception directement sur les entrées Analogiques de l’arduino, je les bidouilles pour récupérer en sortie des signaux eux aussi PWM mais avec un rapport cyclique mieux adapté ainsi que des fréquences différentes.

En gros pour l’instant je m’amuse à faire joujou avec un servomoteur et un moteur en même temps… oui je vais assez doucement ^^
Alors tout d’abord j’ai essayé de faire tourner mes servomoteurs (une bonne chose de faite) mais maintenant j’ai quelques soucis :confused: c’est sûrement pas grand chose mais je trouve pas la solution.

J’ai donc branché mon moteur qui tourne plutôt bien, j’arrive à le faire aller à différentes vitesses (mais pas à l’envers, l’utilisation d’un pont en H est inévitable si je veux pouvoir le faire tourner dans l’autre sens…) mais maintenant j’ai un problème je n’ai plus rien en sortie pour mon servomoteur… j’arrive plus à le piloter :confused: le rapport cyclique s’incrémente tout seul, du coup il devient fou et moi aussi :slight_smile:

int pilote  = A0;
int piloteServo = A1;
int mon_servo = 5;
int moteur = 9;
unsigned long dureetot=0 ;
unsigned long moy = 0;
unsigned long duree= 0;
unsigned long dureeServo = 0;
unsigned long moyservo = 0;
unsigned long dureetotServo = 0;
int pilotemes = 0;
int pilotemes2 = 0;
int i;
int n = 0;
int ii=0;
int m = 0;

int tempo = 0;

void setup()
{
 // TCCR2A = _BV(COM2A0) | _BV(COM2B1) | _BV(WGM20);
  //TCCR2B = _BV(WGM22) | _BV(CS22)| _BV(CS21)| _BV(CS20);           //
  //OCR2A = 156;
  //OCR2B = 4;
  pinMode(pilote, INPUT);
  pinMode(piloteServo,INPUT);
  pinMode(mon_servo, OUTPUT);

  pinMode(moteur,OUTPUT);
  setPwmFrequency(5,1024);// 61Hz pour le servomoteur
}

void loop()
{

moy = 0;
moyservo=0;
duree = 0.0;
dureetot =0;
n = 30;
m=30;

  for(i=0; i<n; i++)// boucle pour réaliser un moyennage
  {
    duree = (pulseIn(pilote, LOW)-280)/2;
    delay(10);
    dureetot = dureetot + duree;
  }
  moy = dureetot/n;
  
   for(ii = 0; ii<m; ii++)
 {
   dureeServo =(pulseIn(piloteServo, LOW)-300)/10;
   delay(10);
   dureetotServo = dureeServo + dureetotServo;
  }
    moyservo = dureetotServo/m;    
  analogWrite(moteur, moy);
  analogWrite(mon_servo,moyservo);
}

Si l’un d’entre vous serai me conseiller :confused: je me tiens à votre disposition pour toute question :slight_smile:
Merci d’avoir lu :smiley:

dureetotServo =0; est à rajouter , après dureetot =0;