Bonjour à toutes et tous
J'ai fait un programme avec des morceau glané sur internet et dans les livres, mais je bloque pour finaliser mon projet, je suis novice dans la programmation
Un moteur PAP, 2 LEDs rouge et verte, 1 bouton poussoir, et 1 fin de course, j'en prévois 2, carte mega 2560
1er appuis le moteur tourne de 270 et la LED verte s'allume (ou la rouge)
2eme appui le moteur tourne de 270 en sens inverse, la LED rouge s'allume et la verte s'éteint
En cas de coupure de courant le moteur se réinitialise et dépasse les limites que j'ai fixés
je voudrais mettre les fin de course pour couper le courant en cas de reinitialisation
J'ai réussi à connecter le fin de course mais il ne fonctionne que lors de la mise sous tension pas en cours de mouvement
je voudrais qu'il stoppe le moteur quelque soit la position ou le sens
Merci à vous
// LES DECLARATIONS
int bouton = 8; // pin 8 bouton poussoir
int valeur_bouton = 0; // variable pour enregistrer l'état du bouton
int valeur_precedante_bouton = 0; // variable pour enregistrer l'ancien état du bouton
int led_rouge = 13; // pin 13 led rouge
int led_verte = 12; // pin 12 led verte
int compteur = 0; // variable du compteur
int fin_de_course_1 = 42; // pin 42 contact fin de course
#include <Stepper.h>
//pour un moteur de 200 pas par tour et brancher sur les broches 2, 3, 4, 5
Stepper moteur(200, 5, 3, 4, 2);
boolean premiereFois = false;
boolean premiereFois2 = false;
void setup() {
pinMode(led_rouge, OUTPUT); // pin en sortie
pinMode(led_verte, OUTPUT); // pin en sortie
pinMode(bouton, INPUT); // pin en entrée
pinMode(fin_de_course_1, INPUT); // pin en entrée
moteur.setSpeed(16); // Vitesse 30 tours par minute
}
void loop() {
boolean etatfincourse_1 = digitalRead(fin_de_course_1); //lecture du contact fin de course
//UN APPUI SUR LE BOUTON ALLUME UN NOUVEL APPUI SUR LE BOUTON ETEINT
valeur_bouton = digitalRead(bouton); // interrogation du bouton poussoir, la valeur précédante est elle différente de la valeur l'actuelle?
if (valeur_precedante_bouton != valeur_bouton) {
if (valeur_bouton == HIGH) {
compteur++; // On incrémente le compteur (+1 à chaque appui)
}
}
valeur_precedante_bouton = valeur_bouton; // sauvegarder la valeur actuelle du bouton
if (etatfincourse_1 == HIGH) //si contact fermé
if (compteur % 2 == 0) // on incrémente la variable compteur à chaque boucle
// le signe %indique diviser voir tableau page 264, le résultat est soit pair (0) ou impair (1)
// traduction du code: SI(compteur pair (0) ecrire digitalWrite(led_rouge,HIGH)
{ // SINON il est donc de (1) et dans ce cas c'est l'instruction digitalWrite(led_rouge, LOW)
digitalWrite(led_rouge, HIGH);
if (!premiereFois) {
moteur.step(270); // angle de rotation
premiereFois = true; // stop le moteur après la première phase
premiereFois2 = false; // initialise pour la phase 2
}
}
else
digitalWrite(led_rouge, LOW);
if (compteur % 2 == 1) // le signe %indique diviser voir tableau page 264, le résultat est soit pair (0) ou impair (1)
// traduction du code: SI(compteur impair (1) ecrire digitalWrite(led_verte,HIGH)
// SINON il est donc de (0) et dans ce cas c'est l'instruction digitalWrite(led_verte, LOW)
{
digitalWrite(led_verte, HIGH);
if (!premiereFois2) {
moteur.step(-270); // angle de rotation
premiereFois2 = true; // stop le moteur après la deuxième phase
premiereFois = false; // initialise pour la phase 1
}
}
else
digitalWrite(led_verte, LOW);
}