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
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.
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.
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);
}
}
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
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 !