Bonjour
Voici le code en cours de rédaction et qui doit encore être nettoyé, et j'ai enlevé l’excédentaire pour pouvoir poster
#include <DFR_Key.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>
#include <Wire.h>
//programme qui fait l'affichage de la température sur l'écran LCD
// ajout du bouton de sélection d'affichage
// ajout de l'affichage de la temérature mini et maxi
// ajout de la régulation charge de la batterie et de la mesure d'humidité avec moyenne sur 5 lectures et intervalles de 10 secondes
// modification avec l'afficheur DFROBOT et gestion avec les boutons le 1 avril
//+ mise en mémoir de la valeur de la consigne de duree d'arrosage en EEprom
//---------------------------------
//Partie gestion touches sur LCD
//Displays the currently pressed key on the LCD screen.
//Key Codes (in left-to-right order):
/*
None - 0
Select - 1
Left - 2
Up - 3
Down - 4
Right - 5
*/
//Pin assignments for DFRobot LCD Keypad Shield
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);
//---------------------------------------------
DFR_Key keypad;
int localKey = 0;
String keyString = "";
const int RelaisVentilation = 13;
const int RelaisArrosage = 11;
const int RelaisChargeBatt = 12;
int MesureTension = A3;
int MesureHum = A4;
int periodeDeMesure=1000;
int addressDuree = 0;// L'adresse dans la mémoire EEPROM (c.-à-octet qui On va écrire à côté)
int dureeArrosage;
int intervalArrosage = 15;
int DureeIntervEch ;
int photocellPin = 0;
int photocellReading;
float tempC;
float ConsigneC;
float EEpromdureeArrosage;
float hysteresis = 1;
float TempMaxi;
long TempMini=40;
float MesureVolts;
float VoltsBatt;
long ConsigneVolts =12;
long hysteresisVolts = 1;
float VoltsMax;
float V_Min=25;
float MesurePanneauSol;
float VoltsPanneauSol;
long ConsignePanneauSol =15;
long Humidite;
long H_Max;
long H_Min=1000;
long MoyHumidite;
long Humidite1;
long Humidite2;
long Humidite3;
long Humidite4;
long Humidite5;
long fin = 0;// pour void tempo affichage
long previousMillis = 0;
long start = 0;
long Tempo = 0;
long StartTempo = 0;
long DecompteAvAros=0;
long TempoIntervalArrosage=0;
long TempAros=0;
boolean Arrosage=0;
boolean ArrosageManu=0;
boolean Charge=0;
long ConsigneIntervalEch=10;
long DureeIntervEchSec;
long interval3 = 9000; //pour void tempo
long interval4 = 30000; //pour void tempo
int buttonPushCounter = 0; // counter for the number of button presses
int countEchHum = 0;
unsigned long StartTempArrosage;
unsigned long FinTempArrosage;
unsigned long StartTempIntervalArrosage;
unsigned long FinTempIntervalArrosage;
unsigned long FinTempIntervEchc;
unsigned long StartTempIntervEchc;
// Data wire is plugged into port A2 on the Arduino
#define ONE_WIRE_BUS A2
// Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// arrays to hold device addresses
DeviceAddress insideThermometer, outsideThermometer;
// function that will be called when an alarm condition exists during DallasTemperatures::processAlarms();
//affichage sur LCD
// mettre le curseur colonne 0, ligne 1
// (note: ligne 1 est la seconde ligne , on commence à compter par 0):
//affichage température
void affichagemesures()
{
lcd.print("Temp Volts Humi ");
lcd.setCursor(0, 1);
lcd.print(tempC);
lcd.setCursor(6, 1);
lcd.print(VoltsBatt);
lcd.setCursor(12, 1);
lcd.print(Humidite);
}
void affichageDuree()
{
lcd.setCursor(0, 0);
lcd.print("consArros");
lcd.setCursor(10, 0);
lcd.print(dureeArrosage);
lcd.setCursor(13, 0);
lcd.print(TempAros);
lcd.setCursor(0, 1);
lcd.print("IntervArr");
lcd.setCursor(9, 1);
lcd.print(intervalArrosage);
lcd.setCursor(13, 1);
lcd.print(TempoIntervalArrosage);
//Partie modification des consignes
if (localKey != SAMPLE_WAIT)
if (localKey==3)// fleche HAUT
dureeArrosage++;
if (localKey != SAMPLE_WAIT)
if (localKey==4)// fleche Bas
dureeArrosage--;
}
void affichageTemp()
{
lcd.print("TempC Tmax Tmin");
lcd.setCursor(0, 1);
lcd.print(tempC);
lcd.setCursor(6, 1);
lcd.print(TempMaxi);
lcd.setCursor(12, 1);
lcd.print(TempMini);
}
void Affichage_Batterie()
{
lcd.print("Volts VMax VMin ");
lcd.setCursor(0, 1);
lcd.print(VoltsBatt);
lcd.setCursor(6, 1);
lcd.print(VoltsMax);
lcd.setCursor(12, 1);
lcd.print(V_Min);
}
void Affichage_Humidite()
{
lcd.print("Hum Max Min Moy");
lcd.setCursor(0, 1);
lcd.print(Humidite);
lcd.setCursor(4, 1);
lcd.print(H_Max);
lcd.setCursor(8, 1);
lcd.print(H_Min);
lcd.setCursor(12, 1);
lcd.print(MoyHumidite);
}
void Affichage_Relais()
{
lcd.print("Charge");
lcd.setCursor(9, 0);
lcd.print(Charge);
lcd.setCursor(0, 1);
lcd.print("Arrosage");
lcd.setCursor(9, 1);
lcd.print(Arrosage);
lcd.setCursor(11, 1);
lcd.print("Man");
lcd.setCursor(15, 1);
lcd.print(ArrosageManu);
if (localKey != SAMPLE_WAIT)
if (localKey==5)// fleche Droite
{
digitalWrite(11,HIGH); // relais arrosage
ArrosageManu=1;
}
if (localKey==0)// fleche Droite
{
digitalWrite(11,LOW); // relais arrosage
ArrosageManu=0;
}
}
void Ecriture_vers_port_serie()//Envoi données sur port série
{
Serial.print("Temp C:\t ");
Serial.print(tempC);
Serial.print("\tTempoAvAros:\t");
Serial.print(DecompteAvAros);
Serial.print("\tTempAros:\t");
Serial.print(TempAros);
Serial.print("\tVoltsMin:\t");
Serial.print(V_Min);
}
void newAlarmHandler(uint8_t* deviceAddress)
{
printTemp(deviceAddress);
}
void printTemp(DeviceAddress deviceAddress)
{
tempC = sensors.getTempC(deviceAddress);
}
void ecrireEEprom()
{
if ( dureeArrosage!=EEpromdureeArrosage)
{
EEPROM.write(addressDuree,dureeArrosage);
EEpromdureeArrosage=dureeArrosage;
}
}
void lireEEprom()
{
// Lire un octet de l'adresse actuelle de la mémoire EEPROM
dureeArrosage = EEPROM.read(addressDuree);
}
void effacerEEprom()
{
// write a 0 to all 512 bytes of the EEPROM
for (int i = 0; i < 512; i++)
EEPROM.write(i, 0);
}
void setup(void)
{
Serial.begin(9600);
// keypad.setRate(1);
sensors.begin();
lcd.begin(16, 2);// set up the LCD's number of columns and rows:
sensors.setAlarmHandler(&newAlarmHandler);
pinMode(13,OUTPUT); // sortie 13relais ventilation
pinMode(11,OUTPUT); // sortie 11 relais arrosage
pinMode(12,OUTPUT); // sortie 12 relais Charge
pinMode(photocellPin, INPUT);
pinMode(MesureHum, INPUT);
pinMode(MesureTension, INPUT);
}
void loop(void)
{
sensors.requestTemperatures();
sensors.processAlarms();
// Ecriture_vers_port_serie();
//effacerEEprom();
ecrireEEprom();
/////////////////////////
///Partie sélection de l'écran
//////////////////////
localKey = keypad.getKey();
if (localKey != SAMPLE_WAIT)
if (localKey==1)
buttonPushCounter++;
if (buttonPushCounter > 5)
buttonPushCounter = 0;
if (buttonPushCounter==0)
{
lcd.clear();
affichagemesures();
}
if (buttonPushCounter==1)
{
lcd.clear();
affichageDuree();
}
if (buttonPushCounter==2)
{
lcd.clear();
affichageTemp();
}
if (buttonPushCounter==3)
{
lcd.clear();
Affichage_Batterie();
}
if (buttonPushCounter==4)
{
lcd.clear();
Affichage_Humidite();
}
if (buttonPushCounter==5)
{
lcd.clear();
Affichage_Relais();
}
unsigned long currentMillis = millis();
if ((buttonPushCounter == 1)||(buttonPushCounter == 2)||(buttonPushCounter == 3)||(buttonPushCounter == 4))
if(currentMillis - previousMillis > interval4)
{
// buttonPushCounter = 0;
previousMillis = currentMillis;
}
}
TempoIntervalArrosage=(StartTempIntervalArrosageSec-FinTempIntervalArrosageSec);
if (Arrosage ==0)
FinTempArrosage=StartTempArrosage;
if((TempoIntervalArrosage)> (intervalArrosage))
{
Arrosage=1 ;
digitalWrite(11,HIGH); // relais arrosage
FinTempArrosage=StartTempArrosage;
}
// tempo Durée arrosage
StartTempArrosage = millis();
if (Arrosage==1)
FinTempIntervalArrosage=StartTempIntervalArrosage;
if(TempAros > dureeArrosage)
{
Arrosage=0 ;
digitalWrite(11,LOW); // relais arrosage
FinTempIntervalArrosage=StartTempIntervalArrosage;
}
}