Go Down

Topic: aide compréhension programme (Read 474 times) previous topic - next topic

polotche

bonsoir tout le monde,
voilà, on m'a refilé un programme pour la gestion de mon aquarium mais à vrai dire, je suis débutant en arduino et je n'y comprends pas grand chose en programmation. :P

je sais juste qu'il affiche la température de la rampe d'éclairage, de l'eau du bac, il actionne un ventilo et il fait fonctionner mes 3 drivers pour les leds...le tout afficher sur un lcd 20*4.

j'aurais bien voulu que vous me donniez un coup de main pour essayer de mieux comprendre ce fameux programme:

Code: [Select]

#include "LiquidCrystal.h"
#include "WProgram.h"
#include "Wire.h"
#include "DS1307.h"

LiquidCrystal lcd(30, 31, 32, 33, 34, 35, 36);
int white = 5;
int royalblue = 6;
int blue = 7;
int ventilateur = 9;

int valeurPWM=0;
int minut;
int heure;
int seconde;
int time;
float sensorPineau;
float sensorPinled;
float tempeau;
float templed;
float temp1;
float Vact = 0; // variable valeur instantanée
int Fd=20; // facteur de division de la moyenne = moyenne toutes les FD boucles ici 20
long Accm=0; // accumulateur pour moyenne
int Nbcl=0; // compteur de boucles


void setup() {

lcd.begin(20,4);
Serial.begin(9600);

pinMode(white, OUTPUT);
pinMode(royalblue, OUTPUT);
pinMode(blue, OUTPUT);
pinMode(ventilateur, OUTPUT);
}


void loop(){

//***** temperature eau *********
sensorPineau = analogRead(0);
Vact = ((sensorPineau*0.5)+1.5)*100 ;
Accm=Accm+Vact;
Nbcl ++;

if (Nbcl == Fd) {
temp1 = (Accm / Fd) ;
tempeau = temp1/100;
Accm= Accm-(Accm/20) ;
Nbcl= 19;
}
else{
tempeau = (Accm / Nbcl) ;
tempeau = tempeau/100;
}
//***** temperature led *********

sensorPinled = analogRead(1);
templed = sensorPinled*0.5 ;





//Récupération de l'heure du DS1307**********************************************************************************************
heure = RTC.get(DS1307_HR,true);
minut = RTC.get(DS1307_MIN,true);
seconde = RTC.get(DS1307_SEC,true);
time = (heure * 100) + minut;

//Affichage ******************************************************************************************
lcd.setCursor(0,0);
lcd.print (" POLOTCHE REEF TANK ");
lcd.setCursor(0,1);
lcd.print(" ");
if (heure < 10)
{
lcd.print("0");
}
lcd.print(heure);
lcd.print("H");
if (minut < 10)
{
lcd.print("0");
}
lcd.print(minut);
lcd.print(" ");
delay (5000);
lcd.setCursor(0,2);
lcd.print(" ");
lcd.print(tempeau);
lcd.print((char)223);
lcd.print(" ");
delay (5000);


//*****Controle des sorties eclairage *********
//***on-off***** white ***

if ((time >= 9300) && (time < 1045)){
valeurPWM = map(time, 930, 1044, 0, 255);
analogWrite (white, valeurPWM);
lcd.setCursor(0,3);
lcd.print("message.........");
delay(5000);
}
else if ((time >= 2215) && (time < 2300)){
valeurPWM = map(time, 2215, 2259, 255, 0);
analogWrite (white, valeurPWM);
lcd.setCursor(0,3);
lcd.print("message.........");
delay(5000);
}
else if ((time >= 1045 ) && (time < 2230)) {
analogWrite(white, 255);
}
else {
analogWrite(white, 0);
lcd.setCursor(0,1);
lcd.print("message.........");
delay(5000);
}


//***on-off***** royalblue ***

if ((time >= 9300) && (time < 1045)){
valeurPWM = map(time, 930, 1044, 0, 255);
analogWrite (royalblue, valeurPWM);
lcd.setCursor(0,3);
lcd.print("message.........");
delay(5000);
}
else if ((time >= 2215) && (time < 2300)){
valeurPWM = map(time, 2215, 2259, 255, 0);
analogWrite (royalblue, valeurPWM);
lcd.setCursor(0,3);
lcd.print("message.........");
delay(5000);
}
else if ((time >= 1045 ) && (time < 2230)) {
analogWrite(royalblue, 255);
}
else {
analogWrite(royalblue, 0);
lcd.setCursor(0,3);
lcd.print("message.........");
delay(5000);
}

//***on-off***** blue ***

if ((time >= 9300) && (time < 1045)){
valeurPWM = map(time, 930, 1044, 0, 255);
analogWrite (blue, valeurPWM);
lcd.setCursor(0,3);
lcd.print("message.........");
delay(5000);
}
else if ((time >= 2215) && (time < 2300)){
valeurPWM = map(time, 2215, 2259, 255, 0);
analogWrite (blue, valeurPWM);
lcd.setCursor(0,3);
lcd.print("message.........");
delay(5000);
}
else if ((time >= 1045 ) && (time < 2230)) {
analogWrite(blue, 255);
}
else {
analogWrite(blue, 0);
lcd.setCursor(0,3);
lcd.print("message.........");
delay(5000);
}

//***on-off***** ventilateur led ***

lcd.setCursor(0,0);
lcd.print(" ");
lcd.print(templed);
lcd.print((char)223);
lcd.print(" ");

if (templed > 30){
analogWrite(ventilateur, 255);
lcd.setCursor(0,3);
lcd.print("ventilateur ");
lcd.print(" ON");
delay(5000);
}
else {
analogWrite(ventilateur, 0);
lcd.setCursor(0,3);
lcd.print("ventilateur ");
lcd.print(" OFF");
delay(5000);
}
}


j'ai réussi a cabler le ds1307 ainsi que le lcd. J'ai quelque chose qui s'affiche  :D

Et enfin, le programme fonctionne avec des sondes lm35 mais je dispose aussi de sonde ds18b20, peut on modifier le programme pour qu'il fonctionne avec ces dernières sondes?

merci

Go Up