Arduino Mega 7-Chanel controled Led with RTC and I2C Lcd 16x2

So at start i look for some advice with code i put together from difrent sources and my own little projects

Later i will try to add schematic for my project because im working on it with fritzing

And sry for double post.

#include <Wire.h>
#include "RTClib.h"
#include <LiquidCrystal_I2C.h>
#include <DallasTemperature.h>
#include <OneWire.h>
#include <Wire.h>

#define ONE_WIRE_BUS 53

LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);  // Ustawienie adresu ukladu na 0x27

OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

const char *monthName[12] = {
  "1", "2", "3", "4", "5", "6",
  "7", "8", "9", "10", "11", "12"
};

RTC_DS1307 RTC;

/* ***************************************************** */
/* *     PWM_Pin[7] = {3, 5, 6, 9, 10, 11, 12};                                                                                          * */
/* *    ШИМ пин для CW                   * */
/* *    Kanal - 3  - NIEBIESKI                                      * */
/* *    KNl - 5  - CZERWONY                                    * */
/* *    KNL - 6 -biale                             * */
/* *    KNLн - 9  -pom                                                * */
/* *    KNL - 10 -ZIELONY                                            * */
/* *    KNL - 11 -SZAFIR
  /    kL - 12  -  uv
  /* *                                                                                             * */
/* ***************************************************** */

int Hours_Start_Sunrise[7] = {9, 9, 8, 8, 9, 7, 9};             // Godzina wschodu
int Minutes_Start_Sunrise[7] = {0, 30, 30, 0, 0, 30, 0};              // Minuta Wsch
int Hours_End_Sunrise[7] = {11, 11, 10, 10, 11, 10, 11};      // G.Zak.Wsch
int Minutes_End_Sunrise[7] = {0, 0, 0, 0, 0, 0, 0};                  // Min.Zak.Wsch

int Hours_Start_Sunset[7] = {18, 18, 20, 20, 18, 20, 18};    // Godz.Zach
int Minutes_Start_Sunset[7] = {0, 0, 0, 0, 0, 0, 0};                // Minuta.Zach
int Hours_End_Sunset[7] = {22, 22, 23, 23, 22, 23, 22};        // Godzi.Zak.Zach
int Minutes_End_Sunset[7] = {50, 50, 0, 0, 50, 50, 50};            // Min.Zak.Zach

int MinuteDay_Start_Sunrise[7];                                            // день в минутах для начала рассвета
int MinuteDay_End_Sunrise[7];                                                    // день в минутах для окончания рассвета

int MinuteDay_Start_Sunset[7];                                                  // день в минутах для начала заката
int MinuteDay_End_Sunset[7];                                                      // день в минутах для окончания заката

int Current_MinuteDay;                                                                  // текущая минута суток
int Current_Period[7];                                                                  // текущая часть суток 1-рассвет, 2-день, 3-закат, 4-ночь для каждого ШИМ

int Meridian_PWM[7] = {255, 255, 255, 255, 255, 255, 255};    // Maksymalna wartosc pracy w dzien (0-255Maks)
int Midnight_PWM[7] = {0, 0, 0, 0, 0, 0, 0};                                // Nocne oswietlenie
int Current_PWM[7] = {0, 0, 0, 0, 0, 0, 0};                                  // niewazne

/* ***************************************************** */
/* *     PWM_Pin[7] = {3, 5, 6, 9, 10, 11, 12};                                                                                          * */
/* *    ШИМ пин для CW                   * */
/* *    Kanal - 3  - NIEBIESKI                                      * */
/* *    KNl - 5  - CZERWONY                                    * */
/* *    KNL - 6 -biale                             * */
/* *    KNLн - 9  -pom                                                * */
/* *    KNL - 10 -ZIELONY                                            * */
/* *    KNL - 11 -SZAFIR
  /    kL - 12  -  uv
  /* *                                                                                             * */
/* ***************************************************** */

int PWM_Pin[7] = {3, 5, 9, 6, 10, 11, 12};                                  // ШИМ пин

int Relay1 = 7; //вент
int Relay2 = 8; //луна
byte Relay1Status = false;
byte Relay2Status = false;

void setup()
{

  Serial.begin(57600);
  Wire.begin();
  RTC.begin();

  if (! RTC.isrunning()) {
    Serial.println("RTC is NOT running!");
    //RTC.adjust(DateTime(2012, 7, 12, 22, 48, 1));
  }
  //RTC.adjust(DateTime(2012, 7, 31, 21, 53, 1));

  lcd.begin(16, 2);

  lcd.backlight(); // zalaczenie podwietlenia
  lcd.setCursor(0, 0); // Ustawienie kursora w pozycji 0,0 (pierwszy wiersz, pierwsza kolumna)
  lcd.print("Sterowanie");
  delay(100);
  lcd.setCursor(0, 1); //Ustawienie kursora w pozycji 0,0 (drugi wiersz, pierwsza kolumna)
  lcd.print("Akwarium");

  

  sensors.begin();



  for (int i = 0; i <= 6; i++)
  {
    pinMode(PWM_Pin[i], OUTPUT);                                    // Установка пин для ШИМ
  }

  for (int i = 0; i <= 6; i++)
  {
    analogWrite(PWM_Pin[i], Midnight_PWM[i]);              // Установка минимального значения ШИМ
    Current_PWM[i] = Midnight_PWM[i];                                     // установка текущих значений ШИМ в минимум
  }

  for (int i = 0; i <= 6; i++)
  {
    MinuteDay_Start_Sunrise[i] = 60 * Hours_Start_Sunrise[i] + Minutes_Start_Sunrise[i];           // Расчет минуты суток для начала рассвета
    MinuteDay_End_Sunrise[i] = 60 * Hours_End_Sunrise[i] + Minutes_End_Sunrise[i];                   // Расчет минуты суток для окончания рассвета
    MinuteDay_Start_Sunset[i] = 60 * Hours_Start_Sunset[i] + Minutes_Start_Sunset[i];             // Расчет минуты суток для начала заката
    MinuteDay_End_Sunset[i] = 60 * Hours_End_Sunset[i] + Minutes_End_Sunset[i];                             // Расчет минуты суток для окончания заката
  }
  pinMode(Relay1, OUTPUT);
  pinMode(Relay2, OUTPUT);
  digitalWrite(Relay1, LOW);
  digitalWrite(Relay2, HIGH);

}

// Процедура расчета текущего периода и значения PWM по каналам

aqua.txt (19.4 KB)

  • It would have been good to mention that the code you posted in code tags is incomplete and the full sketch is attached.
  • Attach sketches as .ino, not .txt.
  • Please always do a Tools > Auto Format on your code before posting it. This will make it easier for you to spot bugs and make it easier for us to read. If you're using the Arduino Web Editor you will not have access to this useful tool. I recommend you to use the standard IDE instead
  • Please remove unnecessary blank lines from your code before posting to the forum. One or two to separate code into logical sections is fine but large spaces for no reason just make for more scrolling when we're trying to read your code.
  • When your code requires a library that's not included with the Arduino IDE please always post a link (using the chain link icon on the toolbar to make it clickable) to where you downloaded that library from or if you installed it using Library Manger(Sketch > Include Library > Manage Libraries) then say so and state the full name of the library.
  • Use the const keyword on every variable that is never intended to change. https://www.arduino.cc/en/Reference/Const
  • Use descriptive variable names. You generally do a good job of this but I would have used a better variable name than i in the for loops.
  • You can save SRAM by using the F() macro to move string literals to program memory.
  • I like to use descriptive variable names for pin states. If you do something like this:
const byte RelayOnState = LOW;
const byte RelayOffState = HIGH;

then your code is easier to understand:

digitalWrite(Relay1, RelayOnState);

thx for reply and some tips