Code arduino motor shield V3 avec 2 capteur de pressence.

Bonjour, j'ai réalisé mon code arduino afin de faire tourner mon moteur dans un sens et dans un autre selon si je suis sur le capteur de présence 1 ou 2. Mais le problème est que mon programme marche que pour le capteur de présence 1. Le capteur de présence 2 détecte bien la présence mais le moteur reste a l’arrêt.

const int vitesseMotA=3; // Constante pour la broche 3
const int sensMotA=12; // Constante pour la broche 12
const int freinMotA=9; // Constante pour la broche 9
int presence1=7;// capteur 1
int etatpresence1;
int presence2=6;// capteur 2
int etatpresence2;

void setup()   { 
Serial.begin(9600); 

// ------- Broches en sorties numériques -------  
 pinMode (vitesseMotA,OUTPUT); // Broche vitesseMotA configurée en sortie
 pinMode (freinMotA,OUTPUT); // Broche freinMotA configurée en sortie
 pinMode (sensMotA,OUTPUT); // Broche sensMotA configurée en sortie
 pinMode (presence1,INPUT); // capteur de pressence1
 pinMode (presence2,INPUT); // capteur de pressence2

// ------- Initialisation des variables utilisées -------  

// ------- Codes d'initialisation utile -------  
digitalWrite(vitesseMotA,LOW); // a l'arret
digitalWrite(sensMotA,LOW); 
digitalWrite(freinMotA,LOW); // frein off 

}

void loop(){ // debut de la fonction loop()
  
etatpresence1 = digitalRead(presence1);
etatpresence2 = digitalRead(presence2);

if (etatpresence1== LOW)
//- sens 1
{
  digitalWrite(sensMotA,LOW); // sens 1
digitalWrite(vitesseMotA, HIGH); // vitesse maximale

}
else{
  
digitalWrite(vitesseMotA,LOW); // a l'arret
digitalWrite(sensMotA,LOW); 
digitalWrite(freinMotA,LOW); // frein off 
}
Serial.println(etatpresence1);


if (etatpresence2== LOW)
//- sens 2
{
  digitalWrite(sensMotA,HIGH); // sens 2
digitalWrite(vitesseMotA, HIGH); // vitesse maximale
}
else{
digitalWrite(vitesseMotA,LOW); // a l'arret
digitalWrite(sensMotA,LOW); 
digitalWrite(freinMotA,LOW); // frein off 
}
}

La façon dont vous avez codé cela fait que vous envoyez toujours l'ordre d'arrêt du moteur si presence2 est HIGH. j'imagine que quand presence1 est LOW vous n'êtes pas détecté de l'autre côté et donc le second if annule quasiment instantanément votre ordre du premier if

envoyez l'ordre d'arrêt que quand c'est nécessaire --> faites une table des possibilités avec presence1 et presence2 suivant HIGH ou LOW et déterminez les ordres exécuter

HIGH HIGH --> arrêt HIGH LOW --> sens + LOW HIGH --> sens - LOW LOW --> impossible? Décider quoi faire (détection des 2 côtés la fois)

if (presence1 == HIGH && presence2 == HIGH) {
//arrêt 

} else if (presence1 == HIGH && presence2 == LOW) {
// sens +

} else if ....

Généralement on nomme les pins avec le mot pin (eg vitesseMotAPin) car ce n'est pas la vitessse du moteur qui est contenu dans cette variable mais bien le No de la pin. Ça simplifie la lecture. C'est bien d'avoir pensé les déclarer en const dans l'absolu vaut mieux utiliser un byte qu'un int pour le type (même si ça ne change pas grand chose car le compilateur née va jamais allouer cet espace mémoire et va directement optimiser le code en mettant la valeur dans les appels de fonctions puisqu'elle est constante)

Merci, pour c'est information. Par contre j'ai un message d'erreur qui s'affiche a chaque fois.

c:\program files (x86)\arduino\hardware\tools\avr\bin\../lib/gcc/avr/4.9.2/../../../../avr/bin/ar.exe: unable to rename 'core\core.a'; reason: Permission denied

exit status 1
Erreur de compilation pour la carte Arduino/Genuino Uno

Je ne voit pas quoi faire.

Réinstallez la dernière version de l’IDE et les drivers sur votre disque dur principal