Aidez moi à corriger mon code svp

Bonjour,

Je rencontre un gros problème à 12h de la mise en marche de mon système.
Ceci est donc un SOS à la communauté arduino FR :slight_smile:

Pour faire simple lorsque j'active le open 1, puis le open 2 et ensuite je desactive le open 2 le relais ne de "décolle" pas.
j'imagine qu'il existe une fonction faire fonctionner indépendamment les deux coter mais je ne trouve pas laquelle.

Ci-dessous mon code :

const int inPin = A1; // Utilise le numéro de la broche où le capteur est connecté
int relayOutputs[] = {D0, D1, D2, D3};
const int inPin1 = A3;

void setup() {
  pinMode(inPin, INPUT); // Configuration de la broche du capteur en entrée
  pinMode(relayOutputs[D1], OUTPUT);
  pinMode(relayOutputs[D0], OUTPUT);
  pinMode(inPin1, INPUT);
}
void loop() {
  int open1 = digitalRead(inPin); // Lecture de l'état du capteur
  int open2 = digitalRead(inPin1);
  if (open1 == HIGH){ // Si le capteur est actif
    digitalWrite(relayOutputs[D0], HIGH);}
  if (open2 == HIGH){
    digitalWrite(relayOutputs[D1], HIGH);
  }
  else {
    digitalWrite(relayOutputs[D1], LOW);
    digitalWrite(relayOutputs[D0], LOW);}
  }

Là tu déclares un tableau de 4 éléments, pour les utiliser tu fais relayOutputs[0], ou relayOutputs[1], ou relayOutputs[2] ou relayOutputs[3].
Toi tu fais relayOutputs[D1] mais D1 vaut 1 (a priori, il faudrait vérifier dans le cas spécifique de ta carte) ou relayOutputs[D0] qui vaut 0.
Donc il faut modifier ton code avec les bons indices de tableau : 0 pour D0, 1 pour D1, etc.

Bonjour,

Je pense avoir indiqué les noms correctement d'après le document ci-dessous :

Je pense que je n'utilise pas le bon "outil" pour réaliser le code au vu du résultat.
Car cela fonctionne "juste" "mal".
J'ai l'impression que les deux ifs sont liés, et je ne sais pas comment faire pour les rendre indépendants l'un de l'autre.

Ton programme demande que open1 et open2 soit désactivés pour mettre les deux sorties à LOW
Mais tu parle uniquement de open2.

Comme l'indique @lesept est tu sûre des valeurs de D0, D1 ?
Il serait utile pour débugger que tu utilise le moniteur série.

Quel Arduino utilises-tu ?
Mets des Serial.println dans tes blocs if pour voir si tu passes bien aux bons endroits lorsque tu manipules tes capteurs.

Bonsoir zoyari

As tu mis des résistances de PULLDOWN sur tes entrées inPin et inPin1

Cordialement
jpbbricole

Le problème vient vraiment du code, j'ai essayé d'avancer mais impossible de faire le retour à la normale lorsque l'un des deux capteurs retourne en LOW.
J'ai essayé d'ajouter au code ci-dessous un else digitalWrite ... LOW mais ça ne fonctionne plus du tout

const int inPina = A1; // Utilise le numéro de la broche où le capteur est connecté
int relayOutputs[] = {D0, D1, D2, D3};
const int inPin1 = A0;

void setup() {
  pinMode(inPina, INPUT);
  pinMode(relayOutputs[D1], OUTPUT);
  pinMode(relayOutputs[D0], OUTPUT);
  pinMode(inPin1, INPUT);
}
void loop() {
  int open1 = digitalRead(inPina); // Lecture de l'état du capteur
  int open2 = digitalRead(inPin1);
  if (open1 == HIGH || open2 == HIGH) {
    digitalWrite(relayOutputs[D0], HIGH);
  }
}

Tu as essayer de faire simplement une alternance ?
Toute les 2s les relais change d'état :

void setup() {
  pinMode(D0, OUTPUT);
  pinMode(D1, OUTPUT);
  digitalWrite(D0, LOW);  //Low : relais ouvert
  digitalWrite(D1, LOW);  //Low : relais ouvert
}
void loop() {

  digitalWrite(D0, HIGH);  // Relais ferme le circuit
  digitalWrite(D0, HIGH);  // Relais ferme le circuit
  delay(2000);
  digitalWrite(D0, HIGH);  // Relais ouvre le circuit
  digitalWrite(D0, HIGH);  // Relais ouvre le circui
  delay(2000);
}

je n'ai pas bien compris votre code par contre lorsque je le copie j'ai en retour un message me disant que sleep n'était pas déclaré

Désolé, c'est des delay et non sleep :confused:
(j'ai corrigé mon post)

Le code active et désactive les relais toutes les 2s (2000 milliseconde), pour verifier qu'ils fonctionnent

Si il repasse bien à l'état ouvert (quand Dx est en "LOW"), le problème est surement dans les conditions. Et il faudrait décrire les état des relais attendu en fonction des cas capteur 1 HIGH/LOW, capteur 2 HIGH/LOW

Je n'ai pas du tout compris le résultat attendu du code envoyé.

Test deux relais doivent se fermer, puis 2s plus tard ils doivent s'ouvrir, 2s plus tard ils se referment, ect...

j'imagine qu'il doit y avoir un problème car cela ne fonctionne pas
le relais 1 reste actif en permanence

const int inPina = A1; // Utilise le numéro de la broche où le capteur est connecté
int relayOutputs[] = {D0, D1, D2, D3};
const int inPin1 = A0;

void setup() {
 pinMode(D0, OUTPUT);
 pinMode(D1, OUTPUT);
 digitalWrite(D0, LOW); //Low : relais ouvert
 digitalWrite(D1, LOW); //Low : relais ouvert
}
void loop() {

 digitalWrite(D0, HIGH); // Relais ferme le circuit
 digitalWrite(D0, HIGH); // Relais ferme le circuit
delay (2000);
 digitalWrite(D0, HIGH); // Relais ouvre le circuit
 digitalWrite(D0, HIGH); // Relais ouvre le circui
delay (2000);
}

C'est moi... Il est tard (ou tôt) désolé :frowning:

void loop() {

 digitalWrite(D0, HIGH); // Relais ferme le circuit
 digitalWrite(D1, HIGH); // Relais ferme le circuit
delay (2000);
 digitalWrite(D0, LOW); // Relais ouvre le circuit
 digitalWrite(D1, LOW); // Relais ouvre le circui
delay (2000);
}

toujours rien :sweat_smile:

void loop() {
 digitalWrite(D0, HIGH); // Relais ferme le circuit
 digitalWrite(D1, HIGH); // Relais ferme le circuit
delay (2000);
 digitalWrite(D0, LOW); // Relais ouvre le circuit
 digitalWrite(D1, LOW); // Relais ouvre le circui
delay (2000);
}

(J'ai honte)

C'est good ! hihi
je ne sais pas trop ce que ça m'apporte du coup par contre :sweat_smile:

Ok, donc maintenant que l'on sait que tes relais sont obéissant, tu souhaites faire quoi en fonction de tes capteurs ? Essais de l'ecrire, car dans ton code, il y a des cas de figure différents et complexe, et pas sur que c'est ce que tu souhaites faire !