Bonjour damienzd
J'ai "revu" la partie "haute" de ton programme et y ai apporté quelques modifications, quand à la déclaration des ports, ce n'est pas utile d'utiliser des cases mémoires pour des choses, comme des pin de sortie et d'entrée qui sont fixe, int utilise de la mémoire, #define pas.
Pour ce qui est de l'initialisation de ces ports et au vu de ton schéma, quand les contacts sont ouverts, tes entrées sont "en l'air" parce qu'elles n'ont pas de résistances de PULL_UP, ce qui est très néfaste, ces entrées font, un peu, comme une antenne et peuvent bouger dans tout les sens. Ce défaut est corrigé par un:
pinMode(C1, INPUT_PULLUP);
qui mets la résistance interne de l'Arduino comme PULL_UP.
Montés ainsi, tes boutons ou commutateurs donnent un LOW quand ils sont fermés.
J'ai modifié mais pas testé ton programme pour fonctionner avec des états LOW.
Attention, sur ton schéma, les commutateurs qui représentes les capteurs fonctionnent à l'envers des capteurs, un capteur de vérin fermé == HIGH, un commutateur fermé == LOW, c'est pourquoi j'ai introduit ceci:
#define etatCapteurOn LOW // Etat lu d'un capteur ferm
Le programme
//Machine de bouterollage
//2021-07-28
#define led01 5 // Led dcy = LED01
#define led02 4 // Led defaut
#define dcy 9 // Bouton A = dcy
#define C1 8 // Capteur vérin rentré = C1
#define C2 7 // Capteur vérin sorti = C2
#define relai 3 // Distributeur = D1
#define etatCapteurOn LOW // Etat lu d'un capteur fermé
void setup()
{
// Init sorties PWM
pinMode(led01, OUTPUT);
pinMode(led02, OUTPUT);
pinMode(dcy, INPUT_PULLUP);
pinMode(C1, INPUT_PULLUP);
pinMode(C2, INPUT_PULLUP);
pinMode(relai, INPUT_PULLUP);
}
void loop()
{
//int etat;
//etat=digitalRead(dcy)and digitalRead(C1);//regarde l'etat du boutton et du capteur C1
if(digitalRead(dcy) == LOW && digitalRead(C1) == etatCapteurOn) {
digitalWrite(relai,HIGH); // active le relais 5V et actionne D1
digitalWrite(led01,HIGH); // allume la led01
//int etat1;
//etat1=digitalRead(C2);//regarde si vérin en position basse
if(digitalRead(C2) == etatCapteurOn) {
delay (3000); // tempo 3s
digitalWrite(relai,LOW); // désactive le relais 5V
digitalWrite(led01,LOW); // eteins la led
}
else {
digitalWrite(led02,HIGH);
delay(1000);
digitalWrite(led02,LOW);
delay(1000);
}
}
else {
digitalWrite(led02,HIGH);
delay(1000);
digitalWrite(led02,LOW);
delay(1000);
}
}
Oui
A+
Cordialement
jpbbricole