Go Down

Topic: [RÉSOLU] Servomoteur adapté à un encodeur rotatif (projet TPE) (Read 850 times) previous topic - next topic

VictorMoussally

Bonsoir tout le monde,

J'ai finalement réussi à terminer mon programme.

Plusieurs points : j'ai finalement utilisé une méthode qui ne demande pas de librairies particulières (sauf la librairies servo, qui est assez courante). Ce qui résout les soucis de librairies, qui étaient en toute somme assez compliqués à régler.

Je vous mets ici le code, entièrement commenté.
Code: [Select]
#include <Servo.h> //inclue la bibliotheque des servomoteurs

Servo myservo; //declare le servomoteur sous le nom myservo

int degreservo = 0; //declare la varible degreservo
int nVal = 0; // declare la variable nVal

void setup() { //code qui ne s'execute qu'une fois, à la mise sous tension de la carte
  myservo.attach(9); //attache la Pin9 comme la sortie pour le servomoteur
  pinMode(2, INPUT); //declare la Pin2 comme une entree
  pinMode(3, INPUT); //declare la Pin 3 comme une entree
  attachInterrupt(digitalPinToInterrupt(2), nAnalyse, FALLING); //a chaque fois qu'il y a un changement d'etat HIGH vers LOW du Pin2, il execute le sous-programme nAnalyse
  Serial.begin(9600); //initialiser la fonction d'affichage qui permet de verifier la valeur de nVal
  Serial.println("Start"); //Affiche "start" dans la fonction d'affichage, ce qui permet de savoir quand le programme est pret.
}

void loop() { //code qui s'execute en boucle. C'est le coeur du programme, celui qui va changer la valeur du servomoteur
  degreservo = nVal; //la variable degreservo prend la
  degreservo = map(degreservo, 0, 24, 10, 170); // (supprimer cette fonction après, a adapter) la variable degreservo prend la valeur une valeur entre 10 et 170 pour une valeur entre 0 et 24
  myservo.write(degreservo); //le servomoteur prend la valeur de la variable degreservo
  delay(15); //fait une temporisation, le temps que le servomoteur atteigne la position
}



void nAnalyse() { //sous-programme nAlanalyse, qui s'execute à chaque passage de l'etat HIGH a l'etat LOW de Pin2
  if (digitalRead(2) == digitalRead(3)) { //si Pin2 = Pin3, incremente la variable nVal
    nVal = nVal + 1;
  } else {
    nVal = nVal - 1; //sinon (si Pin2 =/= Pin3), decremente la variable nVal
  }
  if (  nVal  ==  -24 ) //lorsque l'encodeur a fait un tour, remet la variable a zero
  {
    nVal = 0 ;
  }
  else
  {
    if (nVal ==  -1 ) //si l'encodeur tourne dans le sens inverse, et donc nVal prend une valeur negative, alors remet nVal a zero
    {
      nVal = 0 ;
    }
  }
  Serial.println(nVal); //l'afficheur affiche la valeur de la variable nVal à la fin de l'execution de nAnalyse
}


Je n'ai plus aucun soucis, mon programme et mon montage marche !  ;)  8)

Encore un grand merci à toutes les personnes qui ont essayées de m'aider, sans vous j'aurais sûrement galéré beaucoup plus.  :smiley-lol:

Bien cordialement,
Victor

Il y a-t-il un moyen de mettre le sujet en résolu ?


Go Up