Bonjour ProfesseurMephisto
Inspiré de ton exemple, mais "arrangé" différemment ![]()
Le programme:
struct relais {
int GPIO;
int count = 0;
unsigned long start = 0;
};
relais commande[5];
const int relaisOnEtat = LOW; // Etat qui fait tirer les relais
const int periodeClic = 600;
void setup()
{
Serial.begin(115200);
commande[0].GPIO = 1;
commande[1].GPIO = 2;
commande[2].GPIO = 42;
commande[3].GPIO = 41;
commande[4].GPIO = 40;
for (int i = 0; i < 5; ++i)
{
pinMode(commande[i].GPIO, OUTPUT);
digitalWrite(commande[i].GPIO, !relaisOnEtat); // Faire tomber les relais
}
delay(1000);
clicStart(0, 12); // 12 impulsions sur le port 0
clicStart(2, 20); // 20 impulsions sur le port 2
clicStart(4, 15); // 15 impulsions sur le port 4
}
void loop()
{
clicclic();
}
void clicclic()
{
for (int i = 0; i < 5; ++i)
{
if (commande[i].count > 0) // il reste des impulsions à faire
{
if (millis() - commande[i].start >= periodeClic / 2) // Si une demi période é échéance
{
digitalWrite(commande[i].GPIO, !digitalRead(commande[i].GPIO)); // Inverser le relais
commande[i].start = millis(); // Redémarrage du chrono
commande[i].count --; // Décrémenter les demi périodes
}
}
}
}
void clicStart(int portNum, int pulsesNbr)
{
commande[portNum].count = pulsesNbr * 2; // Salve de demi périodes
commande[portNum].start = millis(); // Démarrage chrono
}
Cordialement
jpbbricole