Bonjour,
Je travaille actuellement sur un projet avec une arduino XIAO SAMD21 et 4 electro Vanne 6V 2 positions. Mon programme utilise les electrovanne une par une sur des cycles de temps et fonctionne parfaitement. Cependant, lorsque la XIAO est allumé (que ca soit par connexion sur PC ou par alimentation externe), toutes les électrovannes s'allument pendant quelques instants à chaque boot ...
Je ne sais pas si leurs états par défaut à l'initialisation est l'état haut mais nous n'arrivons pas à les garder à l'état bas.
Voici le schéma de câblage :
Et le code (D'autres modules s'ajoutent donc un Pin en communication avec une Arduino mais les tests ne la concernent pas ) :
#include <Arduino.h>
// 4 Pins Enable
#define PIN_ENABLE_ELECTRO_1 1
#define PIN_VENTILO 4
#define PIN_ENABLE_ELECTRO_2 2
#define PIN_ENABLE_ELECTRO_3 3
#define PIN_ENABLE_ELECTRO_4 9
#define PIN_COMMUNICATION_LORA 5
#define PIN_LED_TEST 7
const uint16_t delai_ouverture_electrovanne = 5000;
const uint16_t delai_attente = 1;
//Variables
int counter=0;
const double_t seuil_altitude[] = {0,1000,1500,}; // Définit les 4 différents seuils d'altitudes pour déclencher les expériences
const int electro_vannes[] = {PIN_ENABLE_ELECTRO_1, PIN_ENABLE_ELECTRO_2, PIN_ENABLE_ELECTRO_3, PIN_ENABLE_ELECTRO_4}; // Définit les PINS des 4 électrovannes (pour y avoir accès via un indice)
// 1 Pins Inputdefine
#define PIN_ELECTROVANNE_MUTUAL_INPUT 10
// put function declarations here:
void lock_electro(uint8_t vanne_1,u_int16_t c_delay){
/*Active une électroVanne (vanne_1) pendant un délai (c_delay)
*params:
*uint8_t : vanne_1 : Pin de la vanne à activer
*int16_t : c_delay : Delai d'activation de l'electrovanne
*/
digitalWrite(vanne_1,HIGH);
digitalWrite(PIN_LED_TEST,HIGH);
digitalWrite(PIN_VENTILO,HIGH);
digitalWrite(PIN_ELECTROVANNE_MUTUAL_INPUT,HIGH);
delay(c_delay);
digitalWrite(vanne_1,LOW);
digitalWrite(PIN_LED_TEST,LOW);
digitalWrite(PIN_VENTILO,LOW);
digitalWrite(PIN_ELECTROVANNE_MUTUAL_INPUT,LOW);
}
/* int select_eletro(double_t altitude, const double_t seuil_altitude[]){
int selected_index = 0;
for(int i=0;i<4;i++){
if (seuil_altitude[i] < altitude) {
selected_index = i;
}
}
return selected_index;
} */
void setup() {
// Définition des PIN Electrovanne Enable en mode OUTPUT
pinMode(PIN_ENABLE_ELECTRO_1,OUTPUT);
pinMode(PIN_ENABLE_ELECTRO_2,OUTPUT);
pinMode(PIN_ENABLE_ELECTRO_3,OUTPUT);
pinMode(PIN_ENABLE_ELECTRO_4,OUTPUT);
// Définition du Pin Ventilo
pinMode(PIN_VENTILO,OUTPUT);
// Définition des pins Electrovanne commun
pinMode(PIN_ELECTROVANNE_MUTUAL_INPUT,OUTPUT);
pinMode(PIN_LED_TEST,OUTPUT);
// Activation par défaut des Pins
pinMode(PIN_COMMUNICATION_LORA,INPUT);
digitalWrite(PIN_ENABLE_ELECTRO_1,LOW);
digitalWrite(PIN_ENABLE_ELECTRO_2,LOW);
digitalWrite(PIN_ENABLE_ELECTRO_3,LOW);
digitalWrite(PIN_ENABLE_ELECTRO_4,LOW);
digitalWrite(PIN_ELECTROVANNE_MUTUAL_INPUT,LOW);
}
void loop() {
while(digitalRead(PIN_COMMUNICATION_LORA)!=HIGH){
delay(delai_attente);
}
counter+=1;
if (counter==0){return;}
else if(counter>0 && counter <5){
lock_electro(electro_vannes[counter-1],delai_ouverture_electrovanne);
}
delay(1000);
}
