Bonjour,
a partir d'une entrée, je cherche a piloter un petit moteur DC avec 4 relais 2 pour marche avant et 2 en inversant polarité pour la marche arrière.
au changement d'entrée d'un détecteur magnétique, il y a fonctionnement jusqu’à détection dufin de course et arrêt pour rester en phase repos jusqu'au prochain changement de l'entrée du détecteur magnétique .
// le detecteur est connecté a la borne 2 de la carte
const int DET = 2;
int state_det = LOW;
// le fin de course sur verin connecté a la borne 3
const int FDC = 3;
int state_fdc = LOW;
// sorties commande relais fermeture verin aux bornes 4 pour le + et 5 pour le -
const int Rfermpos = 4;
const int Rfermneg = 5;
// sorties commande relais ouverture verin aux bornes 6 et 7 tension inversée -
const int Rouvpos = 6;
const int Rouvneg = 7;
// variable pour switch case dans loop
int etat_sequence = 1; //identification sequence
_______________________________________________________________________
void setup() {
pinMode(DET, INPUT); // entree detecteur avec pullup
//interne inswitch entre broche et masse
digitalWrite (DET, HIGH);
pinMode(FDC, INPUT); // entrée fin de course avec pullup
//interne inswitch entre borne et masse
digitalWrite(FDC, HIGH);
// block 4 relais pour commande moteur piloté par entrée bas niveau
pinMode(Rfermpos, OUTPUT); //sortie relay fermeture positif
//digitalWrite (Rfermpos, HIGH); //condition initiale relais off
pinMode(Rfermneg, OUTPUT); // sortie relay fermeture negatif
//digitalWrite (Rfermneg, HIGH);//condition initiale relais off
pinMode(Rouvpos, OUTPUT); // sortie relay ouverture positif
//digitalWrite (Rouvpos, HIGH);//condition initiale relais off
pinMode(Rouvneg, OUTPUT); // sortie relay ouverture negatif
state_det = digitalRead(DET); // variable etat du bouton
state_fdc = digitalRead(FDC);
}
_________________________________________________________________________
void loop() {
// les fonctions
repos ();
verin_repli ();
verin_ouv ();
// enchainement des sequences du verin
switch (etat_sequence) {
case 0:
if (digitalRead (DET) == HIGH ) {
delay (2000);
verin_ouv ();
}
break;
case 1:
if (digitalRead (DET) == LOW )
}
delay (2000);
verin_repli ();
}
break;
}
// functions pour le deroulement de chaque etape
void repos () {
digitalWrite (Rfermpos, HIGH);// tous les relais au repos
digitalWrite (Rfermneg, HIGH);
digitalWrite (Rouvpos, HIGH);
digitalWrite (Rouvneg, HIGH);
etat_sequence = 0;
}
// conditon etat verin if (digitalRead (DET) == LOW; // porte fermée
void verin_repli () {
digitalWrite (Rfermpos, LOW); // activation relai de fermture verin
digitalWrite (Rfermneg, LOW);
delay ( 2000);// attente que fin de course sorte de position repos
if (digitalRead (FDC) == LOW) {
delay (500); // stabilisation contact
digitalWrite ( Rfermpos, HIGH);
digitalWrite ( Rfermneg, HIGH);
}
etat_sequence = 1;
}
// conditon etat verin if (digitalRead (DET) == HIGH; // porte ouverte
void verin_ouv () {
digitalWrite (Rouvpos, LOW);// activation relai d'ouverture verin
digitalWrite (Rouvneg, LOW);
delay ( 2000);// attente que fin de course sorte de position repos
if (digitalRead (FDC) == LOW) {
delay (500);// stabilisation contact
digitalWrite (Rouvpos, HIGH);
digitalWrite (Rouvneg, HIGH);
}
etat_sequence = 2;
}


