Bonsoir,
je me sers d'un module laser VL6180X pour mesurer un niveau d'eau, ce dernier est connecté à une Nano en I2C. L'allumage de leds en fonction du niveau est géré par cette nano.
J'alimente en 5V la nano par un relais piloté par une Mega qui gère l'ensemble des autres capteurs et d'autres fonctions. Ce relais alimente la nano à 7H le matin et la coupe à 23H.
A chaque redémarrage le matin, l'indication de niveau ne fonctionne pas. Je dois faire un reset de la nano pour que ça fonctionne.
Voici le code de la Nano
#include <VL6180X.h>
#include <Wire.h>
VL6180X sensor;
// Variables et broches pour l'indication de niveau d'eau
long sondeNiveau;
long sonde;
int s; int e;
unsigned long previousMillis = 0; unsigned long previousMillis3 = 0;
unsigned long previousMillis4 = 0;
const int interval8 = 150; const int interval11 = 2000;
const int alimLaser = 2;
const int nHH = 7;
const int nH = 6;
const int nN = 5;
const int nB = 4;
const int nBB = 3;
int etatLed2 = LOW; int etatLed3 = LOW;
int etatNiveau;
// Lecture du niveau d'eau
void lectureSondeNiveau()
{
sondeNiveau = (sensor.readRangeSingleMillimeters());
sonde += sondeNiveau;
s += 1;
previousMillis = millis();
}
void clignoLednHH()
{
digitalWrite(nBB, LOW); digitalWrite(nB, LOW);
digitalWrite(nN, LOW); digitalWrite(nH,LOW);
if(millis() - previousMillis3 > interval8)
{
previousMillis3 = millis();
if (etatLed2 == LOW)
{
etatLed2 = HIGH;
}
else
{
etatLed2 = LOW;
}
digitalWrite(nHH, etatLed2);
}
}
void clignoLednBB()
{
digitalWrite(nB, LOW); digitalWrite(nN, LOW);
digitalWrite(nH,LOW); digitalWrite(nHH, LOW);
if(millis() - previousMillis4 > interval8)
{
previousMillis4 = millis();
if (etatLed3 == LOW)
{
etatLed3 = HIGH;
}
else
{
etatLed3 = LOW;
}
digitalWrite(nBB, etatLed3);
}
}
void setup()
{
pinMode(alimLaser, OUTPUT);
pinMode(nHH, OUTPUT); pinMode(nH, OUTPUT);
pinMode(nN, OUTPUT); pinMode(nB, OUTPUT); pinMode(nBB, OUTPUT);
Wire.begin();
digitalWrite(alimLaser, HIGH);
sensor.init();
sensor.configureDefault();
sensor.setTimeout(500);
Serial.begin(9600);
}
void loop()
{
{
if (millis() - previousMillis > interval11)
{
lectureSondeNiveau();
}
}
if (s == 10)
{
sonde = sonde / 10; Serial.print("Moyenne : ");Serial.println(sonde);
if (sonde < 31)
{
etatNiveau = 1;
}
else if (sonde >= 31 && sonde <= 32)
{
etatNiveau = 2;
}
else if (sonde > 32 && sonde <= 33)
{
etatNiveau = 3;
}
else if (sonde > 33 && sonde <= 35)
{
etatNiveau = 4;
}
else if (sonde > 35 && sonde <=36)
{
etatNiveau = 5;
}
else if (sonde >36 && sonde <= 37)
{
etatNiveau = 6;
}
else
{
etatNiveau = 7;
}
sonde = 0; s = 0;
}
switch (etatNiveau)
{
case 1:
clignoLednHH();
break;
case 2:
digitalWrite(nBB, HIGH); digitalWrite(nB, HIGH); digitalWrite(nN, HIGH); digitalWrite(nH,HIGH); digitalWrite(nHH, HIGH);
break;
case 3:
digitalWrite(nBB, HIGH); digitalWrite(nB, HIGH); digitalWrite(nN, HIGH); digitalWrite(nH,HIGH); digitalWrite(nHH, LOW);
break;
case 4:
digitalWrite(nBB, HIGH); digitalWrite(nB, HIGH); digitalWrite(nN, HIGH); digitalWrite(nH,LOW); digitalWrite(nHH, LOW);
break;
case 5:
digitalWrite(nBB, HIGH); digitalWrite(nB, HIGH); digitalWrite(nN, LOW); digitalWrite(nH,LOW); digitalWrite(nHH, LOW);
break;
case 6:
digitalWrite(nBB, HIGH); digitalWrite(nB, LOW); digitalWrite(nN, LOW); digitalWrite(nH,LOW); digitalWrite(nHH, LOW);
break;
case 7:
clignoLednBB();
break;
}
}
Je ne mets pas le code complet de la Mega mais seule la partie commande du relais en rapport avec l'alimentation de la Nano.
// allumage-Extinction du lcd et de la nano
{
if (hProg >= 700 && hProg <= 2300)
{
lcd.backlight();
lcd.display();
digitalWrite(alimNano, LOW);
}
else
{
lcd.noBacklight();
lcd.noDisplay();
digitalWrite(alimNano, HIGH);
}
}
Le problème ne vient donc pas de là.
J'ai mis le schéma de l'installation aussi.
J'ai beau chercher, je ne vois pas ce qui coince.
Quelqu'un aurait une idée?
Merci
