Code de mon robot
#21
Posté 21 mai 2012 - 04:34
Mais pour mon clavier , quand j'utiliserais if else , case et des fonctions switch , comment le programme saura que j'appuie sur mon clavier d'ordinateur ?
Cordialement Dylan.
#22
Posté 21 mai 2012 - 11:23
int EN1 = 6; int EN2 = 5; int IN1 = 7; int IN2 = 4; void Motor1(int pwm, boolean reverse) { analogWrite(EN1,pwm); //définir le contrôle PWM, 0 pour l'arrêt, et 255 pour une vitesse maximale if(reverse) { digitalWrite(IN1,HIGH);//(HAUT) } else { digitalWrite(IN1,LOW); //(BAS) } } void Motor2(int pwm, boolean reverse) { analogWrite(EN2,pwm); if(reverse) { digitalWrite(IN2,HIGH);//(HAUT) } else { digitalWrite(IN2,LOW);//(BAS) } } void setup()// fonction setup - début de l'exécution du programme { int i; for(i=4;i<=7;i++) //Pour Arduino Shield moteur pinMode(i, OUTPUT); //régler les broche 4,5,6,7 au mode de sortie Serial.begin(9600); // ouvre le port série et fixe le debit de communication à 9600 bauds } void loop()// fonction loop - est exécutée en boucle , une fois que la fonction setup a été exécutée { int x,delay_en; char val; // déclare une variable char while(1) // tant que l'expression est vraie { val = Serial.read();// lit l'octet entrant if(val!=-1) { switch(val)// debut de la structure { case 'w'://Aller de l'avant //Vous pouvez changer la vitesse, comme moteur (50, true) Motor1(100,true); //true (=VRAI) Motor2(100,true);//true (=VRAI) break;// sortie de la boucle case 'x'://reculer Motor1(100,false); //false (= FAUX) Motor2(100,false);//false (= FAUX) break;// sortie de la boucle case 'a'://tourner à gauche Motor1(100,false);//false (= FAUX) Motor2(100,true);//true (=VRAI) break; // sortie de la boucle case 'd'://tourner à droite Motor1(100,true); //true (=VRAI) Motor2(100,false);//false (= FAUX) break; // sortie de la boucle case 's'://stop Motor1(0,false); //false (= FAUX) Motor2(0,false);//false (= FAUX) break;// sortie de la boucle } } } }
si tu ne comprend pas certaine définition vas faire un tour ICI ou ICI , ou pose tes question sur ton topic bien sure
#23
Posté 21 mai 2012 - 12:52
le reste j'ai compris et ce morceau la j'ai pas compris non plus :
val = Serial.read();// lit l'octet entrant if(val!=-1) { switch(val)// debut de la structure { case 'w'://Aller de l'avant //Vous pouvez changer la vitesse, comme moteur (50, true) Motor1(100,true); //true (=VRAI) Motor2(100,true);//true (=VRAI) break;// sortie de la boucle
??
Cordialement Dylan.
#24
Posté 21 mai 2012 - 01:26
alors le debut j'ai pas compris quelque chose ... qu'est ce que IN(moteur?) et qu'est ce que EN(le en du l293d ? ) ??
alors le IN c'est l'appellation de la déclaration du moteur , tu peux faire comme ce si aussi
Sur le code
int EN1 = 6; int EN2 = 5; int IN1 = 7; int IN2 = 4;
Exemple de changement
int moteur1 = 6; int moteur2 = 5; int vitesse1 = 7; int vitesse2 = 4;
Le EN c'est la même chose que IN ^^
Pour le reste je te laisse faire quelque recherche sur les liens que je tes fourni , ou vas sur google.
#25
Posté 22 mai 2012 - 05:41
Au fait hier soir j'ai trouver ce code sur internet, qui parle su contrôle d'un pince (la même que la mienne )et c'est pile ce que j'ai besoin . Après il faudra rajouter le Bluetooth .Je voudrais savoir s'il est bon (Arduino scketch):
/* controls each motor in an Edge Robotic Arm using data sent from a Processing Sketch */ // set the output pins // 14-18 are actually analog pins 0-4 int baseMoteurEnablePin = 2; int baseMoteurPin1 = 3; int baseMoteurPin2 = 4; int epauleMoteurEnablePin = 14; int epauleMoteurPin1 = 15; int epauleMoteurPin2 = 16; int coudeMoteurEnablePin = 8; int coudeMoteurPin1 = 9; int coudeMoteurPin2 = 10; int poigneeMotorEnablePin = 5; int poigneeMotorPin1 = 6; int poigneeMotorPin2 = 7; int pinceMotorEnablePin = 11; int pinceMotorPin1 = 17; int pinceMotorPin2 = 18; // set a variable to store the byte sent from the serial port int incomingByte; void setup() { // set the L293D pins as outputs: pinMode(baseMoteurPin1, OUTPUT); pinMode(baseMoteurPin2, OUTPUT); pinMode(baseMoteurEnablePin, OUTPUT); digitalWrite(baseMoteurEnablePin, HIGH); pinMode(epauleMoteurPin1, OUTPUT); pinMode(epauleMoteurPin2, OUTPUT); pinMode(epauleMoteurEnablePin, OUTPUT); digitalWrite(epauleMoteurEnablePin, HIGH); pinMode(coudeMoteurPin1, OUTPUT); pinMode(coudeMoteurPin2, OUTPUT); pinMode(coudeMoteurEnablePin, OUTPUT); digitalWrite(coudeMoteurEnablePin, HIGH); pinMode(poigneeMoteurPin1, OUTPUT); pinMode(poigneeMoteurPin2, OUTPUT); pinMode(poigneeMoteurEnablePin, OUTPUT); digitalWrite(poigneeMoteurEnablePin, HIGH); pinMode(pinceMoteurPin1, OUTPUT); pinMode(pinceMoteurPin2, OUTPUT); pinMode(pinceMoteurEnablePin, OUTPUT); digitalWrite(pinceMoteurEnablePin, HIGH); // start sending data at 9600 baud rate Serial.begin(9600); } void loop() { // check that there's something in the serial buffer if (Serial.available() > 0) { // read the byte and store it in our variable // the byte sent is actually an ascii value incomingByte = Serial.read(); // note the upper casing of each letter! // diferrent lettre pour les directions. if (incomingByte == 'Q') { digitalWrite(baseMotorPin1, LOW); digitalWrite(baseMotorPin2, HIGH); } if (incomingByte == 'W') { digitalWrite(baseMotorPin1, HIGH); digitalWrite(baseMotorPin2, LOW); } if (incomingByte == 'E') { digitalWrite(epauleMoteurPin1, LOW); digitalWrite(epauleMoteurPin2, HIGH); } if (incomingByte == 'R') { digitalWrite(epauleMoteurPin1, HIGH); digitalWrite(epauleMoteurPin2, LOW); } if (incomingByte == 'A') { digitalWrite(coudeMoteurPin1, LOW); digitalWrite(coudeMoteurPin2, HIGH); } if (incomingByte == 'S') { digitalWrite(coudeMoteurPin1, HIGH); digitalWrite(coudeMoteurPin2, LOW); } if (incomingByte == 'D') { digitalWrite(poigneeMoteurPin1, LOW); digitalWrite(poigneeMoteurPin2, HIGH); } if (incomingByte == 'F') { digitalWrite(poigneeMoteurPin1, HIGH); digitalWrite(poigneeMoteurPin2, LOW); } if (incomingByte == 'Z') { digitalWrite(pinceMoteurPin1, LOW); digitalWrite(pinceMoteurPin2, HIGH); } if (incomingByte == 'X') { digitalWrite(pinceMoteurPin1, HIGH); digitalWrite(pinceMoteurPin2, LOW); } // si O est envoyer les moteurs ne s'allumeront pas (OFF) if (incomingByte == 'O') { digitalWrite(baseMotorPin1, LOW); digitalWrite(baseMotorPin2, LOW); digitalWrite(epauleMoteurPin1, LOW); digitalWrite(epauleMoteurPin2, LOW); digitalWrite(coudeMoteurPin1, LOW); digitalWrite(coudeMoteurPin2, LOW); digitalWrite(poigneeMoteurPin1, LOW); digitalWrite(poigneeMoteurPin2, LOW); digitalWrite(pinceMoteurPin1, LOW); digitalWrite(pinceMoteurPin2, LOW); } } }
Cordialement Dylan.
#26
Posté 22 mai 2012 - 11:49
Pour ce qui et du code , je les compilé , et il y a des erreurs , les voici en image, et il
y en a d'autre encore.
Donc, c'est des petite erreurs d’inattention , je tes corrigé toutes les erreurs.
Voici le code propre.
int baseMoteurEnablePin = 2; int baseMoteurPin1 = 3; int baseMoteurPin2 = 4; int epauleMoteurEnablePin = 14; int epauleMoteurPin1 = 15; int epauleMoteurPin2 = 16; int coudeMoteurEnablePin = 8; int coudeMoteurPin1 = 9; int coudeMoteurPin2 = 10; int poigneeMotorEnablePin = 5; int poigneeMotorPin1 = 6; int poigneeMotorPin2 = 7; int pinceMotorEnablePin = 11; int pinceMotorPin1 = 17; int pinceMotorPin2 = 18; // set a variable to store the byte sent from the serial port int incomingByte; void setup() { // set the L293D pins as outputs: pinMode(baseMoteurPin1, OUTPUT); pinMode(baseMoteurPin2, OUTPUT); pinMode(baseMoteurEnablePin, OUTPUT); digitalWrite(baseMoteurEnablePin, HIGH); pinMode(epauleMoteurPin1, OUTPUT); pinMode(epauleMoteurPin2, OUTPUT); pinMode(epauleMoteurEnablePin, OUTPUT); digitalWrite(epauleMoteurEnablePin, HIGH); pinMode(coudeMoteurPin1, OUTPUT); pinMode(coudeMoteurPin2, OUTPUT); pinMode(coudeMoteurEnablePin, OUTPUT); digitalWrite(coudeMoteurEnablePin, HIGH); pinMode(poigneeMotorPin1, OUTPUT); pinMode(poigneeMotorPin2, OUTPUT); pinMode(poigneeMotorEnablePin, HIGH); pinMode(pinceMotorPin1, OUTPUT); pinMode(pinceMotorPin2, OUTPUT); pinMode(pinceMotorEnablePin, OUTPUT); digitalWrite(pinceMotorEnablePin, HIGH); // start sending data at 9600 baud rate Serial.begin(9600); } void loop() { // check that there's something in the serial buffer if (Serial.available() > 0) { // read the byte and store it in our variable // the byte sent is actually an ascii value incomingByte = Serial.read(); // note the upper casing of each letter! // diferrent lettre pour les directions. if (incomingByte == 'Q') { digitalWrite(baseMoteurPin1, LOW); digitalWrite(baseMoteurPin2, HIGH); } if (incomingByte == 'W') { digitalWrite(baseMoteurPin1, HIGH); digitalWrite(baseMoteurPin2, LOW); } if (incomingByte == 'E') { digitalWrite(epauleMoteurPin1, LOW); digitalWrite(epauleMoteurPin2, HIGH); } if (incomingByte == 'R') { digitalWrite(epauleMoteurPin1, HIGH); digitalWrite(epauleMoteurPin2, LOW); } if (incomingByte == 'A') { digitalWrite(coudeMoteurPin1, LOW); digitalWrite(coudeMoteurPin2, HIGH); } if (incomingByte == 'S') { digitalWrite(coudeMoteurPin1, HIGH); digitalWrite(coudeMoteurPin2, LOW); } if (incomingByte == 'D') { digitalWrite(poigneeMotorPin1, LOW); digitalWrite(poigneeMotorPin2, HIGH); } if (incomingByte == 'F') { digitalWrite(poigneeMotorPin1, HIGH); digitalWrite(poigneeMotorPin2, LOW); } if (incomingByte == 'Z') { digitalWrite(pinceMotorPin1, LOW); digitalWrite(pinceMotorPin2, HIGH); } if (incomingByte == 'X') { digitalWrite(pinceMotorPin1, HIGH); digitalWrite(pinceMotorPin2, LOW); } // si O est envoyer les moteurs ne s'allumeront pas (OFF) if (incomingByte == 'O') { digitalWrite(baseMoteurPin1, LOW); digitalWrite(baseMoteurPin2, LOW); digitalWrite(epauleMoteurPin1, LOW); digitalWrite(epauleMoteurPin2, LOW); digitalWrite(coudeMoteurPin1, LOW); digitalWrite(coudeMoteurPin2, LOW); digitalWrite(poigneeMotorPin1, LOW); digitalWrite(poigneeMotorPin2, LOW); digitalWrite(pinceMotorPin1, LOW); digitalWrite(pinceMotorPin2, LOW); } } }
#27
Posté 22 mai 2012 - 12:13
Cordialement Dylan.
#28
Posté 22 mai 2012 - 12:17
Cordialement Dylan.
#29
Posté 22 mai 2012 - 12:26
fonction .
et après rajouter un bout de code pour contrôler avec bluetooth ?
heu... désolé je n'est jamais fait de teste pour contrôlé mon propre robot par Bluetooth , donc je ne te serré pas utile pour
cela.
#30
Posté 22 mai 2012 - 12:51
Cordialement Dylan.
#31
Posté 22 mai 2012 - 01:14
Ton PC , c'est un PC potable qui a le Bluetooth intégré , ou aise un PC bureaux , et tu possède une clés Bluetooth.
#32
Posté 22 mai 2012 - 05:38
simple question en passant . Le code que tu m'as corrige , sais tu comment les moteurs fonctionnent quand j'appuie sur une touche . Je m'explique plus clairement . Si j'appuie sur W pour avancer , si j'appuie un bref coup sur la touche le robot avancera un tout petit peu , ou avancera t-il quelques dizaines de cm ? si tu n'as pas compris , fais moi signe , j'essaierais d'être plus clair
Cordialement Dylan.
#33
Posté 23 mai 2012 - 09:53
Le code que tu m'as corrige , sais tu comment les moteurs fonctionnent quand j'appuie sur une touche . Je m'explique plus clairement . Si j'appuie sur W pour avancer , si j'appuie un bref coup sur la touche le robot avancera un tout petit peu , ou avancera t-il quelques dizaines de cm ? si tu n'as pas compris , fais moi signe , j'essaierais d'être plus clair
Le code que je tes fourni exemple celui si:
int EN1 = 6; int EN2 = 5; int IN1 = 7; int IN2 = 4; void Motor1(int pwm, boolean reverse) { analogWrite(EN1,pwm); //définir le contrôle PWM, 0 pour l'arrêt, et 255 pour une vitesse maximale if(reverse) { digitalWrite(IN1,HIGH);//(HAUT) } else { digitalWrite(IN1,LOW); //(BAS) } } void Motor2(int pwm, boolean reverse) { analogWrite(EN2,pwm); if(reverse) { digitalWrite(IN2,HIGH);//(HAUT) } else { digitalWrite(IN2,LOW);//(BAS) } } void setup()// fonction setup - début de l'exécution du programme { int i; for(i=4;i<=7;i++) //Pour Arduino Shield moteur pinMode(i, OUTPUT); //régler les broche 4,5,6,7 au mode de sortie Serial.begin(9600); // ouvre le port série et fixe le debit de communication à 9600 bauds } void loop()// fonction loop - est exécutée en boucle , une fois que la fonction setup a été exécutée { int x,delay_en; char val; // déclare une variable char while(1) // tant que l'expression est vraie { val = Serial.read();// lit l'octet entrant if(val!=-1) { switch(val)// debut de la structure { case 'w'://Aller de l'avant //Vous pouvez changer la vitesse, comme moteur (50, true) Motor1(100,true); //true (=VRAI) Motor2(100,true);//true (=VRAI) break;// sortie de la boucle case 'x'://reculer Motor1(100,false); //false (= FAUX) Motor2(100,false);//false (= FAUX) break;// sortie de la boucle case 'a'://tourner à gauche Motor1(100,false);//false (= FAUX) Motor2(100,true);//true (=VRAI) break; // sortie de la boucle case 'd'://tourner à droite Motor1(100,true); //true (=VRAI) Motor2(100,false);//false (= FAUX) break; // sortie de la boucle case 's'://stop Motor1(0,false); //false (= FAUX) Motor2(0,false);//false (= FAUX) break;// sortie de la boucle } } } }
Fait en sorte cas chaque pression de touche de ton clavier ton robot avance , recule , tourne , ou
s’arrête.
En gros tu presse la touche W il avance en permanence , mes pour l’arrêté il faut pressé la
touche S , c'est la même chose pour les autre touche.
Voila , désolé pour mon tant de réponse.
@Amicalement.
Voila.
#34
Posté 23 mai 2012 - 01:40
Cordialement Dylan.
#35
Posté 24 mai 2012 - 08:31
Alors voila j'ai publier la 1ère partie de mon code sur "Projet et réalisation" et je reviens donc sur la catégorie Informatique pour continuer mon code.
Il me reste le contrôle de mes 2 servomoteurs , ceux qui servent a faire avancer mon châssis. Donc avant de commencer j'ai une question , puis-je utiliser les flèches de mon clavier pour les contrôler ?
Cordialement Dylan.
#36
Posté 24 mai 2012 - 11:02
et les chiffres de ton clavier.
#37
Posté 24 mai 2012 - 01:05
pour mon code pour mes servomoteurs , je voudrais savoir si vous avez un bout ou un tutoriel . car je suis tomber sur celui la et je suis pas sur . http://www.mon-club-elec.fr/pmwiki_mon_club_elec/pmwiki.php?n=MAIN.ArduinoExpertServoControlePositionClavierPC
Cordialement Dylan.
#39
Posté 24 mai 2012 - 06:46
#include <Servo.h> // librairie pour servomoteur const int SERVO1=11; const int SERVO2=12; int ReceptionOctet=0; // variable de stockage des octets reçus par port série int ReceptionNombre=0; // variable de calcul du nombre reçu par port série int impulsion=1500; // variable pour impulsion - valeur médiane initiale Servo servo_1; Servo servo_2; void setup() { servo_1.attach(SERVO1); servo_2.attach(SERVO1); Serial.begin(115200); pinMode(SERVO1, OUTPUT); pinMode(SERVO2, OUTPUT); } void loop(){ if (Serial.available()>0) { while (Serial.available()>0) { ReceptionOctet= Serial.read(); ReceptionOctet=ReceptionOctet-48; if ((ReceptionOctet>=0)&&(ReceptionOctet<=9)) ReceptionNombre = (ReceptionNombre*10)+ReceptionOctet; delay(1); } Serial.print ("Nombre recu= "); Serial.println(ReceptionNombre); impulsion=ReceptionNombre; if (impulsion>2600)impulsion=2500; if (impulsion<300)impulsion=500; servo_1.writeMicroseconds(impulsion); servo_2.writeMicroseconds(impulsion); Serial.print ("Impulsion servomoteur = "); Serial.print(impulsion); Serial.println (" microsecondes "); delay (1000); ReceptionNombre=0; } }
Quand dites vous pour ce début ?
Cordialement Dylan.
#40
Posté 24 mai 2012 - 08:52
tu ne pourra pas contrôlé tes servo avec ton clavier.
0 utilisateur(s) li(sen)t ce sujet
0 members, 0 guests, 0 anonymous users