Besoin d'aide avec programme pour moteur pas à pas

Bonjour, je suis un élève de première et je fais spé SI, nous devons réaliser un projet pour la fin de l'année (qui est bien entamé) mais en ce qui concerne ma partie (la programmation) je suis complètement bloqué ne m'y connaissant pas bien à Arduino.

Voici l'idée, nous sommes en train de créer un distributeur qui fonctionne à l'aide de deux moteurs pas à pas, chacun branché à un L298 qui sont eux mêmes branchés à une carte aduino Uno.
Je suis désolé d'avance comme je suis chez moi je n'ai pas accès à Proteus et ne peut pas vous montrer à quoi ressemble le montage.

Mon programme consiste à faire en sorte qu'en appuyant sur un bouton (qui fait évidemment passer le courant) relié à la broche 12 de la carte Arduino, l'un des deux moteurs se mettent à tourner, et il est choisi grâce à un commutateur à 2 positions qui active une broche (2 ou 3) de la carte qui sont chacune associées à une séries de broche faisant tourner un moteur : 4,5,6,7 pour l'un, 8, 9, 10, 11 pour l'autre.

Pour clarifier un maximum, mon but est que si j'appuie sur le bouton, que la broche 12 est bien activée, l'un des moteurs s'active en fonction de la broche activée par le commutateur, soit la 2 pour le premier moteur, soit la 3 pour le deuxième.

Seulement, même si je pense être sur la bonne voie, mon programme ne fonctionne pas bien, lorsque le commutateur est sur la position de gauche et que j'appuie sur le bouton, rien ne fonctionne, alors que sur la position de droite le moteur associé tourne bel et bien.

Le programme en question :

#include <Stepper.h>

int NbrPas = 200; 


Stepper MonMoteur(NbrPas, 8, 9, 10, 11);
Stepper Monmoteur2(NbrPas, 4, 5, 6, 7);

const int buttonPin = 2;  

int buttonState = 0; 
        
void setup() {
 
  pinMode(buttonPin, INPUT);
  pinMode (12, INPUT);
  pinMode (2, INPUT);
  pinMode (3, INPUT);
 
  MonMoteur.setSpeed(100);
  Serial.begin(9600);
  int NombreDePas;
  pinMode (8, OUTPUT);
  pinMode (9, OUTPUT);
  pinMode (10, OUTPUT);
  pinMode (11, OUTPUT);

  pinMode (4, OUTPUT);
  pinMode (5, OUTPUT);
  pinMode (6, OUTPUT);
  pinMode (7, OUTPUT);
  
 
}

void loop() 
{
  buttonState = digitalRead(buttonPin);
  if ((buttonState == HIGH) && (digitalRead(2)==HIGH) && (digitalRead(12)==HIGH)){
  
  digitalWrite(8, HIGH); digitalWrite (9, LOW); digitalWrite (10, LOW); digitalWrite (11, LOW);
  delay(100);
  digitalWrite(8, LOW); digitalWrite (9, LOW); digitalWrite (10, HIGH); digitalWrite (11, LOW);
  delay(100);
  digitalWrite(8, LOW); digitalWrite (9, HIGH); digitalWrite (10, LOW); digitalWrite (11, LOW); 
  delay(100);
  digitalWrite(8, LOW); digitalWrite (9, LOW); digitalWrite (10, LOW); digitalWrite (11, HIGH);
  delay(100);
  digitalWrite(8, HIGH); digitalWrite (9, LOW); digitalWrite (10, LOW); digitalWrite (11, LOW);
  delay(2000);
  }
  else{

  buttonState = digitalRead(buttonPin);
  if ((buttonState == HIGH) && (digitalRead(3)==HIGH) && (digitalRead(12)==HIGH)){

    digitalWrite(4, HIGH); digitalWrite (5, LOW); digitalWrite (6, LOW); digitalWrite (7, LOW);
  delay(100);
  digitalWrite(4, LOW); digitalWrite (5, LOW); digitalWrite (6, HIGH); digitalWrite (7, LOW);
  delay(100);
  digitalWrite(4, LOW); digitalWrite (5, HIGH); digitalWrite (6, LOW); digitalWrite (7, LOW); 
  delay(100);
  digitalWrite(4, LOW); digitalWrite (5, LOW); digitalWrite (6, LOW); digitalWrite (7, HIGH);
  delay(100);
  digitalWrite(4, HIGH); digitalWrite (5, LOW); digitalWrite (6, LOW); digitalWrite (7, LOW);
  delay(2000);
  }
  }
}

Il y a très certainement de grossières erreurs et je vous prie de ne pas me descendre :sweat_smile: , comme je l'ai dis je n'y connais absolument rien et cherche seulement à pouvoir finir mon projet alors que je semble être proche du but.
Merci beaucoup d'avance à ceux qui me répondrons et m'apporteront conseils. :smile:

What kind of switch are you using that is connected to pin 2 and 3?

(Google translate: Quel type de commutateur utilisez-vous qui est connecté aux broches 2 et 3?)

Non, n'essayes pas de nous faire pleurer sur ton sort.
Figures toi que chaque année, nous lisons les mêmes lamentations et qu'à part les nouveaux du forum plus personne ne se laisse prendre.
Dis-toi bien aussi que ton professeur surveille ce forum alors fait attention à ce que tu écris.

Joues cartes sur table.

  • As-tu réussi à simplement faire tourner un moteur en dehors de toute considération de bouton?
  • As-tu réussi à faire une action, n'importe laquelle, allumer la led de la carte par exemple, quand un bouton est appuyé ?

Il y a une méthode qui fonctionne bien :
Écrire en français ce que le programme doit faire sous la forme :
Si les conditions A, B ou C sont vraies => alors je fais ceci.

Bonjour matmatpat

Alors que dans ton programme tu as:
const int buttonPin = 2;
et
buttonState = digitalRead(buttonPin);
Tu dois mettre
const int buttonPin = 12;
la 2 étant utilisée par le commutateur.

Prends l'habitude de nommer toutes les pin que tu utilises comme tu as fait pour buttonPin, ça évite pas mal de problèmes et ça rends le programme plus lisible.

Dernier truc, tu as un peu trop "tricoté" tes conditions, c'est beaucoup simple!

	buttonState = digitalRead(buttonPin);
	if (buttonState == HIGH)     // Si bouton est pressé
	{
		if (digitalRead(2) == HIGH)     // Si commutateur sur moteur 1
		{
			Serial.println("Moteur 1 tourne");
		}
		else     // Donc commutateur sur moteur 2
		{
			Serial.println("Moteur 2 tourne");
		}
		delay(2000);
	}

Cordialement
jpbbricole

image

This kind

Merci beaucoup, donc si j'ai bien compris

Serial.println("Moteur 1 tourne");

Remplace complètement

digitalWrite(8, HIGH); digitalWrite (9, LOW); digitalWrite (10, LOW); digitalWrite (11, LOW);
  delay(100);
  digitalWrite(8, LOW); digitalWrite (9, LOW); digitalWrite (10, HIGH); digitalWrite (11, LOW);
  delay(100);
  digitalWrite(8, LOW); digitalWrite (9, HIGH); digitalWrite (10, LOW); digitalWrite (11, LOW); 
  delay(100);
  digitalWrite(8, LOW); digitalWrite (9, LOW); digitalWrite (10, LOW); digitalWrite (11, HIGH);
  delay(100);
  digitalWrite(8, HIGH); digitalWrite (9, LOW); digitalWrite (10, LOW); digitalWrite (11, LOW);
  delay(2000);

Je comprends mais c'est compliqué, je n'avais jamais fait d'Arduino, et on m'a refilé la partie la plus complexe du travail. Si je ne suis pas le premier et ne sera pas le dernier, c'est peut être pas moi mais le système qu'il faut blâmer, enfin bref.

Pour tes deux questions, je dirais oui à la première et non à la deuxième, j'ai pas vraiment essayé vu que c'était pas le but, pour dire je ne savais pas que la carte avait une led ou alors j'ai mal compris ?

Pour le coup c'est l'idée que j'ai essayé de suivre

Bonsoir matmatpat

Oui

Cordialement
jpbbricole

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.