Effectivement quand un parasite se produit ça émule l'appui du bouton ce qui fait que le cycle de remplissage se déclenche.
Je retesterai de câbler un condo sur l'inter mais pas sûr que j'arrive à voir si cela règle le problème étant donnée la fréquence d'apparition.
Pour le code, je l'ai fait sur Mblock je te mets le code qu'il a généré :
Code : Tout sélectionner
// generated by mBlock5 for <your product>
// codes make you happy
#include <Arduino.h>
#include <Wire.h>
#include <SoftwareSerial.h>
float Bouton = 0;
float Capteur_seringue_ouverte = 0;
float Capteur_seringue_fermee = 0;
float Ouvrir_seringue = 0;
float Fermer_seringue = 0;
float Valeur_potentiometre = 0;
float Vitesse_moteur = 0;
float Etat_haut_capteur_bouton = 0;
float Etat_bas_capteur_bouton = 0;
float Moteur = 0;
void Fermeture (){
while(!((digitalRead(Capteur_seringue_fermee) == Etat_haut_capteur_bouton) || (digitalRead(Bouton) == Etat_haut_capteur_bouton)))
{
_loop();
Calcul_vitesse_moteur();
analogWrite(Moteur,Vitesse_moteur);
digitalWrite(Fermer_seringue,1);
}
digitalWrite(Fermer_seringue,0);
}
void Ouverture (){
while(!((digitalRead(Capteur_seringue_ouverte) == Etat_haut_capteur_bouton) || (digitalRead(Bouton) == Etat_haut_capteur_bouton)))
{
_loop();
Calcul_vitesse_moteur();
analogWrite(Moteur,Vitesse_moteur);
digitalWrite(Ouvrir_seringue,1);
}
digitalWrite(Ouvrir_seringue,0);
}
void Calcul_vitesse_moteur (){
Valeur_potentiometre = analogRead(A0+1);
Vitesse_moteur = (((613.8 + Valeur_potentiometre / 2.5)) / 1023) * 255;
}
void _delay(float seconds) {
long endTime = millis() + seconds * 1000;
while(millis() < endTime) _loop();
}
void setup() {
TCCR2B = TCCR2B & B11111000 | 0x01 ;
pinMode(Moteur,OUTPUT);
pinMode(Ouvrir_seringue,OUTPUT);
pinMode(Fermer_seringue,OUTPUT);
pinMode(Bouton,INPUT);
pinMode(Capteur_seringue_fermee,INPUT);
pinMode(Capteur_seringue_ouverte,INPUT);
pinMode(A0+1,INPUT);
Bouton = 2;
Etat_haut_capteur_bouton = 0;
Etat_bas_capteur_bouton = 1;
Moteur = 3;
Ouvrir_seringue = 4;
Fermer_seringue = 5;
Capteur_seringue_ouverte = 6;
Capteur_seringue_fermee = 7;
Vitesse_moteur = 0;
analogWrite(Moteur,0);
digitalWrite(Ouvrir_seringue,0);
digitalWrite(Fermer_seringue,0);
// Appui bouton pour démarrage programme
while(!(digitalRead(Bouton) == Etat_haut_capteur_bouton))
{
_loop();
}
_delay(0.02);
while(!(digitalRead(Bouton) == Etat_bas_capteur_bouton))
{
_loop();
}
// Boucle purge seringue
if(digitalRead(Capteur_seringue_fermee) == Etat_bas_capteur_bouton){
Fermeture();
}
_delay(1);
// Boucle de remplissage
while(1) {
if(digitalRead(Capteur_seringue_ouverte) == Etat_bas_capteur_bouton){
Ouverture();
}
_delay(0.5);
while(!(digitalRead(Bouton) == Etat_haut_capteur_bouton))
{
_loop();
}
_delay(0.02);
while(!(digitalRead(Bouton) == Etat_bas_capteur_bouton))
{
_loop();
}
Fermeture();
_delay(0.5);
_loop();
}
}
void _loop() {
}
void loop() {
_loop();
}
Dis-moi si tu comprends tous sinon je te mets les captures des blocs qui est peut-être plus parlant ?
Effectivement je n'ai pas l'outillage pour mesurer la Terre, je vais me passer de la mesure et partir de l'hypothèse qu'elle est correcte. (Installation électrique qui doit avoir 4 ans et faite normalement par un pro).
Pour le blindage il va de l'entrée de mon boitier à mon bouton, effectivement l'entrée est le plus critique avec tous les câbles de puissance mais c'était pour la simplicité de câblage de la Terre.
PS : Les deux câbles que tu vois au niveau de la Terre (câbles du moteur) ils sont flotant pour le moment par ce que je dois changer le module (en rouge) qui a cramé. Normalement ils sont connecté sur les plots bleus du module (ceux du bas).
