Pages: [1]   Go Down
Author Topic: controleur eclairage pour aquarium  (Read 820 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 61
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: