Bonjour à tous,
Je vous explique mon problème c'est que je sais pas comment mon programme marche si vous pouvez m'expliquer exactement.
Déjà je vais commencer par vous expliquer ma tâche:
Le système WATRERLEAKS est équipé d'un capteur de température. En cas de température en dessous de 1°C, la vanne du WATERLEAKS coupera l'installation pour se mettre en sécurité et une alarme sonore préviendra l’utilisateur d’une fermeture de la vanne.
La vanne s'ouvrira à nouveau à partir du moment où la température remontera au-dessus de 3°C.
La détection des micro-fuites se fait en période nocturne. Si le réseau n'est pas en cours d'utilisation (pas de débit mesuré), le système bloque le débit d'eau pendant une période de 3 minutes. A l’ouverture de la vanne, si il y a un débit, le système détectera la présence de micro-fuites ou de fuites de robinets. Une alarme sonore préviendra l’utilisateur de la présence d’une micro-fuite.
Je vous donne mon code:
ça permets d'afficher la température et à partir d'une certaine température là j'ai mis 1 degré, le relai s'active et ça ferme l'électrovanne.
#include <Wire.h>
#include <EasyScheduler.h>
int T_dec;
int duree = 0;
// PIN adresses are set to GND
#define DS1631_ADDR 0x90 >> 1
// SETUP
void setup() {
pinMode(7, OUTPUT);
// Setup Serial connection
Serial.begin(9600);
Serial.println("");
Serial.println("-----------------------------------");
Serial.println("DS1631 test: Temp. sensor");
Serial.println("-----------------------------------");
Serial.println("");
Wire.begin(); // I2C Bus
}
void loop() {
// Stop conversion to be able to modify "Access Config" Register
Wire.beginTransmission(DS1631_ADDR);
Wire.write((int)(0x22)); // Stop conversion
Wire.endTransmission();
// Read "Access Config" regsiter
Wire.beginTransmission(DS1631_ADDR);
Wire.write((int)(0xAC)); // @AC : Acces Config
Wire.endTransmission();
Wire.requestFrom(DS1631_ADDR, 1); //Reade 1 byte
Wire.available();
int AC = Wire.read(); // receive a byte
Serial.print("Acces Config (Before): "); Serial.print(AC); Serial.println("");
// WRITE into "Access Config" Register
Wire.beginTransmission(DS1631_ADDR);
Wire.write(0xAC); // @AC : Acces Config
Wire.write(0x0C); // Continuous conversion & 12 bits resolution
Wire.endTransmission();
// READ "Access Config" register
Wire.beginTransmission(DS1631_ADDR);
Wire.write((int)(0xAC)); // @AC : Acces Config
Wire.endTransmission();
Wire.requestFrom(DS1631_ADDR, 1);
Wire.available();
AC = Wire.read();
Serial.print("Acces Config (AFTER): "); Serial.print(AC); Serial.println("");
// START conversion to get T°
Wire.beginTransmission(DS1631_ADDR);
Wire.write((int)(0x51)); // Start Conversion
Wire.endTransmission();
//READ T°
Wire.beginTransmission(DS1631_ADDR);
Wire.write((int)(0xAA)); // @AA : Temperature
Wire.endTransmission();
Wire.requestFrom(DS1631_ADDR, 2); // Lire 2 bite
Wire.available(); // Premier bite
int Th = Wire.read(); // Bite reçu
Wire.available(); // Deuxième bite
int Tl = Wire.read(); //Bite reçu
// T° processing
if (Th >= 0x80) //if sign bit is set, then temp is negative
Th = Th - 256;
T_dec = (10 * (100 * (Tl / 16))) / 16; // decimal part of the T°
// Display T° on "Serial Monitor"
Serial.print("Temperature : ");
Serial.print(Th);
Serial.print(".");
if (T_dec < 10) Serial.print("0");
if (T_dec < 100) Serial.print("0");
Serial.print(T_dec);
Serial.print(" degC / ");
Serial.print("Th registre: "); Serial.print(Th); Serial.print(" / ");
Serial.print("Tl registre: "); Serial.print(Tl); Serial.println("");
if (Th < 1)
{
digitalWrite(7, HIGH);
duree++;
if (duree >= 10)
digitalWrite(7, LOW);
digitalWrite(8, HIGH);
}
else
{
digitalWrite(7, LOW);
digitalWrite(8, LOW);
duree = 0;
}
// Wait 1s before restart
delay(1000);
}
et deuxième question j'ai besoin de savoir comment crée cette tache, je sais qu'il faut utiliser task ext mais j'ai vraiment du mal..
#include <EasyScheduler.h> j'ai inclue cette librairie.
Tâche : Si la température est inférieur à 1°C, alarme pendant 20s toutes les 3minutes pendant 12 minutes.
Merci à tous!!!!