Go Down

Topic: Contrôler plusieurs servomoteurs via PC. (Read 895 times) previous topic - next topic

lesaccrosduvol

Dec 29, 2013, 07:23 pm Last Edit: Dec 31, 2013, 05:38 pm by lesaccrosduvol Reason: 1
Bonjour à tous

Je suis l'heureux possesseur d'une ardu ino « Uno » .

Je débute dans le domaine mais j'ai déjà quelques connaissances.

Mon objectif en ce moment est de contrôler 2 servomoteurs voir plus avec mon ordinateur.
Je m'inspire de ce « tuto » :  http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertServoControlePositionClavierPC

J'ai déjà réussi à le faire, même à changé les touche de commande (utiliser les flèches gauche et droite du clavier au lieu de haut et Bas) .
Mais là je suis face à un mur je veux pour voir contrôlé deux servomoteurs de façon séparés, un avec les touches au et bas, et le deuxième avec les touches droite et gauche .Cela fait bien 2 jours que je travaille dessus et aucun succès même le plus infime

Si quelqu'un avait la solution afin de pouvoir me débloquer et enfin pouvoir continuer mon projet.

Merci d'avance.

Cordialement

icare

Bonsoir,
Tu dois avoir une erreur ligne 14. Je plaisante bien sur, il faut mettre ton code pour voir ce qui se passe.
@+
2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

lesaccrosduvol

Bonsoir
Tout d'bord je tien à te remercier de ta réponse.

Le problème est bien là pour le moment la seule chose que j'ai réussie à faire c'est essayer de "bricoler" le code d'origine sans aucun succès et j'ai refait la manipulation plusieurs fois déjà. Je pense que cela dépasse de beaucoup mes connaissances actuelles.

Donc si quelqu'un aurait un code qui se rapprocherait de près ou de loin à l'objectif que je me suis fixé je suis preneur afin de pouvoir comprendre le fonctionnement et m'en inspirer

cordialement

icare

Bonjour,
As-tu réussi à faire fonctionner, sans bricolage, le code que tu sites en référence ?
@+
2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

lesaccrosduvol


Bonjour,
As-tu réussi à faire fonctionner, sans bricolage, le code que tu sites en référence ?
@+


Bonjour

Oui le code de référence j'ai réussi facilement à le faire fonctionner  sans rien changer du tout

Cordialement

icare

Bonjour,
En survolant rapidement le code de référence, il faut que tu déclares 2 objets servo (par exemple mon_servo et mon_servo2 qui sont sur des pins différentes) le processus de traitement de mon_servo2 est similaire à mon_servo.
Lors de la réception des ordres via le port série, il faut que tu fasses la différence entre les ordres pour mon_servo et mon_servo2 (par exemple les touches haut et bas commandent mon_servo et les touches droite et gauche commande mon_servo2).
Un peu de réflexion et tu trouveras la similitude des lignes de programme.
Si tu as des difficultés, n'oublie pas de mettre ton programme dans le prochain post
@+
2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

lesaccrosduvol


Bonjour,
En survolant rapidement le code de référence, il faut que tu déclares 2 objets servo (par exemple mon_servo et mon_servo2 qui sont sur des pins différentes) le processus de traitement de mon_servo2 est similaire à mon_servo.
Lors de la réception des ordres via le port série, il faut que tu fasses la différence entre les ordres pour mon_servo et mon_servo2 (par exemple les touches haut et bas commandent mon_servo et les touches droite et gauche commande mon_servo2).
Un peu de réflexion et tu trouveras la similitude des lignes de programme.
Si tu as des difficultés, n'oublie pas de mettre ton programme dans le prochain post
@+



Bonjour

D'accord. Merci à toi je comprends mieux maintenant c'est le code processing qui me pose problème (le sort s'acharne  ]:D )
Je ne vois pas comment mettre un deuxième rectangle que je contrôlerai avec les touches gauche et droite

Code: [Select]

// programme Processing
// par X. HINAULT - 02/2010
// www.mon-club-elec.fr

// Interface Vumètre réglable par clavier HAUT/BAS et envoi série vers arduino valeur 0-9

// inclusion librairies utilisées
import processing.serial.*; // importe la librairie série processing


// déclaration variables

//--- variables utiles tracé vumètre

float Y_ref=220; // ordonnée de ligne de référence dessin rectangle

float largeur=50;
float hauteur=180; //180 représente 100% (0 à 9 = 10 positions)

int SendValue=0; // valeur envoyée à Arduino
float niveau=0.0; // 0% au départ

Serial MySerialPort; // variable désignant le port série


void setup(){ // fonction d'initialisation exécutée 1 fois au démarrage

 size(100,250); //dimensionne la fenêtre processing à 200x200 (largeur x hauteur) // 1ère instruction de Setup
 // si Size() oublié => fenêtre 100x100 par défaut --

 //---- initialisation port série ---

 println(Serial.list()); // liste et affiche tous les ports disponibles

 // Open whatever port is the one you're using.
  MySerialPort = new Serial(this, Serial.list()[1], 115200); // vérifier si c'est le bon port qui est utilisé
  delay (100); // pause  

 background (255,255,255); // fixe la couleur du fond - format RGB
 stroke(255,0,0); // fixe la couleur du trait de dessin et bordure - format RGB
 //nostroke(); // Désactive trait de dessin et bordure

 // dessin des 2 rectangles du niveau de démmarrage (=50%)
 stroke (0); // trait de contour
 fill(255,255,255); // remplissage
 rect (10,Y_ref-hauteur,largeur, hauteur); // trace un rectangle de hauteur voulue
//à partir du point x,y (rect(x,y,larg,haut)) en se basant sur ordonnée de référence

 stroke (255,0,0); // trait de contour
 fill(255,0,0); // remplissage rouge
 rect (10,Y_ref-niveau,largeur, niveau); // trace un rectangle de hauteur voulue
//à partir du point x,y (rect(x,y,larg,haut)) en se basant sur ordonnée de référence

 //----- initialisation valeur série ----
 MySerialPort.write(48);   // valeur initiale 0+ 48 pour format ASCII
 delay (100); // pause  
}

void  draw() { // fonction exécutée en boucle

 //--- nb : la vitesse de rafraîchissement de l'écran est de 60 par seconde apr défaut  - cf frameRate()

}

// fonction de gestion des évènements

//----- clavier --------

void keyPressed() {// cette fonction est exécutée quand un touche est appuyée...

if (key == CODED) { // si appui d'une touche particulière (les touches spéciales up, down, etc.. cf Keycode)

   if (keyCode == UP) { // si touche Haut appuyée

     niveau=niveau+(hauteur/9); // /9 pour avoir 10 niveaux
     if (niveau>=hauteur)niveau=hauteur; // ne pas dépasser hauteur

     SendValue=SendValue+1; // incrémente SendValue
     if (SendValue >=9) SendValue=9; // Empêche débordement variable SendValue

     MySerialPort.write(SendValue+48);   // valeur initiale + 48 pour format ASCII - envoie valeur 0 à 9
     delay (100); // pause  
   }
   else if (keyCode == DOWN) {// si touche BAS appuyée

   niveau=niveau-(hauteur/9); // /9 pour avoir 10 niveaux
   if (niveau<=0)niveau=0; // ne pas dépasser 0

    SendValue=SendValue-1; // décrémente SendValue
     if (SendValue<=0) SendValue=0;// ne pas dépasser 0

     MySerialPort.write(SendValue+48);   // valeur initiale + 48 pour format ASCII - envoie valeur 0 à 9
     delay (100); // pause  

   }

} // fin if key==coded

// dessin des 2 rectangles du niveau
 stroke(0); // contour noir
 fill(255,255,255); // remplissage blanc
 rect (10,Y_ref-hauteur,largeur, hauteur); // trace un rectangle de hauteur voulue
//à partir du point x,y (rect(x,y,larg,haut)) en se basant sur ordonnée de référence

  stroke(255,0,0); // contour rouge
 fill(255,0,0); // remplissage rouge
 rect (10,Y_ref-niveau,largeur, niveau); // trace un rectangle de hauteur voulue
//à partir du point x,y (rect(x,y,larg,haut)) en se basant sur ordonnée de référence

}

//------- souris -------
//void mousePressed() { // est appelée à chaque fois qu'un bouton de la souris est appuyé

//  }

//------- gestion du port Série ------

//void serialEvent (Serial myPort) {



// }  // fin gestion port série


Pour le moment j'ai juste réussi à utiliser le touche gauche et droite en changeant deux petits trucs dans le code mais je n'ai pas réussi à le faire fonctionner avec les touches haut et bas en même temps et indépendamment les une des autres.

Cordialement

lesaccrosduvol

Bonjours et Bonne Année à tous

Alors j'ai fait des recherche et j'ai trouver sa http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertServoPanTiltControlePositionProcessing
C'est pas tout à fait ce que je voulais mais je peu essayer .

Problème j'ai un problème avec le code  

Quand je fais vérifier il me détecte une erreur au niveau de "chaineReception=chaineReception.trim(); // enlève les espaces" (désolé je n'arrive pas à l'afficher sur le post )

Si quelqu'un à la solution à mon problème

Cordialement

icare

Bonsoir,
Côté processing, je ne peux pas t'aider, je n'ai aucune pratique.
Par contre, côté Arduino, lorsque que tu reçois un octet sur le port série, il faut que tu analyses le caractère reçu si c'est un gauche, droite, haut ou bas.
Si c'est le caractère haut ou bas alors tu traites le cas 1
Si c'est le caractère gauche ou droite alors tu traites le cas 2
@+
2B OR NOT(2B) = FF
Arduino 1.0.5 + Notepad++ (sous Linux Fedora et/ou Windows)

lesaccrosduvol

Bonjours

Parle tu de ce code là ?
http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertServoPanTiltControlePositionProcessing?action=sourceblock&num=1

Parce que je pense l'utiliser puis changer le code proccesing par la suite afin de le contrôler avec le clavier mais pour le moment je bloque au niveau de"  chaineReception=chaineReception.trim(); // enlève les espaces "

Je vais déjà essayer de faire fonctionner celui là pour ensuite entreprendre des choses plus difficiles

Cordialement


lesaccrosduvol

bonjours

Pour ceux que cela pourrait intéresser , voici un lien qui explique d'où venait le problème  chaineReception=chaineReception.trim(); // enlève les espaces

http://forum.snootlab.com/viewtopic.php?f=24&t=504

cordialement 

Go Up