КТЦ для аккумуляторов

Primak
Offline
Зарегистрирован: 17.12.2016

Помогите пожалуйста ребят. Скетч не компилируется. Я чайник. Прибор очень нужен.

// 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);
}// Date and time functions using a DS1307 RTC connected via I2C and Wire lib
#include <EEPROM.h>
#include <Wire.h>
#include <DS1307.h>
#include <iarduino_RTC.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);
}

Ошибка Arduino: 1.6.12 (Windows 10), Плата:"Arduino Nano, ATmega328"

 
C:\Users\user\AppData\Local\Temp\untitled502477427.tmp\sketch_dec17a\sketch_dec17a.ino: In function 'void setup()':
 
sketch_dec17a:25: error: 'RTC' was not declared in this scope
 
   RTC.get(rtc,true);
 
   ^
 
sketch_dec17a:34: error: 'DS1307_SQW32KHZ' was not declared in this scope
 
   RTC.SetOutput(DS1307_SQW32KHZ);
 
                 ^
 
C:\Users\user\AppData\Local\Temp\untitled502477427.tmp\sketch_dec17a\sketch_dec17a.ino: In function 'void loop()':
 
sketch_dec17a:43: error: 'RTC' was not declared in this scope
 
  RTC.get(rtc true);
 
  ^
 
In file included from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:24:0,
 
                 from sketch\sketch_dec17a.ino.cpp:1:
 
sketch_dec17a:43: error: expected ')' before 'true'
 
  RTC.get(rtc true);
 
              ^
 
exit status 1
'RTC' was not declared in this scope
 
 
Genri5
Offline
Зарегистрирован: 31.05.2016

Для того что бы скампилировался нужно установить не достающие библиотеки.

Primak
Offline
Зарегистрирован: 17.12.2016

Несколько разных библиотек RTC устанавливал, результата нет. Я готов материально отблагодарить того кто найдет ошибку, просто скетч очень нужен.

renoshnik
Offline
Зарегистрирован: 11.04.2013
Primak
Offline
Зарегистрирован: 17.12.2016
// 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);
}

 

ratman
Offline
Зарегистрирован: 11.10.2015
RTC_DS1307 RTC; 

Куда нибудь в начало. Где переменные бъявляешь.

Primak
Offline
Зарегистрирован: 17.12.2016
Добавилось еще вот это. Не получается(((
'class RTC_DS1307' has no member named 'get'
ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Скетч под конкретную версию библиотеки DS1307 заточен, где данные с чипа получают в полном объёме и пишут в массив, или искать библиотеку или переписать под свою.

Если переписывать, то заложить основу и для управления током разрядки-зарядки, а библиотеки лучше как бы стандартные (Adafruit к примеру)

Primak
Offline
Зарегистрирован: 17.12.2016

Спасибо всем отозвавшимся. Поискав еще решения, наткнулся еще на несколько тем по этому скетчу. Нигде нет решения. В отчаянии даже связался с автором скетча. Его помощь тоже не помогла. Очень хотел сделать такой прибор. Жаль. Сдаюсь...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Primak пишет:

Спасибо всем отозвавшимся. Поискав еще решения, наткнулся еще на несколько тем по этому скетчу. Нигде нет решения. В отчаянии даже связался с автором скетча. Его помощь тоже не помогла. Очень хотел сделать такой прибор. Жаль. Сдаюсь...

И что сказал автор?
Рано сдаваться однако...
Я закинул проект в IDE и переделываю на другой таймер (какой у меня есть), но всё в вялотекущем, ещё введу разряд калиброванным током

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Primak пишет:

Нигде нет решения. В отчаянии даже связался с автором скетча. Его помощь тоже не помогла. Очень хотел сделать такой прибор. Жаль. Сдаюсь...

"Если ничего не помогает, прочтите, наконец, инструкцию!"

Может, взять дэйташит, да и написать самому все необходимое, а не искать готовое?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Это так по нашему - автор не знающий своё детище
(...алфавит подписал...)

Primak
Offline
Зарегистрирован: 17.12.2016

Чтобы сделать прибор для КТЦ мне нужно стать програмистом? Если следовать вашей логике, то все чем мы пользуемся нужно делать самому. На форуме по диагностике авто я бы вам тоже мог написать пару таких гневных "Прочтите инструкцию уже". Но я так никогда не делаю, потому что знаю, что все уметь и знать невозможно. А лучший способ показать что ты умный- это спокойно подсказать человеку. Чего вы делать даже и не собирались. 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Люблю новичков, которые приходят и учат, как надо себя вести...

Вам же уже подсказали:

ua6em пишет:

или искать библиотеку или переписать под свою

any more questions?

Primak
Offline
Зарегистрирован: 17.12.2016

ua6em пишет:

Primak пишет:

Спасибо всем отозвавшимся. Поискав еще решения, наткнулся еще на несколько тем по этому скетчу. Нигде нет решения. В отчаянии даже связался с автором скетча. Его помощь тоже не помогла. Очень хотел сделать такой прибор. Жаль. Сдаюсь...

И что сказал автор?
Рано сдаваться однако...
Я закинул проект в IDE и переделываю на другой таймер (какой у меня есть), но всё в вялотекущем, ещё введу разряд калиброванным током

Автор пообещал скинуть свои библиотеки. Жду. Если так, то это будет вообще готовый прибор))) Мне не редко приходится делать КТЦ вручную. То что предлагает автор, уже сильно облегчает работу, а если еще человеку выдать емкость его АКБ с точностью до мАч, то это будет верх))))

renoshnik
Offline
Зарегистрирован: 11.04.2013

Если просто цель измерить емкость, то такой алгоритм подойдет.

Если КТЦ с целью бороться с разбалансом, то лучше импульсный разряд (выкачка)..

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Primak, а что вы вцепились за этот скечт как за спасательный круг? Автор его не сильно лучше вас понимает в программировании, судя по коду он ещё вчера "мигал светодиодом".  Это видно по стилистике чайника, и по разного рода ошибкам, коих тут дофига. Не вздумайте повторять это, и уж тем более учиться по этому скетчу.

Primak
Offline
Зарегистрирован: 17.12.2016

dimax пишет:

Primak, а что вы вцепились за этот скечт как за спасательный круг? Автор его не сильно лучше вас понимает в программировании, судя по коду он ещё вчера "мигал светодиодом".  Это видно по стилистике чайника, и по разного рода ошибкам, коих тут дофига. Не вздумайте повторять это, и уж тем более учиться по этому скетчу.

Этот прибор, будь он рабочим, меня бы полностью устроил. Все модули я под него заказывал на али. Других, подобных скетчей я не нашел. Сам написать скетч не смогу ( я пробовал учиться, диодом моргал, серву двигал и т. п.), не мое это. Что мне остается делать? Только обратиться к вам...

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

У меня есть готовый заводской прибор, в нём реализовано:
1. Определение ёмкости АКБ 2. Ускоренный заряд 3. Стандартный заряд 4. Тренировка 5. Восстановление

Поэтому быстро точно не получится, будет что-то своё, а по коду  Дмитрий уже высказался, там мешанина что в коде что в голове его писавшей

Исходя из этого - новый прибор должен уметь делать что-то еще, к примеру восстановление методом переполюсовки )))

Primak
Offline
Зарегистрирован: 17.12.2016

renoshnik пишет:

Если просто цель измерить емкость, то такой алгоритм подойдет.

Если КТЦ с целью бороться с разбалансом, то лучше импульсный разряд (выкачка)..

Цель: Измерить емкость автомобильного АКБ. Я ставлю лампочку на 60 ватт и бегаю, ловлю момент, когда напряжение станет 10,5в. Считаю время разряда, умножаю на среднее 5 А и получаю емкость АКБ. Поможет мне прибор? Я думаю очень поможет.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Primak, вам остаётся купить готовый, благо их сейчас в ассортименте. При любых раскладах это лучший вариант. Если прямо очень хочется своими руками сделать -ищите нормальный код, даже на нашем форуме уже штук пять подобных зарядо-разрядников публиковалось. Когда-то я сам был нолём в программировании,  находил готовые схемы, программы и прошивки, читал отзывы, и делал устройства, в том числе и зарядники кстати. Есть масса сайтов, гда такого добра навалом -радиокот, паяльник, итп.