Bonjour axellle1
Peut être à cause de ce conflit à l'attribution des pin, tu écris la vitesse sur la même pin (3) que l'entrée A du codeur.
#define outputA 3
et
analogWrite(3, vitesse); // reglage de la vitesse ...
J'ai corrigé la pin A de l'encodeur selon:
Il n'est pas pratique d'utiliser les numéros de pin, directement, il est mieux de déclarer en début de programme, ces pin en leur attribuant un nom explicite.
Déclarer tout ça au début du programme te permet d'avoir une vue d'ensemble de tes attributions et, ainsi, éviter ce genre de conflits.
Je t'ai intégré Encoder.h, ainsi tu peux voir la facilité avec laquelle on peut lire un codeur rotatif, contrairement à la méthode "faite à la main"
J'ai laissé les lignes, devenues inutile, en remarque.
Le programme:
#include <Encoder.h> // https://www.arduino.cc/reference/en/libraries/encoder/
#define encodeurPinA 2
#define encodeurPinB 4
Encoder encodeur(encodeurPinA, encodeurPinB);
int counter = 0;
int counterMemoire = 0; // Pour mémoriser la précédente valeur
//int aState;
//int aLastState;
const int moteur1vitessePin = 3; // Moteur 1 réglage de la vitesse
const int moteur2vitessePin = 11; // Moteur 2 réglage de la vitesse
int vitesse;
int moteur;
bool valeursRecues = false; // Variable pour indiquer si les valeurs ont été reçues
void setup() {
//pinMode(outputB, INPUT);
//aLastState = digitalRead(encodeurPinA);
Serial.begin(9600);
encodeur.write(0); // Mettre le compteur de l'encodeur à 0
//attachInterrupt(digitalPinToInterrupt(encodeurPinA), updateEncoder, CHANGE);
pinMode(12, OUTPUT);
pinMode(9, OUTPUT);
// Setup Channel A
pinMode(12, OUTPUT); // Initiates Motor Channel A pin
pinMode(9, OUTPUT); // Initiates Brake Channel A pin
// Setup Channel B
pinMode(13, OUTPUT); // Initiates Motor Channel B pin
pinMode(8, OUTPUT); // Initiates Brake Channel B pin
}
void loop() {
counter = encodeur.read(); // https://www.pjrc.com/teensy/td_libs_Encoder.html
if (counter != counterMemoire) // Si changement de valeur
{
Serial.println(counter);
counterMemoire = counter; // On mémorise la nouvelle valeur
}
if (Serial.available() > 0) { // verifie qu'il y a des donnée dans le port serie
int bymoteur = Serial.parseInt(); // recupére un entier qui correspond au comportement que l'on demande a un moteur (voir plus bas moteur)
int byvitesse = Serial.parseInt(); // récupére les donnée qui son lié à la vitesse
while (Serial.available() > 0) { // boucle qui vide la memoire tempon serie
Serial.read();
}
moteur = bymoteur;
vitesse = byvitesse;
//condition qui verifie que les valeur saisie son bien formater
if (moteur >= 1 && moteur <= 12 && vitesse >= 0 && vitesse <= 255) {
// Si les valeurs reçues sont valides
valeursRecues = true; // Définis la variable à true lorsque les valeurs sont reçues
} else {
// Si les valeurs reçues ne sont pas valides
valeursRecues = false; // Définis la variable à false pour éviter d'exécuter les commandes du moteur
}
}
// Exécute les commandes de contrôle du moteur uniquement si les valeurs ont été reçues
if (valeursRecues) {
if (vitesse >= 0 && moteur > 0) {
if (moteur == 1) { // si moteur = 1 le moteur 1 tournera dans le sens des éguille d'une montre
digitalWrite(12, HIGH); // sens de rotation du moteur (12 = moteur 1 et high = direction sens des éguille d'une montre)
digitalWrite(9, LOW); // paramatrage frein moteur (9 = moteur 1 et low = sans frein )
analogWrite(moteur1vitessePin, vitesse); // reglage de la vitesse (3 = moteur 1 et vitesse = la vitesse qui vas de 0 à 255)
} else if (moteur == 2) { // si variable "moteur" = 2 le moteur 1 tournera dans le inversse du sens des éguille d'une montre
digitalWrite(12, LOW); // sens de rotation du moteur (12 = moteur 1 et low = direction inverse sens des éguille d'une montre)
digitalWrite(9, LOW); // paramatrage frein moteur (9 = moteur 1 et low = sans frein )
analogWrite(moteur1vitessePin, vitesse); // reglage de la vitesse (3 = moteur 1 et vitesse = la vitesse qui vas de 0 à 255)
} else if (moteur == 11) { // si variable "moteur" = 11 le moteur 2 tournera dans le sens des éguille d'une montre
digitalWrite(13, HIGH); // sens de rotation du moteur (13 = moteur 2 et high = direction sens des éguille d'une montre)
digitalWrite(8, LOW); // paramatrage frein moteur (8 = moteur 2 et low = sans frein )
analogWrite(moteur2vitessePin, vitesse); // reglage de la vitesse (11 = moteur 2 et vitesse = la vitesse qui vas de 0 à 255)
} else if (moteur == 12) { // si variable "moteur" = 12 le moteur 2 tournera dans le inversse du sens des éguille d'une montre
digitalWrite(13, LOW); // sens de rotation du moteur (13 = moteur 2 et low = direction inverse sens des éguille d'une montre)
digitalWrite(8, LOW); // paramatrage frein moteur (8 = moteur 2 et low = sans frein )
analogWrite(moteur2vitessePin, vitesse); // reglage de la vitesse (11 = moteur 2 et vitesse = la vitesse qui vas de 0 à 255)
} }else {
// Arrêter le moteur
digitalWrite(9, HIGH); // paramatrage frein moteur (9 = moteur 1 et hight = avec frein )
digitalWrite(8, HIGH); // paramatrage frein moteur (8 = moteur 2 et hight = avec frein )
}
}
}
//void updateEncoder() {
//aState = digitalRead(encodeurPinA);
//if (aState != aLastState) {
//if (digitalRead(outputB) != aState) {
//counter++;
//} else {
//counter--;
//}
//Serial.print("Position: ");
//Serial.println(counter);
//}
//aLastState = aState;
//}
A ta disposition pour toutes questions.
Cordialement
jpbbricole