contrôle moteurs

Voici un article très court ! Pas de super montage mais un programme intéressant trouvé sur le site de DFRobot

Je n’ai pas ce nouveau shield et j’ai juste modifié dans le programme les pin de contrôle pour qu’il tourne sur le matériel que j’ai. Regardez bien comment le programme est écrit, pour ma part j’ai appris plein de choses en l’épluchant. La définition est assez sophistiquée mais à l’utilisation, les fonctions sont très simples.


// Programme venant du wiki DFrobot
// Adapté pour shield DRI0009
// cette version fonctionne aussi sur :
//   - DFRduino Romeo V1 et V2
//   - module MD 1.3 DRI0002

/**set control port**/
const int E1Pin = 5 ; // pin pwm vitesse
const int M1Pin = 4 ; // pin sens

const int E2Pin = 6 ; // pin pwm vitesse
const int M2Pin = 7 ; // pin sens
 
/**inner definition**/
typedef struct {
  byte enPin;
  byte directionPin;
} MotorContrl;
 
const int M1 = 0;
const int M2 = 1;
const int MotorNum = 2;
 
const MotorContrl MotorPin[] = { {E1Pin, M1Pin}, {E2Pin, M2Pin} } ;
 
const int Forward = LOW;
const int Backward = HIGH;
 
/**program**/
void setup() {
  initMotor();
}
 
void loop() {
  int value;
  /**test M1 **/
  setMotorDirection( M1, Forward );
  setMotorSpeed( M1, 100 );
  delay(1000);
  setMotorSpeed( M1, 0 );
  delay(1000);
 
  setMotorDirection( M1, Backward );
  setMotorSpeed( M1, 50 );
  delay(1000);
  setMotorSpeed( M1, 0 );
  delay(1000);
 
  /**test M2**/
  setMotorDirection( M2, Backward );
  for (value = 0 ; value <= 100; value += 5) {
    setMotorSpeed( M2, value );
    delay(1000);
  }
  setMotorSpeed( M2, 0 );
  setMotorDirection( M2, Forward );
  for (value = 0 ; value <= 100; value += 5) {
    setMotorSpeed( M2, value );
    delay(1000);
  }
  setMotorSpeed( M2, 0 );
}
 
/**functions**/
void initMotor( ) {
  int i;
  for ( i = 0; i < MotorNum; i++ ) {
    digitalWrite(MotorPin[i].enPin, LOW);
 
    pinMode(MotorPin[i].enPin, OUTPUT);
    pinMode(MotorPin[i].directionPin, OUTPUT);
  }
}
 
/**  motorNumber: M1, M2
direction:          Forward, Backward **/
void setMotorDirection( int motorNumber, int direction ) {
  digitalWrite( MotorPin[motorNumber].directionPin, direction);
}
 
/** speed:  0-100   * */
inline void setMotorSpeed( int motorNumber, int speed ) {
  analogWrite(MotorPin[motorNumber].enPin, 255.0 * (speed / 100.0) ); //PWM
}