Bonjour à tous,
pour poser les bases, je m'appelle Guillaume, j'ai une formation en conception mécanique à la base mais je suis amener à bidouiller un petit système de contrôle avec 4 capteurs mécaniques à galets (contact NO + NF sur chaque capteur) et carte Arduino.
J'ai de très légères "bases" en programmation et j'ai fait une première version de programme qui fonctionne mais pas à 100%.
En gros il y a 2 capteurs d'un côté d'une machine (C1 et C2) et 2 capteurs de l'autre côté (C3 et C4).
Chaque paire de capteurs vérifie certaines conditions. Les 2 côtés ont le même fonctionnement mais sont indépendants. Par contre au final une certaine combinaison des 2 côtés doit me donner un seul signal de sortie pour soit allumer un voyant rouge, soit un voyant vert.
(Système de sécurité donc si au moins un défaut est présent sur un des 2 côtés, le voyant rouge général doit s'allumer)
Les capteurs sont sur une machine qui vibre et qui fait donc perdre de temps en temps les contacts des capteurs ou à l'inverse donne un contact non souhaité.
(Mon premier montage était en câblage traditionnel sans carte arduino avec uniquement 2 capteurs et du coup mon signal de sortie était souvent faux)
En passant à un système à 4 capteurs et à l'Arduino, j'ai voulu régler le problème en vérifiant les états des capteurs sur 3 secondes afin d'éviter toute mauvaise info due aux vibrations pendant 1 à 2sec.
J'ai utilisé la fonction delay().
Voici le code :
//////////////Définition des ports entrées sorties ////////
#define C1 13 //C1 est branché sur le pin digital 13
#define C1_b 12 //C1_b est branché sur le pin digital 12
#define C2 11 //C2 est branché sur le pin digital 11
#define C2_b 10 //C2_b est branché sur le pin digital 10
#define C3 9 //C3 est branché sur le pin digital 9
#define C3_b 8 //C3_b est branché sur le pin digital 8
#define C4 7 //C4 est branché sur le pin digital 7
#define C4_b 6 //C4_b est branché sur le pin digital 6
#define Led_verte 5 //led_verte est branchée sur le pin digital 5
#define Led_rouge 4 //Led rouge est branchée sur le pin digital 4
void setup() {
pinMode(C1, INPUT_PULLUP);
pinMode(C1_b, INPUT);
pinMode(C2, INPUT_PULLUP);
pinMode(C2_b, INPUT);
pinMode(C3, INPUT_PULLUP);
pinMode(C3_b, INPUT);
pinMode(C4, INPUT_PULLUP);
pinMode(C4_b, INPUT);
pinMode(Led_rouge, OUTPUT);
pinMode(Led_verte, OUTPUT);
int variable = 1 ; // On initialise une variable interne permettant le basculement des leds.
int Tempo=3000; // On configure la temporisation pour 3 secondes.(Modifiable selon besoin )
}
void loop() {
int variable = 1;
int c = 1 ;
int Tempo=1000;
// programme permettant la vérification des bons états des capteurs de fin de course ( HIGH = sous tension , Low = 0V )
if ( ((digitalRead(C1) == LOW) && (digitalRead(C2) == LOW)) || ((digitalRead(C1) == HIGH) && (digitalRead(C2) == HIGH)) || ((digitalRead(C3) == LOW) && (digitalRead(C4) == LOW)) || ((digitalRead(C3) == HIGH) && (digitalRead(C4) == HIGH)) )
{
variable = 0;
}
else
{
variable = 1;
}
switch (variable) {
case HIGH:
digitalWrite(Led_rouge, 1);//allumer la led verte
digitalWrite(Led_verte, 0);//éteindre la led rouge
break;
case LOW:
digitalWrite(Led_rouge, 0);//allumer la led rouge
digitalWrite(Led_verte, 1);//éteindre la led verte
break;
}
delay(Tempo); // Temporisaton
}
Mon problème est qu'avec la fonction delay(), le programme se stoppe et reprend 3 sec après.
En gros si j'ai des infos des capteurs qui me donnent un signal vert pendant 2,5sec mais rouge à la reprise au bout des 3 sec, ça s'allume en rouge.
Je me suis rendu compte que ce n'était pas la bonne fonction.
Donc pour palier à se problème de vibrations (qu'on ne peut pas supprimer), je voulais vérifier l'état des capteurs avec un ou plusieurs while() et millis() mais je ne m'en sors pas ça devient trop complexe pour moi.
J'ai bien compris qu'on peut utiliser plusieurs variables pour faire une soustraction du temps avec millis() et obtenir les 3 sec mais je ne sais pas comment vérifier mes conditions de capteurs en parallèle sans avoir des infos qui se contredisent.
Merci pour votre aide.