Je crois que j'ai essayé toutes les combinaisons ... mais rien n'y fait ...
Plus sérieusement, je vais essayer de mieux détailler ce qu'il m'arrive.
Je simule le relais de mon onduleur avec un interrupteur à bascule tout simple ON/OFF avec la variable VictronNO (Je me suis aperçu que la variable VictronNC ne servirait à rien). L'inerrupteur me sert à connecter la masse sur le port D2 de mon UNO qui me renvoie un signal HIGH lorsqu'il est allumé.
Le programme actuel qui fonctionne (à l'envers) avec les solenoid des relais toujours alimentés ne convient pas car beaucoup trop énergivore et je ne pense pas que les relais de ce type vivent longtemps s'ils sont allumés en permanence.
Depuis mon monitor lorsque le VictronNO est HIGH les deux solenoids sont alimentés et la procédure se fait bien. Lorsque le VictronNO est LOW le relais INT1 se coupe mais le second relais reste sous tension. Si je bascule VctronNO à HIGH le relais se coupe 2sec puis se rallume. Ok pour tout ça j'ai réussi à allumer et à éteindre mon groupe.
Maintenant j'aimerais pouvoir inverser tout ça CAD que les relais au repos soient éteints et qu'ils se déclenche à la demande ...
Voici mon code :
/*
Démarrage automatique pour Onan Cummins depuis relais Victron
*/
int OnanSTART = 7; //Relais INT1 servant à démarrer le groupe
int OnanSTOP = 8; //Relais INT2 servant à éteindre le groupe
int VictronNO = 2; //Interrupteur à bascule simulant le relai de l'onduleur
int VictronNC = 4; //inutilisé
int duree = 2000; //duree pour relacher le relais d'extinction
unsigned long chrono_actuel = 0;
unsigned long chrono_precedent = 0;
void setup() {
// put your setup code here, to run once:
pinMode(OnanSTART, OUTPUT);
pinMode(OnanSTOP, OUTPUT);
pinMode(VictronNO, INPUT_PULLUP);
pinMode(VictronNC, INPUT_PULLUP);
Serial.begin(9600);
}
void loop() {
// put your main code here, to run repeatedly:
chrono_precedent = millis();
Serial.print("NO : ");
Serial.print(digitalRead(VictronNO));
Serial.print(" - Chrono Actuel : ");
Serial.println(chrono_actuel);
//Procedure de demarrage
while (digitalRead(VictronNO) == LOW) {
digitalWrite(OnanSTART, HIGH);
digitalWrite(OnanSTOP, LOW);
}
//Procedure d'extinction
while (digitalRead(VictronNO) == HIGH) {
chrono_actuel = millis();
digitalWrite(OnanSTART, LOW);
digitalWrite(OnanSTOP, HIGH);
if (chrono_actuel - chrono_precedent > duree) {
digitalWrite(OnanSTOP, LOW);
}
}
delay (50);
}
Un regard averti et un coup de main ne serait pas de refus ![]()