Помогите разобраться со скетчем

Тема в разделе "Arduino & Shields", создана пользователем iwizard7, 18 ноя 2016.

  1. iwizard7

    iwizard7 Нерд

    Добрый день, есть скетч зарядно-разрядного устройства. Схемотехнику всю собрал (http://f007.ru/tag/avtomobili/) а скетч при загрузке пишет ошибку

    charger.ino: In function 'void setup()':
    charger:21: error: 'RTC' was not declared in this scope
    charger:30: error: 'DS1307_SQW32KHZ' was not declared in this scope
    charger.ino: In function 'void loop()':
    charger:39: error: 'RTC' was not declar

    Код (C++):
    // Date and time functions using a DS1307 RTC connected via I2C and Wire lib
    #include <EEPROM.h>
    #include <Wire.h>
    #include <DS1307.h>
    #include "RTClib.h"
    #include <LiquidCrystal_I2C.h>
    int rtc[7];
    byte rr[7];
    LiquidCrystal_I2C lcd(0x27,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
    #define RELE_NAGRUZKA 2 //объявляем работу реле нагрузки на пине 2
    #define RELE_ZARYADKA 3 //объявляем работу реле зарядки на пине 3
    int analogPin = 0;
    int flag=0;
    float val=0;
    float valkoef=0;

    void setup ()
    {
      DDRC|=_BV(2) |_BV(3);  // POWER:Vcc Gnd
      PORTC |=_BV(3);  // VCC PINC3
      RTC.get(rtc,true);
      lcd.init();                      // initialize the lcd
      lcd.backlight();
      lcd.home();
      pinMode(RELE_NAGRUZKA, OUTPUT); //инициируем реле только на выход
      pinMode(RELE_ZARYADKA, OUTPUT); //инициируем реле только на выход
      lcd.clear();
      digitalWrite(RELE_NAGRUZKA, HIGH);
      digitalWrite(RELE_ZARYADKA, HIGH);
      RTC.SetOutput(DS1307_SQW32KHZ);
      EEPROM.write (0, rtc[2]); // при старте записываем значение времени, часы
      EEPROM.write (1, rtc[1]); // при старте записываем значение времени, минуты
    }

    void loop ()
    {
    val = analogRead(analogPin); // считываем значение напряжения с аналогового порта
    valkoef=val/74,49; // приводим снятое с аналогового пина значение к обычным вольтам
    RTC.get(rtc,true);
    lcd.setCursor (0,0);
    lcd.print (rtc[2]);
    lcd.print (":");
    lcd.print (rtc[1]);
    lcd.print (":");
    lcd.print (rtc[0]);
    lcd.print (" str");
    lcd.print (EEPROM.read(0));
    lcd.print (":");
    lcd.print (EEPROM.read(1));
    lcd.setCursor (0,1);
    lcd.print (valkoef);
    lcd.print (" ");
    lcd.print (flag);
    if (valkoef < 10.72)
       {
        flag=1;
        EEPROM.write(2, rtc[2]); // записыываем время окончания разрядки, часы
        EEPROM.write (3, rtc[1]); // записыываем время окончания разрядки, минуы
       }
    if (flag==1)
    {
       digitalWrite(RELE_ZARYADKA, LOW); // включаем зарядку
       digitalWrite(RELE_NAGRUZKA, HIGH); // выключаем нагрузку
       lcd.print (" stp");
       lcd.print (EEPROM.read(2)); // выводим время окончания разрядки
       lcd.print (":");
       lcd.print (EEPROM.read(3));
    }
     
    if ((valkoef > 10.72) &&(flag==0))
    {
       digitalWrite(RELE_NAGRUZKA, LOW);
        }
    else
       {
         digitalWrite(RELE_NAGRUZKA, LOW);
       
       }
      delay(500);
    }
    Не могу понять как исправить.
     
  2. Vetrinus

    Vetrinus Гик

    Ругается на отсутсвие объекта RTC. Где брали библиотеки для часов?
     
  3. iwizard7

    iwizard7 Нерд

    https://github.com/adafruit/RTClib
     
  4. Vetrinus

    Vetrinus Гик

    Добавьте до setup строку
    Код (C++):
    RTC_DS1307 RTC;
     
  5. iwizard7

    iwizard7 Нерд

    C:\Users\iwizard\Desktop\charger\charger.ino:4:20: fatal error: DS1307.h: No such file or directory

    #include <DS1307.h>

    ^

    compilation terminated.

    exit status 1
    Ошибка компиляции для платы Arduino/Genuino Uno.
     
  6. Vetrinus

    Vetrinus Гик

    Библиотека у вас не установлена.
     
  7. iwizard7

    iwizard7 Нерд

    Если подкидываю библиотеку DS1307 то вылазят новые ошибки
    Код (C++):

    C:\Users\iwizard\Desktop\charger\charger.ino: In function 'void setup()':

    charger:22: error: 'class RTC_DS1307' has no member named 'get'

       RTC.get(rtc,true);

           ^

    charger:31: error: 'class RTC_DS1307' has no member named 'SetOutput'

       RTC.SetOutput(DS1307_SQW32KHZ);

           ^

    charger:31: error: 'DS1307_SQW32KHZ' was not declared in this scope

       RTC.SetOutput(DS1307_SQW32KHZ);

                     ^

    C:\Users\iwizard\Desktop\charger\charger.ino: In function 'void loop()':

    charger:40: error: 'class RTC_DS1307' has no member named 'get'

      RTC.get(rtc,true);

          ^

    exit status 1
    'class RTC_DS1307' has no member named 'get'
     
     
  8. Vetrinus

    Vetrinus Гик

    Библиотека, которую вы установили не имеет методов get, SetOutput.
    Советую обратиться к автору скетча за ссылками на библиотеки, которые он использовал.
     
  9. fogary

    fogary Гик

    Код (C++):
    #include <DS1307.h>
    #include "RTClib.h"
    Две библиотеки для RTC - так и должно быть, или все же одна лишняя?