Bonjour,
La suite de du projet en concluant pour moi, en effet, pour répondre à réflexion sur le retour au neutre, je l'ai fait, un peu brouillon, mais ça fonctionne !
Le bout de code :
#define potard A0 // pin du potentiomètre
#define out1 9 // pin de la sortie pour le pont en H
#define out2 10 // pin de la sortie du pont en H
#define en1 3
#define zone 30 // varible de la zone neutre pour éviter les oscilations
#define max_speed 250 // vitesse max du moteur en PWM
int cal, milieu, mini, maxi, vitesse; // calibration de l'axe et de la vitesse, du centre
void test (){
digitalWrite(out1, LOW);
digitalWrite(out2, HIGH);
analogWrite(en1, max_speed);
delay(2000);
mini = analogRead(potard);
digitalWrite(out1, HIGH);
digitalWrite(out2, LOW);
analogWrite(en1, max_speed);
delay(2000);
maxi = analogRead(potard);
delay(2500);
milieu = (mini + maxi)/2;
}
void setup() {
pinMode(out1, OUTPUT);
pinMode(out2, OUTPUT);
pinMode(en1, OUTPUT);
test();
cal = milieu; // calibration de la valeur
}
void loop() {
int raw, raw1;
// mesure de la valeur brut
raw = analogRead(potard)-cal;
raw1 = zone + cal;
// moteur à l'arrêt si zone neutre
if (raw > -zone && raw < zone) {
vitesse = 0;
digitalWrite(out1,LOW);
digitalWrite(out2,LOW);
digitalWrite(en1, LOW);
}
else if (raw >= 0){ // sinon on revient au neutre, on recule
digitalWrite(out1, LOW);
digitalWrite(out2, HIGH);
vitesse = map(raw, 0, 1023 - cal, raw, max_speed);
//analogWrite(en1, vitesse);
}
else if (raw < 0){ // sinon on revient au neutre, on avance
digitalWrite(out1,HIGH);
digitalWrite(out2, LOW);
vitesse = map(raw, 0,cal - 1023, -raw, max_speed);
//analogWrite(en1, vitesse);
}
/*// consigne de la vitesse mini
if (vitesse < 70) {
vitesse = 0;
}
*/
// Sortie avec signal PWM
analogWrite(en1, vitesse);
//analogWrite(out2, vitesse);
}
petite précision, le montage fonctionne en l'état, seul bémol, le L298 pas assez costaud !!!