J'ai un peu potassé le programme, j'ai légèrement modifié la manière dont ça doit fonctionner, voilà ce que ça donne:
Je souhaiterais donc créer un programme qui fonctionne de la manière suivante:
Je possède 2 volets roulants.
Je possède deux bouton poussoir double montée, descente (BP_M1 : Bouton montée volet 1, BP_D1 bouton descente volet 1, BP_M2 : bouton montée volet 2, BP_D2 : bouton descente volet 2)
Pour inverser la polarité aux bornes des moteurs, j'utiliserai des relais, 1 par bouton poussoir, donc 4 relais (relay_M1 : relais montée volet 1, relay_D1 relais descente volet 1, relay_M2 : relais montée volet 2, relay_D2 : relais descente volet 2)
lorsque j'appuie sur un bouton, je souhaite actionner le relais correspondant durant 30 secondes (temps de course complet du volet)
Je souhaite que si le volet est déjà en mouvement, un appui sur un bouton stop le volet.
voilà ce que j'ai fais pour le moment comme programme, mais ça ne semble pas fonctionner, est-ce que je suis sur la bonne voie ou bien ai-je tout faux??
const int relay_M1 = 2; //relais montée volet 1
const int relay_D1 = 3; //relais descente volet 1
const int relay_M2 = 4; //relais montée volet 2
const int relay_D2 = 5; //relais descente volet 2
const int BP_M1 = 6; //bouton montée volet 1
const int BP_D1 = 7; //bouton descente volet 1
const int BP_M2 = 8; //bouton montée volet 2
const int BP_D2 = 9; //bouton descente volet 2
int etatBP_M1;
int etatBP_D1;
int etatBP_M2;
int etatBP_D2;
unsigned long temps;
void setup()
{
pinMode(relay_M1, OUTPUT);
pinMode(relay_D1, OUTPUT);
pinMode(relay_M2, OUTPUT);
pinMode(relay_D2, OUTPUT);
pinMode(BP_M1, INPUT_PULLUP);
pinMode(BP_D1, INPUT_PULLUP);
pinMode(BP_M2, INPUT_PULLUP);
pinMode(BP_D2, INPUT_PULLUP);
etatBP_M1 = HIGH;
etatBP_D1 = HIGH;
etatBP_M2 = HIGH;
etatBP_D2 = HIGH;
temps = millis();
}
void loop()
{
//BP_M1 relay_M1
etatBP_M1 = digitalRead(BP_M1);
if (etatBP_M1 == LOW )
{
temps = millis(); // on demarre le comptage
digitalWrite(relay_M1,HIGH); // on active la sortie
}
if (millis()-temps >= 30000) // on active le relay_M1 pendant 30 secondes
{
digitalWrite(relay_M1,LOW); //on éteint le relay_M1
}
//BP_D1 relay_D1
if ( digitalRead(BP_D1) == LOW )
{
temps = millis(); // on demarre le comptage
digitalWrite(relay_D1,HIGH); // on active la sortie
}
if (millis()-temps >= 30000) // on active le relay_D1 pendant 30 secondes
{
digitalWrite(relay_D1,LOW); //on éteint le relay_D1
}
//BP_M2 relay_D2
if ( digitalRead(BP_M2) == LOW )
{
temps = millis(); // on demarre le comptage
digitalWrite(relay_M2,HIGH); // on active la sortie
}
if (millis()-temps >= 30000) // on active le relay_M2 pendant 30 secondes
{
digitalWrite(relay_M2,LOW); //on éteint le relay_M2
}
//BP_D2 relay_D2
if ( digitalRead(BP_D2) == LOW )
{
temps = millis(); // on demarre le comptage
digitalWrite(relay_D2,HIGH); // on active la sortie
}
if (millis()-temps >= 30000) // on active le relay_D2 pendant 30 secondes
{
digitalWrite(relay_D2,LOW); //on éteint le relay_D2
}
//appui sur BP_M1 ou BP_D1 pendant que le relay_M1 ou le relay_D1 est activé = relay_M1 et relay_D1 retombent à 0
if ((BP_M1 == LOW || BP_D1 == LOW && relay_M1 == HIGH || relay_D1 == HIGH));
{
digitalWrite(relay_M1,LOW);
digitalWrite(relay_D1,LOW);
}
//appui sur BP_M2 ou BP_D2 pendant que le relay_M2 ou le relay_D2 est activé = relay_M2 et relay_D2 retombent à 0
if ((BP_M2 == LOW || BP_D2 == LOW && relay_M2 == HIGH || relay_D2 == HIGH));
{
digitalWrite(relay_M2,LOW);
digitalWrite(relay_D2,LOW);
}
}
Merci d'avance pour votre aide !! 