Bonjour,

Je débute dans la programmation et en récupérant des codes et en regardant des tutos, j'ai installé un système qui permet d'ouvrir ou fermer une porte coulissante en appuyant sur un bouton poussoir. Cela pilote un moteur avec une courroie qui entraine la porte.

Mon problème c'est que parfois la porte se ferme toute seule sans que j’appuie sur rien. J'ai des fins de course et un bouton poussoir et mon arduino est équipé d'un motor shield L298P.
Voici les pistes que j'essaye d'explorer pour comprendre le phénomène :
- saturation de la mémoire de l'arduino ?
- la longueur des fils entre l'arduino et les boutons présente des problèmes sur la tension lue
- problème d'utilisation des entrées pull-up et pull-down
- mon arduino est directement alimenter par le motorshield peut-être que ca présente un pb d'instabilité
- le fait que les fin de course restent fermé pendant longtemps en fonction de la position ouverte ou fermé du coup ce ne sont pas vraiment des boutons poussoir
- J'ai l'impression que ça ne peut venir que de la lecture de l'état du bouton poussoir


Voici le code, je ne sais pas comment le copier pour qu'il apparaissent comme dans notepad++ ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
// La broche numérique 4 est reliée au Bouton poussoir.
int Boutonp = 4 ;
// La broche numérique 7 est reliée a fin de course ouverte. 
int Fco = 7;
// La broche numérique 6 est reliée  a fin de course fermée.
int Fcf = 6;
// Déclaration variable EtatBouton qui va servir à stocker une valeur au format bool soit LOW ou HIGH.
boolean EtatBoutonp;
boolean EtatFco;
boolean EtatFcf;
 
void setup() {
  // Ouvre le port série à 9600 bps.
  Serial.begin(9600);
  // Faire de la broche du Bouton une entrée avec activation de la résistance de rappel interne de l'ARDUINO .
  pinMode(Boutonp, INPUT_PULLUP);
  pinMode(Fco, INPUT_PULLUP);
  pinMode(Fcf, INPUT_PULLUP);
  pinMode(12, OUTPUT); // Broche Arduino réservée pour le sens de rotation du moteur A
  pinMode(9, OUTPUT); // Broche Arduino réservée pour le freinage du moteur A
}
 
void loop() {
  // Lit les broches d'entrée
  EtatBoutonp = digitalRead(Boutonp);
  EtatFcf = digitalRead(Fcf);
  EtatFco = digitalRead(Fco);
  // Si EtatBoutonp == low
  if (EtatBoutonp == LOW && EtatFcf == LOW)
  {
         Serial.println("ouvrir");
     Ouvrir_porte();
  }
  // Sinon
  else if (EtatBoutonp == LOW && EtatFco == LOW)
  {
      Serial.println("fermer");
Fermer_porte();
  }
  //sinon si porte à moitié ouverte
else if (EtatBoutonp == LOW && EtatFco == HIGH && EtatFcf == HIGH)
{       Serial.println("ouvrir depuis milieu");
 Ouvrir_porte();
}
}
 
void Ouvrir_porte(){
  EtatFco = digitalRead(Fco);
 while ( EtatFco == HIGH){
	digitalWrite(12, LOW); // Le moteur A tourne dans le sens normal
	digitalWrite(9, LOW); // Désactivation du frein moteur A
	analogWrite(3,255 ); // Vitesse maximale pour le moteur A
    EtatFco = digitalRead(Fco);
 }
  Serial.println("fin ouverture");
    digitalWrite(12, LOW); // Le moteur A tourne dans le sens inverse
  digitalWrite(9, LOW); // Désactivation du frein moteur A
  analogWrite(3,0 ); // Vitesse maximale pour le moteur A
}
void Fermer_porte(){
  EtatFcf = digitalRead(Fcf);
while (EtatFcf == HIGH){
	digitalWrite(12, HIGH); // Le moteur A tourne dans le sens inverse
	digitalWrite(9, LOW); // Désactivation du frein moteur A
	analogWrite(3,255 ); // Vitesse maximale pour le moteur A
    EtatFcf = digitalRead(Fcf);
  }
  Serial.println("fin fermeture");
  digitalWrite(12, HIGH); // Le moteur A tourne dans le sens inverse
  digitalWrite(9, LOW); // Désactivation du frein moteur A
  analogWrite(3,0 ); // Vitesse maximale pour le moteur A
}

Voici une représentation du montage que j'ai modifié par rapport à la réalité pour pouvoir utiliser Tinkercad car je n'ai pas trouvé le L298P mais les modifications ne concerne que la partie du code liée au pilotage du moteur.
https://www.tinkercad.com/things/3lz...XSMGttP3gdnV5g

Merci d'avoir lu jusque là ;-p