Bonjour,
Je travaille actuellement sur le contrôle de la position d'une webcam grâce à deux servomoteurs depuis un site web, pour se faire j'utilise une carte Arduino Uno qui contrôle les servomoteurs grâce à des informations reçu dans le port Serie envoyé par Processing.
Le problème c'est que quand la position des servomoteurs sont envoyé et qu'ils se mettent à la bonne position, de temps en temps un des servomoteur, retourne à 0 avant de reprendre sa position. (Je n'ai pas ce problème quand j'envoi manuellement la position des servomoteurs dans le port Serie)
Avez-vous une idée pour remédier à ce problème ? Merci d'avance pour votre aide.
Les valeurs envoyé dans le port Serie sont du style xx120yy80
Mon code :
Code :
- #include <Servo.h> // librairie pour servomoteur
- const int BservoX = 3; //déclaration constante des broches des servo
- const int BservoY = 6;
- int ReceptionOctet=0; // variable de stockage des octets reçus par port série
- Servo servoX, servoY; // creation des objets servo pour les controler
- char XouY = 0; //variable permettant de mettre la valeur du servo dans le bon servo
- // si XouY=1 alors ça va dans valeurX si XouY=2 ça va dans valeurY
- int valeurX = 105, valeurY = 105; //variable definissant la position de chaques servo
- void setup()
- {
- servoX.attach(BservoX); // attaches the servo on pin 3 to the servo object
- servoY.attach(BservoY); // attaches the servo on pin 7 to the servo object
-
- Serial.begin(9600); // initialise connexion série à 9600 bauds
-
- pinMode(BservoX, OUTPUT); //met la broche en sortie
- pinMode(BservoY, OUTPUT); //met la broche en sortie
-
- servoX.write(valeurX); //mets le sevoX à la position angulaire égale à valeurX
- servoY.write(valeurY); //mets le sevoY à la position angulaire égale à valeurY
-
- }
- void loop()
- {
- if (Serial.available()>0) // si caractère dans la file d'attente
- {
- while (Serial.available()>0) // tant que buffer pas vide pour lire d'une traite tous les caractères reçus
- {
- ReceptionOctet= Serial.read(); // renvoie le 1er octet présent dans la file attente série (-1 si aucun)
- ReceptionOctet=ReceptionOctet-48; // transfo valeur ASCII en valeur décimale
-
- if (ReceptionOctet==73)
- {
- XouY = 2;
- valeurY = 0 ;
- }
- else if (ReceptionOctet==72)
- {
- XouY = 1;
- valeurX = 0;
- }
-
- else if ((ReceptionOctet>=0)&&(ReceptionOctet<=9))
- {
- if(XouY == 1) valeurX = (valeurX*10)+ReceptionOctet;
- else if(XouY == 2) valeurY = (valeurY*10)+ReceptionOctet;
- }
- delay(1); // pause pour laisser le temps au Serial.available de recevoir les caractères
- } // fin while
-
- XouY = 0;
-
- if (valeurX>=180) valeurX=180;
- if (valeurX<=30) valeurX = 30;
- if (valeurY>=180) valeurY=180;
- if (valeurY<=30) valeurY = 30;
- servoX.write(valeurX); //mets le sevoX à la position angulaire égale à valeurX
- servoY.write(valeurY); //mets le sevoY à la position angulaire égale à valeurY
- delay (1000); //entre chaque changement de position
- }
-
- }
|