Проблема с RTCLib

igori4
Offline
Зарегистрирован: 23.05.2014

ПРИ заливке кода выдает ошибку:

C:\Program Files (x86)\Arduino\hardware\tools\avr\bin\avr-g++ -c -g -Os -Wall -fno-exceptions -ffunction-sections -fdata-sections -mmcu=atmega2560 -DF_CPU=16000000L -MMD -DUSB_VID=null -DUSB_PID=null -DARDUINO=105 -IC:\Program Files (x86)\Arduino\hardware\arduino\cores\arduino -IC:\Program Files (x86)\Arduino\hardware\arduino\variants\mega -IC:\Program Files (x86)\Arduino\libraries\Wire C:\Users\Igor\AppData\Local\Temp\build7896168291603421533.tmp\sketch_may23a.cpp -o C:\Users\Igor\AppData\Local\Temp\build7896168291603421533.tmp\sketch_may23a.cpp.o 
sketch_may23a.ino:2:20: error: RTClib.h: No such file or directory
sketch_may23a:4: error: 'RTC_DS1307' does not name a type
sketch_may23a.ino: In function 'void setup()':
sketch_may23a:53: error: 'RTC' was not declared in this scope
sketch_may23a.ino: In function 'void Led_Dim_PWM()':
sketch_may23a:90: error: 'DateTime' was not declared in this scope
sketch_may23a:90: error: expected `;' before 'now'
sketch_may23a:91: error: 'now' was not declared in this scope
 

Сам код:

#include <Wire.h>
#include "RTClib.h"

RTC_DS1307 RTC;

int Hours_Start_Sunrise[6] = {11, 9, 10, 11, 12, 12};             // начало рассвета по каналам час
int Minutes_Start_Sunrise[6] = {0, 0, 0, 0, 0, 0};              // начало рассвета по каналам минута
int Hours_End_Sunrise[6] = {15, 12, 13, 14, 15, 15};      // окончание рассвета по каналам час
int Minutes_End_Sunrise[6] = {0, 0, 0, 0, 0, 0};                  // окончание рассвета по каналам минута

int Hours_Start_Sunset[6] = {17, 20, 19, 18, 17, 17};    // начало заката по каналам час
int Minutes_Start_Sunset[6] = {0, 0, 0, 0, 0, 0};                // начало заката по каналам минута
int Hours_End_Sunset[6] = {21, 23, 22, 21, 21, 21};        // окончание заката по каналам час
int Minutes_End_Sunset[6] = {0, 0, 0, 0, 0, 0};            // окончание заката по каналам минута

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

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

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

int Meridian_PWM[6] = {128, 192, 192, 192, 128, 128};    // максимальное значение ШИМ
int Midnight_PWM[6] = {0, 0, 0, 0, 0, 0};                                // минимальное значение ШИМ
int Current_PWM[6] = {0, 0, 0, 0, 0, 0};                                  // текущее значение ШИМ

/* ***************************************************** */
/* *                                                                                               * */
/* *    ШИМ пин для CW, TV, RB, NB, DR, NG                       * */
/* *    Пин - 3  - CW - Cool White                                       * */
/* *    Пин - 5  - TV - True Violet                                     * */
/* *    Пин - 6  - RB - Royal Blue                                       * */
/* *    Пин - 7  - NB - Blue                                               * */
/* *    Пин - 10 - DR - Deep Red                                           * */
/* *    Пин - 11 - NG - Green                                             * */
/* *                                                                                               * */
/* ***************************************************** */

int PWM_Pin[6] = {3, 5, 6, 9, 10, 11};                                  // ШИМ пин для CW, TV, RB, NB, DR, NG

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));


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

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

   for (int i=0; i<=5; 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 по каналам
void Led_Dim_PWM() 
{
  DateTime now = RTC.now();
  Current_MinuteDay = (now.hour() * 60) + now.minute();
  
  for (int i=0; i<=5; i++)
   {
         Current_Period[i]=4;
         if (Current_MinuteDay>=MinuteDay_Start_Sunrise[i] && Current_MinuteDay<=MinuteDay_End_Sunrise[i]) {Current_Period[i]=1;}
         if (Current_MinuteDay>MinuteDay_End_Sunrise[i] && Current_MinuteDay<MinuteDay_Start_Sunset[i]) {Current_Period[i]=2;}
         if (Current_MinuteDay>=MinuteDay_Start_Sunset[i] && Current_MinuteDay<=MinuteDay_End_Sunset[i]) {Current_Period[i]=3;}

         if (Current_Period[i]==1)
           {
                   Current_PWM[i]=(float)(((float)Current_MinuteDay-MinuteDay_Start_Sunrise[i])/((float)MinuteDay_End_Sunrise[i]-MinuteDay_Start_Sunrise[i]))*((float)Meridian_PWM[i]-Midnight_PWM[i]);
                   if (Current_PWM[i]<Midnight_PWM[i]) {Current_PWM[i]=Midnight_PWM[i];}
                   analogWrite(PWM_Pin[i], Current_PWM[i]);                                                                                                                                                                                       
           }

         if (Current_Period[i]==2)
           {
                 if (Current_PWM[i]!=Meridian_PWM[i])
                  {
                        Current_PWM[i]=Meridian_PWM[i];
                        analogWrite(PWM_Pin[i], Current_PWM[i]);
                  }
           }

         if (Current_Period[i]==3)
           {
                   Current_PWM[i]=(float)(((float)MinuteDay_End_Sunset[i]-Current_MinuteDay)/((float)MinuteDay_End_Sunset[i]-MinuteDay_Start_Sunset[i]))*((float)Meridian_PWM[i]-Midnight_PWM[i]);
                   analogWrite(PWM_Pin[i], Current_PWM[i]);
           }
           
          if (Current_Period[i]==4)
                {
                  if (Current_PWM[i]!=Midnight_PWM[i])
                  {
                        Current_PWM[i]=Midnight_PWM[i];
                        if (Current_PWM[i]<Midnight_PWM[i]) {Current_PWM[i]=Midnight_PWM[i];}
                        analogWrite(PWM_Pin[i], Current_PWM[i]);
                  }
                } 
          }
          
        Serial.print(now.year(), DEC);
        Serial.print('/');
        Serial.print(now.month(), DEC);
        Serial.print('/');
        Serial.print(now.day(), DEC);
        Serial.print(' ');
        Serial.print(now.hour(), DEC);
        Serial.print(':');
        Serial.print(now.minute(), DEC);
        Serial.print(':');
        Serial.print(now.second(), DEC);
        Serial.print(" Current_MinuteDay: ");
        Serial.print(Current_MinuteDay, DEC); 
        Serial.println();
          
        for (int i=0; i<=5; i++) 
         {
          Serial.print("Channel #");     
          Serial.print(i, DEC);
          Serial.print(", Current Period: ");    
          if (Current_Period[i]==1) {Serial.print("Sunrise");}   
          if (Current_Period[i]==2) {Serial.print("Meridian");}  
          if (Current_Period[i]==3) {Serial.print("Sunset");}    
          if (Current_Period[i]==4) {Serial.print("Midnight");}
          Serial.print(", Current PWM: ");
          Serial.print(Current_PWM[i], DEC);
          Serial.println();
         }
         Serial.println();
}

void RalayOnOff() 
  {
  int SumPWM=0;

  for (int i=0; i<=5; i++)
        {
         SumPWM=SumPWM+Current_PWM[i]; 
        }
        if (SumPWM>=50 && Relay1Status==false) 
          {
                Relay1Status=true;
                Relay2Status=false;
                digitalWrite(Relay1, HIGH);
                digitalWrite(Relay2, LOW);
          }

        if (SumPWM<50 && Relay1Status==true) 
          {
                Relay1Status=false;
                Relay2Status=true;
                digitalWrite(Relay1, LOW);
                digitalWrite(Relay2, HIGH);
          }
  }
void loop () {
 
        
        Led_Dim_PWM();
        RalayOnOff();
   
        delay(60000);

} 
toly
Offline
Зарегистрирован: 17.05.2014

Похоже компиллятор не находит фаил RTClib.h...нужно проверять почему, пути и установки проекта прежду всего.

igori4
Offline
Зарегистрирован: 23.05.2014

Спасибо! Неправильно установил библиотеку.

fly245
fly245 аватар
Offline
Зарегистрирован: 25.08.2013

Установил в папку библиотеку RTClib,но при компиляции не видит IDE  эту библиотеку.В менеджере библиотек она видится как установленная.В чем может быть затык? 

Radjah
Offline
Зарегистрирован: 06.08.2014

#include "RTClib.h"

зааменить на

#include <RTClib.h>

zevsgeloc
Offline
Зарегистрирован: 23.02.2016

Сколько искал не могу найти ответ.

Как записать в now (это тип с 6ю переменными) по отдельности год месяц... итд чтобы потом это все установить в качествев времени

я создал вторую переменную 

DateTime newTime;

и ввожу newTime.year()=now.year();

на что он ругается тем что ниже

DateTime::minute() const

     uint8_t minute() const      { return mm; }
             ^
C:\Users\Џ®«м§®ў ⥫м\Documents\Arduino\libraries\RTClib/RTClib.h:22:13: note:   candidate expects 0 arguments, 1 provided
lvalue required as left operand of assignment
 я так понял что это все константы и им значения присваивать нельзя и что тогда делать?
 
RTC.adjust(DateTime(now.year(),now.month(),now.day(),now.hour(),volPunkt[4],now.second()));  сделал вот так, но это установка, я что не смогу поменять какойто пункт переменной типа DateTime поотельности?
Radjah
Offline
Зарегистрирован: 06.08.2014

Хотя бы в хидер загляни что ли. Там конструкторов целый воз.

    DateTime (uint32_t t =0);
    DateTime (uint16_t year, uint8_t month, uint8_t day,
                uint8_t hour =0, uint8_t min =0, uint8_t sec =0);
    DateTime (const DateTime& copy);
    DateTime (const char* date, const char* time);
    DateTime (const __FlashStringHelper* date, const __FlashStringHelper* time);

 

zevsgeloc
Offline
Зарегистрирован: 23.02.2016

не знаю что такое хидер, вобщем если бы переменными были а не константами, я бы с каждой манипулировать мог, а так ничо не сделаешь, потому что переменные в RTC а не в DateTime?

Radjah
Offline
Зарегистрирован: 06.08.2014

Ты там завязывай с тяжелыми веществами и начинай изучать программирование, чтобы чушь не пороть.

> не знаю что такое хидер

RTClib.h

> переменные в RTC а не в DateTime

Читай код бибилиотеки! И код функций now() особенно.

zevsgeloc
Offline
Зарегистрирован: 23.02.2016

читай  не читай если тяжелое програмирование не курил, хрен я в чем там разберусь, "тыжпрограммист" ты наш

щас попробую прочесть, ты то нахрена влезаешь умник, если только и можешь всех по ссылке отправлять. Просто глупо на мой взгляд все время по имени переменной обращаться если у нее порядковый номер есть. Чем мне поможет что я библиотеку прочту если у меня в голове только по имени переменной

бестолку - там по now управление через регистры по wire, умник блин

кроме него кто може помочь вопросы следующие:

можно ли как-то через порядковый номер именнованной переменной считать ее - datetime(1) это year, datetime(2) месяц...

про что такое "::" я наверно у знакомого програмиста спрошу, сам я на си так тяжело не курил

 

zevsgeloc
Offline
Зарегистрирован: 23.02.2016

Программист сказал что по порядку нельзя

 

Radjah
Offline
Зарегистрирован: 06.08.2014

Ну ты натурально дебил. Читай тогда про unixtime.

Я да, я умнее тебя. Если хочешь это исправить, то учись программировать.

zevsgeloc
Offline
Зарегистрирован: 23.02.2016

Какой умный ты хоть чтото предложил в качестве решения? я о твоей крутопрограмируемости знаю только по тобой заявленым понтам. Так что ты для меня бумажка с которой в туалет можно сходить никкой пользы от тебя нет, ты даже по unixtime решения не привел. так чисто пуляние терминами. рот себе заткни мудак. От тебя пользы никакой иди убейся об стену со своим умом чем страницы марать. 

Radjah
Offline
Зарегистрирован: 06.08.2014

Любой каприз за ваши деньги.