Bonjour,
Désoler de ne pas avoir repondu avant mais depuis ton dernier message je suis en test intensif ...
Bon, resultat ...
Toutes mes progression fonctionne correctement !
Mais bien sur j'ai 2 petit probleme qui son apparu ]
le premier concerne mes power led, elle on besoin d'une tension minimum et du coup le début de la progression les fait scintiller.
A tu une formule pour que la progression se fasse a partir d'un niveau minimum ?
Le second concerne l'affichage, j'ai besoin de faire apparaître des informations et le problème ces que l'heure et la température son figer le Temp du loop.
A tu aussi une solution a cela ?
Je remet mon code afin que tu regarde ces 2 problèmes et que d'autre aquariophilie puisse en profiter aussi.
#include <Time.h>
#include "LiquidCrystal.h"
#include "WProgram.h"
#include "Wire.h"
#include "DS1307.h"
/*
sorti /entre Arduino
Analog Pin 0 = Température Sensor
Analog Pin 4 = SDA pour ds1307
Analog Pin 5 = SCL pour ds1307
Digital Pin 2 = LCD
Digital Pin 3 = LCD
Digital Pin 4 = LCD
Digital Pin 5 = LCD
Digital Pin 6 = power led
Digital Pin 7 = ventilateur
Digital pin 9 = rouge
Digital pin 10 = blanc
Digital Pin 11 = LCD
Digital Pin 12 = LCD
Digital Pin 8 = bleu uv
*/
//Configuration des Pin de cablage**********************
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int sensorPin = 0;
int power_led = 6;
int bleu_uv = 8;
int rouge = 10;
int blanc = 9;
int ventilateur = 7;
int time;
float temp;
int timerPWM = 0;
int valeurPWM=0;
float GAMMA_CORRECTION = 2.2;
float PWMStep = 0;
//Configuration des heures allumage/extinction ( format HHMM )**********************
int bleu_uv_on_time = 1930; //allume la pompe à cette heure
int bleu_uv_off_time = 2359; //éteint la pompe à cette heure
int ventilateur_on_temp = 27; //allume chauffage à cette température
int ventilateur_off_temp = 26.3; //éteint le chauffage à cette température
int minut;
int heure;
int seconde;
int date;
int mois;
int annee;
int temps_perso;
//Configuration de l'heure ( pour modifier l'heure de votre Arduino, enlevez les /* et */ puis une foi le programe envoyé, remettez les )**********************
void setup() {
RTC.stop();
RTC.set(DS1307_SEC,50); //réglage secondes
RTC.set(DS1307_MIN,59); //réglage minutes
RTC.set(DS1307_HR,9); //réglage heures
RTC.set(DS1307_DOW,1); //réglage jour de la semaine
RTC.set(DS1307_DATE,10); //réglage date
RTC.set(DS1307_MTH,9); //réglage mois
RTC.set(DS1307_YR,12); //réglage année
RTC.start();
//Configuration des entrées/sorties**********************
pinMode(ventilateur, OUTPUT); // digital pin ventilateur 1
pinMode(bleu_uv, OUTPUT); // digital pin pour bleu uv
pinMode(blanc, OUTPUT); // digital pin pour blanc
pinMode(rouge, OUTPUT); // digital pin pour rouge
pinMode(power_led, OUTPUT); // digital pin pour power led
lcd.begin(16, 2);
Serial.begin(9600);
}
void loop(){
//Récupération de l'heure du DS1307**********************************************************************************************
heure = RTC.get(DS1307_HR,true);
minut = RTC.get(DS1307_MIN,false);
seconde = RTC.get(DS1307_SEC,false);
date = RTC.get(DS1307_DATE,false);
mois = RTC.get(DS1307_MTH,false);
annee = RTC.get(DS1307_YR,false);
temps_perso = (heure * 100) + minut;
//Récupération de la température du LM35 ***************************************************************************************
temp = analogRead(sensorPin);
temp = temp * 0.48828125;
//****************ventilateur
if(temp > ventilateur_on_temp){
digitalWrite(ventilateur, HIGH);
}
if(temp < ventilateur_off_temp){
digitalWrite(ventilateur, LOW);
}
//*****Controle des sorties eclairage *********
//**on-off******* bleu uv *************
if(bleu_uv_on_time > temps_perso || bleu_uv_off_time <= temps_perso){
digitalWrite(bleu_uv, LOW);
}
else{
digitalWrite(bleu_uv, HIGH);
}
//***on-off***** rouge ***
if (heure == 8) {
PWMStep = 255 / 59;
timerPWM = minut-60;
valeurPWM = (int)(timerPWM * PWMStep);
analogWrite (rouge, valeurPWM);
lcd.setCursor(0,1);
lcd.print(" + + ROUGE + + ");
delay(2000);
}
else if ((heure == 20) && (minut >30)) { // entre 20:00 et 20:59:59
PWMStep = 255 / 29;
timerPWM = 30-minut;
valeurPWM = (int)(timerPWM * PWMStep);
analogWrite (rouge, valeurPWM);
lcd.setCursor(0,1);
lcd.print(" - - ROUGE - - ");
delay(2000);
}
else if ((heure >= 9 ) && (heure < 21)) {
analogWrite(rouge, 255);
lcd.setCursor(0,1);
lcd.print(" ROUGE ON ");
delay(2000);
}
else if (heure <= 21) {
analogWrite(rouge, 0);
}
//***on-off***** blanc ***
if ((heure == 8) && (minut >30)) {
PWMStep = 255 / 29;
timerPWM = minut-30;
valeurPWM = (int)(timerPWM * PWMStep);
analogWrite (blanc, valeurPWM);
lcd.setCursor(0,1);
lcd.print(" + + BLANC + + ");
delay(2000);
}
else if (heure == 20) { // entre 20:00 et 20:59:59
PWMStep = 255 / 60;
timerPWM = 60-minut;
valeurPWM = (int)(timerPWM * PWMStep);
analogWrite (blanc, valeurPWM);
lcd.setCursor(0,1);
lcd.print(" - - BLANC - - ");
delay(2000);
}
else if ((heure >= 9 ) && (heure < 21)) {
analogWrite(blanc, 255);
lcd.setCursor(0,1);
lcd.print(" BLANC ON ");
delay(2000);
}
else if (heure <= 21) {
analogWrite(blanc, 0);
}
//***on-off***** power led ***
if (heure == 9) {
PWMStep = 255 / 59;
timerPWM = minut-60;
valeurPWM = (int)(timerPWM * PWMStep);
analogWrite (power_led, valeurPWM);
lcd.setCursor(0,1);
lcd.print(" + POWER LED + ");
delay(2000);
}
else if (heure == 20) { // entre 20:00 et 20:59:59
PWMStep = 255 / 60;
timerPWM = 60-minut;
valeurPWM = (int)(timerPWM * PWMStep);
analogWrite (power_led, valeurPWM);
lcd.setCursor(0,1);
lcd.print(" - POWER_LED - ");
delay(2000);
}
else if ((heure >= 10 ) && (heure < 21)) {
analogWrite(power_led, 255);
lcd.setCursor(0,1);
lcd.print(" POWER LED ON ");
delay(2000);
}
else if (heure <= 21) {
analogWrite(power_led, 0);
}
//****Gestion de l'Affichage Sur l'écran ********
//Affichage température*****************************************************************************
lcd.setCursor(10,0);
delay(100);
lcd.print(temp);
lcd.print((char)223);
//Affichage heure******************************************************************************************
lcd.setCursor(0,0);
if (heure < 10)
{
lcd.print("0");
}
lcd.print(RTC.get(DS1307_HR,true));
lcd.print("H");
if (minut < 10)
{
lcd.print("0");
}
lcd.print(RTC.get(DS1307_MIN,false));
lcd.print(" ");
delay(200);
//****Affichage ventilateur ********
lcd.setCursor(0,1);
if(digitalRead(ventilateur) == HIGH)
{
lcd.println("ventilateur ON ");
delay(3000);
}
else
{
lcd.println("ventilateur OFF ");
delay(3000);
}
}