Go Down

Topic: controleur eclairage pour aquarium (Read 963 times) previous topic - next topic

rico37350

Bonjour,
quelqu'un peut il m'aider car j'ai quelques petits problèmes avec mon contrôleur.
le 1er problème réside sur son affichage avec les "0" si les digits sont inférieurs à 10.
Quand il est minuit mon horloge indique "0:00:000" ce qui génère quelques dysfonctionnements dans l'allumage et l'extinction de mes sorties.
Le second et que je veux utiliser un pad avec 4 boutons poussoirs (avec tension != pour chaque commutateur)pour pouvoir gérer les sorties manuellement et je ne trouve pas de codes sur la toile qui fonctionne correctement. En fait ce que je voudrais c'est quand j'appuie sur un bouton celui-ci passe à "on" je garde cet état en mémoire et de nouveau si je rappuie sur ce même bouton et passe à "off" .

programme de mise à l'heure du RTC DS1307


#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h>

void setup() {
RTC.stop();
RTC.set(DS1307_SEC,00);        //reglage secondes
RTC.set(DS1307_MIN,17);        //reglage minutes
RTC.set(DS1307_HR,9);         //reglage heures
RTC.set(DS1307_DOW,6);         //reglage jour de la semaine
RTC.set(DS1307_DATE,28);       //reglage date
RTC.set(DS1307_MTH,01);         //reglage mois
RTC.set(DS1307_YR,11);          //reglage annee
RTC.start();
}

void loop(){
}

code du contrôleur d'éclairage:

#include <LiquidCrystal.h>
#include <WProgram.h>
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>

/*
Arduino Ricco Controller
Analog Pin 0 = Temperature Sensor
Analog Pin 1 = pad
Analog Pin 2 = none
Analog Pin 3 = none
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 = LCD
Digital Pin 7 = LCD
Digital Pin 8 = Ballast actiniques
Digital Pin 9 = PWM actiniques
Digital Pin 10 = Ballast daylight
Digital Pin 11 = PWM daylight
Digital Pin 12 = moonlight
Digital Pin 13 = none

*/
//******************************** Declaration des entrees *************************************

//LiquidCrystal lcd(rs, enable, d4, d5, d6, d7)
LiquidCrystal lcd(2, 3, 4, 5, 6, 7);
int sensorPin = 1;
//int pad = 1;
int actiniques = 8;
int pwm1 = 9;
int daylight = 10;
int pwm2 = 11;
int moon = 12;
int time;
int val_up=0;
int val_down=0;
long last_time1 = 0;
long last_time2 = 0;

void setup()  {
  Serial.begin(9600);
  pinMode(actiniques, OUTPUT);
  digitalWrite(actiniques, LOW);
  pinMode(daylight, OUTPUT);
  digitalWrite(daylight, LOW);
  pinMode(moon, OUTPUT);
  digitalWrite(moon, LOW);
  analogWrite(pwm1,0);
  analogWrite(pwm2,0);
  //pinMode(pad, INPUT);
  lcd.begin(20, 4);
  delay(10);
  lcd.print("====================");
  lcd.setCursor(0, 1) ;
  lcd.print(": LIGHT CONTROLER  :");
  lcd.setCursor(0, 2) ;
  lcd.print(":  made by RICCO   :");
  lcd.setCursor(0, 3) ;
  lcd.print("====================");
  delay(4000);
  lcd.clear();
  setSyncProvider(RTC.get);
  lcd.setCursor(0, 1) ;
    lcd.print("Synchronisation RTC");
  lcd.setCursor(0, 2) ;
  if(timeStatus()!= timeSet)
    lcd.print("      failed      ");
  else
    lcd.print("    Successfull   ");
  delay(2000);   
  lcd.clear();
  delay(10);
}



void loop() {

  //***************************************** Variables ***************************************

  val_up = (map (minute(), 0, 59, 0, 255));
  val_down = (map (minute(), 0, 59, 255, 0));
  time = ((hour() * 100) + minute());

  //****************************** Recuperer la temperature du LM35 ****************************

  int reading = analogRead(sensorPin);
  float temp = reading / 25.0 - 8.0 ;


//********************************* Recuperer infos pad boutons *******************************

  //int pad1 = analogRead(pad);
   
  //*********************************** Ballast actiniques *************************************


  if (hour() == 10) {
   digitalWrite(actiniques, HIGH);
  }
  else if (hour() == 22) {
   digitalWrite(actiniques, LOW);
  }
  else if ((hour() > 9)&&(hour() < 22)) {
    digitalWrite(actiniques, HIGH);
  }
  else if ((hour() > 22)&&(hour() < 10)) {
    digitalWrite(actiniques, LOW);
  }

  //************************************* Ballast daylight ***************************************


  if (hour() == 11) {
    digitalWrite(daylight, HIGH);
  }
  else if (hour() == 21){
    digitalWrite(daylight, LOW);
  }
  else if ((hour() > 10)&&(hour() < 21)) {
    digitalWrite(daylight, HIGH);
  }
  else if ((hour() > 20)&&(hour() < 11)) {
    digitalWrite(daylight, LOW);
  }

     
  //**************************************** Moonlight ********************************************


  if (hour() == 10 && minute() > 1) {
    digitalWrite(moon, LOW);
  }
  else if (hour() == 21 && minute() > 1){   
    digitalWrite(moon, HIGH);
  }
  else if ((hour() > 21) && (hour() < 10 )) {
    digitalWrite(moon, HIGH);
  }
  else if ((hour() > 9 ) && (hour() < 22 )) {
    digitalWrite(moon, LOW);
  }
   
  //************************************** PWM actiniques ******************************************

  if(hour() == 10 && minute() == 15) {
    analogWrite (pwm1,val_up);
  }
  else if(hour() == 20 && minute() == 45) {
    analogWrite (pwm1,val_down);
  }
  else if((hour() == 11 && minute() > 15)&&(hour() == 20 && minute() > 45)) {
    analogWrite (pwm1,255);
  }

  else if((hour() > 22) && (hour() < 10 && minute() < 15)) {
    analogWrite (pwm1,0);
  }
       
  //*************************************** PWM daylight ********************************************

  if(hour() == 11 && minute() == 15){
    analogWrite (pwm2,val_up);
  }
  else if(hour() == 19 && minute() == 45){
    analogWrite (pwm2,val_down);
  }
  else if((hour() == 11 && minute() > 15)&&(hour() == 19 && minute() > 45)){
    analogWrite (pwm2,255);
  }

  else if((hour() > 21)&&(hour() < 11 && minute() < 15)){
    analogWrite (pwm2,0);
  }
   
  //************************************** Affichage heure *******************************************
   
   if ( millis() >=(last_time1 + 1000))
  {
    lcd.setCursor(0,0) ;
    lcd.print(hour());
    printDigits(minute());
    printDigits(second());
    last_time1 = millis();
  }

  //Serial.print(hour()),Serial.print(":"),Serial.print(minute()),Serial.print(":"),Serial.print(second()),Serial.print(" "),Serial.pri
  //Serial.print(temps_perso),Serial.println();
  //Serial.print(time),Serial.println();

  //********************************** Affichage etat des sorties ***************************************

{
  lcd.setCursor(0,1);
  if (digitalRead(actiniques) == HIGH)
    lcd.print("Actinic    :  On    ");
  else
    lcd.print("Actinic    :  Off   ");
  lcd.setCursor(0,2);
  if (digitalRead(daylight) == HIGH)
    lcd.print("Daylight   :  On    ");
  else
    lcd.print("Daylight   :  Off   ");
  lcd.setCursor(0,3);
  if (digitalRead(moon) == HIGH)
    lcd.print("Moonlight  :  On    ");
  else
    lcd.print("Moonlight  :  Off   ");
  }
     
  //************************************** Affichage temperature *******************************************
  if ( millis() >=(last_time2 + 500))
  {
    lcd.setCursor(10,0);
    lcd.print("T:");
    lcd.setCursor(13,0);
    lcd.print(temp, 1);
    lcd.setCursor(18,0);
    lcd.print((char) 223);
    lcd.print("C  ");
    last_time2 = millis();
   }
   
   

}

//******************************* Variable affichage de l'heure ******************************************

void printDigits(int digits){
  lcd.print(":");
  if (digits < 10)
  lcd.print("0");
  lcd.print(digits);

}
Cordialement

Go Up