bonjour,
je suis en terminal sti2d, et j'ai projet. ce projet de faire un fauteuil roulant avec un joystick et 2 moteur .
j'ai un programme sur aduino mais je sa ne marche pas pourriez vous m'aider s'il vous plait c'est pour le bac.
j'utilise un pont H monster shield
ceci est le pont h
voici le programme:
Code:/* MonsterMoto Shield Example Sketch date: 5/24/11 code by: Jim Lindblom hardware by: Nate Bernstein SparkFun Electronics License: CC-SA 3.0, feel free to use this code however you'd like. Please improve upon it! Let me know how you've made it better. This is really simple example code to get you some basic functionality with the MonsterMoto Shield. The MonsterMote uses two VNH2SP30 high-current full-bridge motor drivers. Use the motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) function to get motors going in either CW, CCW, BRAKEVCC, or BRAKEGND. Use motorOff(int motor) to turn a specific motor off. The motor variable in each function should be either a 0 or a 1. pwm in the motorGo function should be a value between 0 and 255. */ #define BRAKEVCC 0 #define CW 1 #define CCW 2 #define BRAKEGND 3 #define CS_THRESHOLD 100 // Définition des broches analogique #define JOYSTICK_X A0 // X -> droite / gauche #define JOYSTICK_Y A1 // Y -> vitesse / direction // Définition des états des moteurs #define MOTEUR_STOP 0 #define MOTEUR_AVANCE 1 #define MOTEUR_RECULE 2 // Définition de la marge autour du point d'origine (0, 0) // Permet d'éviter que les moteurs n'oscille entre MOTEUR_AVANCE et MOTEUR_RECULE #define THRESHOLD 20 // Définition de la valeur maximum pour la vitesse #define MAX_SPEED 127 /* VNH2SP30 pin definitions xxx[0] controls '1' outputs xxx[1] controls '2' outputs */ int inApin[2] = {7, 4}; // INA: Clockwise input int inBpin[2] = {8, 9}; // INB: Counter-clockwise input int pwmpin[2] = {5, 6}; // PWM input int cspin[2] = {2, 3}; // CS: Current sense ANALOG input int enpin[2] = {0, 1}; // EN: Status of switches output (Analog pin) int statpin = 13; // Variables global // calX : calibration en 0 de l'axe X // calY : calibration en 0 de l'axe Y // vitesse : vitesse calculé // direction : direction calculé int calX, calY, vitesse, direction; // rawX : calibration en 0 de l'axe X // rawY : calibration en 0 de l'axe Y int rawX, rawY; // coefG : coefficient de vitesse (entre 0 et 1) pour le moteur gauche // coefD : coefficient de vitesse (entre 0 et 1) pour le moteur droit float coefG, coefD; // void setup() { Serial.begin(9600); // Initialisation du port série pinMode(statpin, OUTPUT); // Initialize digital pins as outputs for (int i=0; i<2; i++) { pinMode(inApin[i], OUTPUT); pinMode(inBpin[i], OUTPUT); pinMode(pwmpin[i], OUTPUT); } // Initialize braked for (int i=0; i<2; i++) { digitalWrite(inApin[i], LOW); digitalWrite(inBpin[i], LOW); } // Calibration de la valeur (0, 0) du joystick calX = analogRead(JOYSTICK_X); calY = analogRead(JOYSTICK_Y); // motorGo(0, CW, 1023); // motorGo(1, CCW, 1023); } void loop() { motorGo(0, CW, 1023); motorGo(1, CCW, 1023); delay(115200); motorGo(0, CCW, 1023); motorGo(1, CW, 1023); // Mesure des valeurs brute en X et Y rawX = analogRead(JOYSTICK_X) - calX; rawY = analogRead(JOYSTICK_Y) - calY; if ((analogRead(cspin[0]) < CS_THRESHOLD) && (analogRead(cspin[1]) < CS_THRESHOLD)) digitalWrite(statpin, HIGH); Serial.println("JOYSTICK_X"); } void motorOff(int motor) { // Initialize braked for (int i=0; i<2; i++) { digitalWrite(inApin[i], LOW); digitalWrite(inBpin[i], LOW); } analogWrite(pwmpin[motor], 0); } /* motorGo() will set a motor going in a specific direction the motor will continue going in that direction, at that speed until told to do otherwise. motor: this should be either 0 or 1, will selet which of the two motors to be controlled direct: Should be between 0 and 3, with the following result 0: Brake to VCC 1: Clockwise 2: CounterClockwise 3: Brake to GND pwm: should be a value between ? and 1023, higher the number, the faster it'll go */ void motorGo(uint8_t motor, uint8_t direct, uint8_t pwm) { if (motor <= 1) { if (direct <=4) { // Set inA[motor] if (direct <=1) digitalWrite(inApin[motor], HIGH); else digitalWrite(inApin[motor], LOW); // Set inB[motor] if ((direct==0)||(direct==2)) digitalWrite(inBpin[motor], HIGH); else digitalWrite(inBpin[motor], LOW); analogWrite(pwmpin[motor], pwm); } } }
-----