На головну сторінку Аквафорум
На головну сторінку




Назад   Аквафорум - форум акваріумістів та тераріумістів > Акваріум та обладнання > "Самоделкин" > Аквариумная автоматика
Аукцион Реєстрація ЧаПи Учасники Календар Нинішні дописи

Примітки

 
 
Параметри теми Параметри перегляду
Prev Попередній допис   Наступний допис Next
Старий 01.11.2018, 21:02   #10
Придивляюся
  
 
Реєстрація: 08.07.2018
Звідки Ви: Суми
Дописи: 16
сказав Дякую: 12
сказали Дякую 5 раз(и) в 3 повідомленні
Відповідь: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===

Є корекція через меню!
Наскільки я розібрався з EEPROM, в адреси з 0 до 4 записуються загальні параметри:
ledContrast, ledLight, температура води, мінімальні оберти кулера, максимальні оберти кулера. А далі Alarm починається з 100-го байта. Тобто від 5 до 99 все вільно.
Оскільки корекція може бути зі знаком + або -, то нам підходить змінна типу int, а вона займає 2 байти. Отже використаю для неї байти 5 та 6.
Вся процедура вийшла розмазаною по коду, буду показувати step by step.

Замість #define CorrTime -8
//#define CorrTime -8 // коррекция хода системных часов [Сек]
int CorrTime = -8; // або 0 або скільки треба

тут же або нижче, але до void setup() вставимо:

byte highb;
byte lowb;


EEPROM може бути забитий чим завгодно, наприклад 255. Два байти разом дадуть 32767. Кнопками міняти буде ду-у-у-уже довго. Для того щоб виставити швидко 0 або кілька секунд, при першому завантаженні скетчу розкоментуйте цю пару рядків, що додайте у блок // Init EEPROM

// EEPROM.write(5, highByte(CorrTime)); // set for first time
// EEPROM.write(6, lowByte(CorrTime));

після
maxCool = EEPROM.read(4); // максимальные обороты для охлаждения воды
вставимо:

highb = EEPROM.read(5);
lowb = EEPROM.read(6);
CorrTime = word(highb,lowb);


Спускаємось до приблизно 350 рядка де знаходимо
byte menu_hh;
byte menu_mi;

і додаємо:

int menu_cor;

Спускаємось по коду аж до блоку
case 131: // nastroika sistema ------
Після menu_mi = time.min;
і перед break;
вставляємо:
menu_cor = CorrTime;

Тепер основна частина в блоці case 1311: // Time -------

Мабуть приведу цей блок повністю з виділеними вставками:

case 1311: // Time -----------------------------------------------------------------
{
myGLCD.setFont(SmallFont);
myGLCD.clrScr();

myGLCD.print("wremq",1,0);
myGLCD.print("korr.",1,35);
myGLCD.print(rtc.getTimeStr(FORMAT_SHORT),RIGHT,0) ;
myGLCD.drawLine(0,8,83,8);
myGLCD.drawLine(0,9,83,9);
if((cur_item == 1)&&cur_item_edit)
myGLCD.invertText(true);
myGLCD.printNumI(menu_hh,26,20,2,'0');
myGLCD.invertText(false);
myGLCD.print(":",39,20);
if((cur_item == 2)&&cur_item_edit)
myGLCD.invertText(true);
myGLCD.printNumI(menu_mi,46,20,2,'0');
myGLCD.invertText(false);
if((cur_item == 3)&&cur_item_edit) // my add
myGLCD.invertText(true); //
myGLCD.printNumI(menu_cor,35,35,2,'0'); //
myGLCD.invertText(false); //


if(cur_item == 1)
myGLCD.drawRoundRect(25,18,39,28);
if(cur_item == 2)
myGLCD.drawRoundRect(45,18,59,28);
if(cur_item == 3) // my add
myGLCD.drawRoundRect(34,33,58,42); //


switch(key){
case BUTTON_UP:
if(!cur_item_edit){
cur_item--;
if(cur_item < 1)
cur_item = 3;
}else{
if(cur_item == 1){
menu_hh++;
if(menu_hh == 24)
menu_hh = 0;
}
if(cur_item == 2){
menu_mi++;
if(menu_mi == 60)
menu_mi = 0;
}
if(cur_item == 3){
menu_cor++;
}

}
break;
case BUTTON_DOWN:
if(!cur_item_edit){
cur_item++;
if(cur_item > 3)
cur_item = 1;
}else{
if(cur_item == 1){
if(menu_hh == 0)
menu_hh = 23;
else
menu_hh--;
}
if(cur_item == 2){
if(menu_mi == 0)
menu_mi = 59;
else
menu_mi--;
}
if(cur_item == 3){
menu_cor--;
}

}
break;
case BUTTON_OK:
if(cur_item_edit){
switch(cur_item){
case 1:
rtc.setTime(menu_hh, time.min, 0); // Set the time to 12:00:00 (24hr format)
break;
case 2:
rtc.setTime(time.hour, menu_mi, 0); // Set the time to 12:00:00 (24hr format)
break;
case 3:
CorrTime = menu_cor;
EEPROM.write(5, highByte(CorrTime)); // correction value in seconds
EEPROM.write(6, lowByte(CorrTime));
break;

}
cur_item_edit = false;
}else
cur_item_edit = true;
break;
case BUTTON_CANCEL:
cur_item_edit = false;
cur_menu = 131;
cur_item = 1;
break;
}
myGLCD.update();
break;
}

Ось і все. Тепер в меню де виставляється час, додалась можливість виставити корекцію.
Думаю, що зрозуміло виклав. Будуть питання - велкам

Ant0ny поза форумом   Відповісти з цитуванням


Share/Bookmark

 

Мітки
arduino, акваконтроллер


Тут присутні: 1 (учасників - 0 , гостей - 1)
 

Ваші права у розділі
Ви не можете створювати теми
Ви не можете писати дописи
Ви не можете долучати файли
Ви не можете редагувати дописи

BB-код є Увімк.
Усмішки Увімк.
[IMG] код Увімк.
HTML код Вимк.

Швидкий перехід


Часовий пояс GMT +3. Поточний час: 01:14.


vBulletin 3.8.7 ; Copyright © 2000-2025 Jelsoft Enterprises Limited
Переклад: © Віталій Стопчанський, 2004-2010
(с)Бешлега Олександр Анатолійович, 2002-2025. Використання матеріалів сайту без посилання на джерело заборонено.
Дякуємо за ліцензійну версію форума компанію Барбус, представника торгової марки Sera в Україні.


no new posts