 |
21.03.2017, 09:33
|
#1
|
Живу я тут
Реєстрація: 10.10.2015
Звідки Ви: Дома
Дописи: 153
сказав Дякую: 20
сказали Дякую 33 раз(и) в 25 повідомленні
|
Re: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===
ya7sergey Вы внимательно, хорошенько всё обдумайте и потом может поймёте что в этом коде всё сделано по уму. Как вариант, старт контроллера после отключения электроэнергии, а вас дома нет, в коде как раз сделано так что запустится фильтр и компрессор, свет при вашем отсутствии и после простоя оборудования не важен, так же если вдруг произойдет отключение среди ночи потом после включения электроэнергии вам нужен не слабый торшер в виде аквариума посреди ночи? Ну а вообще в коде можно всё переколбасить на своё хочу но там ещё раз повторюсь всё и так умно подогнано как для основных функций контроллера.
|
|
|
21.03.2017, 11:07
|
#2
|
Живу я тут
Реєстрація: 31.07.2010
Звідки Ви: Белоруссия, Гомель
Дописи: 413
сказав Дякую: 38
сказали Дякую 192 раз(и) в 87 повідомленні
|
Re: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===
Цитата:
Допис від Витенька
ya7sergey Вы внимательно, хорошенько всё обдумайте и потом может поймёте что в этом коде всё сделано по уму. Как вариант, старт контроллера после отключения электроэнергии, а вас дома нет, в коде как раз сделано так что запустится фильтр и компрессор, свет при вашем отсутствии и после простоя оборудования не важен, так же если вдруг произойдет отключение среди ночи потом после включения электроэнергии вам нужен не слабый торшер в виде аквариума посреди ночи? Ну а вообще в коде можно всё переколбасить на своё хочу но там ещё раз повторюсь всё и так умно подогнано как для основных функций контроллера.
|
По уму это когда контроллер восстанавливает свое состояние к моменту включения с учетом изменившихся параметров (времени, температуры, ПШ и.т.п.) все остальное это от лукавого. Что касается текущего проекта, открываем скетч и смотрим, сразу в Setup(). Из настроек восстанавливаются :
aquaT = EEPROM.read(2); // Требуемая температура воды
minCool = EEPROM.read(3); // минимальные обороты кулера для вентиляции крышки и охлаждения ламп
maxCool = EEPROM.read(4); // максимальные обороты для охлаждения воды
Простите а каналы? Изначально они забиваются ВКЛ\ВЫКЛ программно!!! Т.е. я жестко привязан к номеру розетки... А таймеры? А прочие настройки? А если начать читать код, то что-то поправить там это просто ппц...Как писали выше он не читаемый, тут месяц только рефакторить нужно будет. Эти магические цифры в адресах, если ТС попросить через полгода что-то поправить я уверен что это будет с таким скрипом происходить и с таким количеством багов, что проще заново написать... И судя по тому что в скетче уже более 1700 строк то место для прошивки там уже не особо много осталось, и если вкидывать еще код который доведет до ума все о чем вы пишите то не факт что оно влезет в кристалл ИМХО.
|
|
|
21.03.2017, 11:37
|
#3
|
Придивляюся
Реєстрація: 09.02.2017
Звідки Ви: Samara
Дописи: 22
сказав Дякую: 8
сказали Дякую 1 раз(и) в 1 повідомленні
|
Re: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===
Цитата:
Допис від AquaGomel
По уму это когда контроллер восстанавливает свое состояние к моменту включения с учетом изменившихся параметров (времени, температуры, ПШ и.т.п.) все остальное это от лукавого. Что касается текущего проекта, открываем скетч и смотрим, сразу в Setup(). Из настроек восстанавливаются :
aquaT = EEPROM.read(2); // Требуемая температура воды
minCool = EEPROM.read(3); // минимальные обороты кулера для вентиляции крышки и охлаждения ламп
maxCool = EEPROM.read(4); // максимальные обороты для охлаждения воды
Простите а каналы? Изначально они забиваются ВКЛ\ВЫКЛ программно!!! Т.е. я жестко привязан к номеру розетки... А таймеры? А прочие настройки? А если начать читать код, то что-то поправить там это просто ппц...Как писали выше он не читаемый, тут месяц только рефакторить нужно будет. Эти магические цифры в адресах, если ТС попросить через полгода что-то поправить я уверен что это будет с таким скрипом происходить и с таким количеством багов, что проще заново написать... И судя по тому что в скетче уже более 1700 строк то место для прошивки там уже не особо много осталось, и если вкидывать еще код который доведет до ума все о чем вы пишите то не факт что оно влезет в кристалл ИМХО.
|
Согласен с вами на все 100% с первой до последней буквы. За исключением одного: размер кода меня не особо волнует. У меня проект портирован на Мегу2560. Не благодарное это дело, перепиливать чужой код, да еще на столько глобально...
|
|
|
21.03.2017, 12:01
|
#4
|
Живу я тут
Реєстрація: 31.07.2010
Звідки Ви: Белоруссия, Гомель
Дописи: 413
сказав Дякую: 38
сказали Дякую 192 раз(и) в 87 повідомленні
|
Re: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===
Цитата:
Допис від ya7sergey
Согласен с вами на все 100% с первой до последней буквы. За исключением одного: размер кода меня не особо волнует. У меня проект портирован на Мегу2560. Не благодарное это дело, перепиливать чужой код, да еще на столько глобально...
|
Даже больше скажу, чуток поковырявшись по коду, нашел какие-то команды на восстановление чего-то куда-то... Но они разбросаны по всему коду, в каждом методе есть записи по типу
EEPROM.write(alertAdr+1,((EEPROM.read(alertAdr+1)& B00011111)^(curLoad<<5))); // сохраняем номер нагрузки Но даже если учесть что все же что-то и сохраняется и восстанавливается, то просто понять что и куда не реально... И проблема связана с просто с ошибкой, то легче от этого не становиться.
Далее в коде четко привязка к свету, кулерам, нагревателям и.т.п. Это в корне не верно, есть 8 каналов (наверное) и не должно быть никаких указателей на то что висит на этих каналах. У каждого конфигурация аквариума разная, и получается что у кого-то свет занимает 4 канала а у кого-то 1.
Команды включения и выключения
digitalWrite(EXT_HEATER_PIN, HIGH);
digitalWrite(EXT_HEATER_PIN, LOW);
В каждом методе по 20 штук. Как это все дебажить? Как определить где что включает где что выключает?
// перечеркиваем не активные таймера
if(!(EEPROM.read(offf+(j-1)*4)&B10000000)){
myGLCD.drawLine(0,vy+5,83,vy+5);
}
Осмысленные константы вообще не используются. Т.е. выражение не несет никакой смысловой логики для тех кто будет читать этот код пытаясь его править. + В проекте используются куски стороннего кода, который просто где-то был взят к примеру метод float getTemp(), в котором уже есть нормальный подход к написанию кода с комментариями. Если перед глазами есть пример как надо, можно же было привести остальной проект к такому же виду?
Так можно продолжать бесконечно. Конечно можно сказать что это чей-то труд, что человек потратил время и.т.п. Это все понятно. Если это все грамотно работало бы, и человек выложил тупо hex файл, который все прошили нашли ошибки отписали в обратку, ТС исправил и все довольны. Но тут лежит исходник, я так понимаю предлагается исправлять ошибки всем тем кто хочет повторить этот контроллер.... ИМХО но это нереально! Прошу прощение если задел чьи-то чувства и испортил настроение, я не хотел.
|
|
|
21.03.2017, 13:29
|
#5
|
Бан за нарушения
Реєстрація: 13.05.2016
Звідки Ви: Глобино
Дописи: 145
сказав Дякую: 37
сказали Дякую 54 раз(и) в 32 повідомленні
|
Re: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===
AquaGomel, спокойствие, только спокойствие 
Мы сами так писали пару лет назад, я так точно  Потом после пары книжек у меня настало просветление и всё равно местами мне мой код не нравится, хочется его сделать более компактным и лаконичным.
Витенька, как я писала выше, интерес и возможности могут быть только у автора текста  Всем остальным это головная боль не нужна.
__________________ 
|
|
|
22.03.2017, 12:36
|
#6
|
Живу я тут
Реєстрація: 11.07.2013
Звідки Ви: Киев (Борщаговка)
Дописи: 665
сказав Дякую: 106
сказали Дякую 535 раз(и) в 244 повідомленні
|
Re: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===
AquaGomel, Машенька и все.
По поводу читабельности и кода и т.д. - без комментариев.
по поводу восстановления состояния каналов и.д.
В коде не заложена возможность восстановления состояния.
Как по мне идея не правильна.
Свет отключился днем (подавали СО2) - допустим электричество отсутствовало 2 дня и появилось ночью - в банке недостаток кислорода, а мы восстановим работу каналов и добавим туда СО2 - что на выходе?
Именно по этому он работает так как работает - и я спокойно уезжаю на 2 недели и не переживаю.
я не продаю контроллер - сделал для себя под свои нужды, выложил свои наработки в том виде как есть, так что критика только по делу - или предложите улучшения.
Если хочется сделать восстановление параметров на текущее время
Все просто прогоните в цикле обработчик событий за последние 24 часа до текущего времени.
Этот вариант также позволит не портить ЕЕПРОМ (там ограниченное количество циклов)
По поводу личного участия в переработке
к сожалению не планирую - много работы - а контроллер устраивает на все 100%
Одно могу сказать возможно в ближайшие месяцы будет новый проект контроллера для морского аквариума с LED светом, а это проект у меня трудится на пресняке и пока дорабатываться не будет.
Будет новый OLED экран но парадигма проекта сохранится - максимум удовольствия за 3 копейки 
|
|
|
Ці 2 користувач(ів) сказали Дякую AlexVOK за це повідомлення:
|
|
22.03.2017, 13:27
|
#7
|
Живу я тут
Реєстрація: 10.10.2015
Звідки Ви: Дома
Дописи: 153
сказав Дякую: 20
сказали Дякую 33 раз(и) в 25 повідомленні
|
Re: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===
Цитата:
Допис від AlexVOK
Одно могу сказать возможно в ближайшие месяцы будет новый проект контроллера
|
Ждёмс с нетерпением! 
|
|
|
22.03.2017, 14:03
|
#8
|
Бан за нарушения
Реєстрація: 13.05.2016
Звідки Ви: Глобино
Дописи: 145
сказав Дякую: 37
сказали Дякую 54 раз(и) в 32 повідомленні
|
Re: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===
AlexVOK, зачем подавать ночью СО2 когда нет света?
Много чего хотела написать, но я поняла что это всё недоработки или непонимания сути программирования или происходящих процессов, но тут как вы говорили - без комментариев
Но в описании необходимо указываться недоработки или слабые места, потому что люди покупают детали, собирают, тратят время и деньги, а в итоге получают то, что сложно назвать полноценным акваконтроллером, потому что он даже пропажу электроэнергии не может пережить, а если уже боятся использовать ЕЕPROM, что бы он бедняжка не устал, то может и кристалл не нагружать, а то вдруг перетрудится 
__________________ 
Востаннє редагував mashenkaM: 22.03.2017 о 14:12..
Причина: погорячилась
|
|
|
22.03.2017, 14:23
|
#9
|
Живу я тут
Реєстрація: 11.07.2013
Звідки Ви: Киев (Борщаговка)
Дописи: 665
сказав Дякую: 106
сказали Дякую 535 раз(и) в 244 повідомленні
|
Re: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===
mashenkaM, c удовольствием посмотрим на Ваше решение
С правильно структурированным, форматированным, коментированным кодом.
а по поводу подачи СО2 ночью
я показал, что нельзя сохранять состояния и потом просто их восстанавливать на старте. Только и всего.
AQUAPLANNER, bt 139 использую достаточно часто.
до 100-150Вт без радиатора вполне применимо,
Данный контроллер как раз управляет грелкой 300Вт
радиатор алюминиевая пластинка примерно 6х4 см холодная
Так что использовать вполне можно
|
|
|
22.03.2017, 17:06
|
#10
|
Живу я тут
Реєстрація: 31.07.2010
Звідки Ви: Белоруссия, Гомель
Дописи: 413
сказав Дякую: 38
сказали Дякую 192 раз(и) в 87 повідомленні
|
Re: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===
По поводу логики работы устройства, еще раз подробно расскажу почему такой подход в корне не верен. Во первых такой программной логикой вы заставляете пользователей привязывать свое оборудование к конкретной розетке. Т.е. как я писал выше легко может быть ситуация что у человека нет компрессора, зато есть дополнительная галогенная лампа на 300W к примеру. Которую ему из-за того что все розетки заняты приходится воткнуть в ту розетку которая включается автоматически. Результат отключения ночью света думаю не надо объяснять?
Далее что бы не было вот таких вот условий и привязок к каналам оборудования, всего-лишь нужно было сделать проверку состояния таймеров при включении контроллера. Т.е. к примеру пропал у вас свет, а в это время у вас работал СО2, прошло, как вы сказали какое-то время, и к примеру ночью свет появился. После этого на старте контроллера (в методе Setup()) мы делаем проверку по времени, температуре, ПШ, еще чего-то... И если согласно заданным условиям таймеров и других настроек, у вас канал должен быть включен или выключен, помечаем его как включенный или выключенный (я вам даже больше скажу, нужно помечать кем он был включен, каким таймером, или температурой или ПШ, это важно!!!), далее в цикле (loop()) мы просто проверяем, состояние этого канала, и в отдельном методе включаем или выключаем его. У вас никогда не будет зависимости работы канала от того когда выключился и когда включился контроллер. Далее должен быть приоритет включения выключения/выключения канала, потому как может быть ситуация когда вы к примеру можете назначить на канал включение по таймеру и по температуре, у вас будут замерзать рыбы потому как один таймер будет конфликтовать с другим и.т.п. Все эти мелочи нужно стараться учесть, причем учесть так что бы пользователь получил максимальную эффективность, от вашего устройства. К сожалению в данном примере кода это уже практически не реально сделать. А так как вы насколько понял делаете новый контроллер то у вас есть все шансы, написать код правильно!!! Просто прислушайтесь к советам. Я ни сколько не критикую ваш проект, тем более что вам удалось его довести до стадии когда люди повторяют его. Это уже отличный показатель успеха. Но все остальное сводит на нет его.
|
|
|
22.03.2017, 17:35
|
#11
|
Бан за нарушения
Реєстрація: 13.05.2016
Звідки Ви: Глобино
Дописи: 145
сказав Дякую: 37
сказали Дякую 54 раз(и) в 32 повідомленні
|
Re: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===
AquaGomel, Вы не много перегибайте, все мы делаем и пишем контроллеры в первую очередь для себя!!! И делаем всё так как удобно и выгодно именно для своей конфигурации. Те кто делают из этого бизнес, те заботятся об универсальности и т.д..
Но не мы, да и это не нужно, если мне нужен один канал для лент светодиодов, то я буду делать только один, и мне без разницы что у кого то 4 канала + ночная подсветка, или дозаторы удо - это не моя головная боль...
Поэтому самые простые контроллеры типа как у Сергій М просты и подходят большинству, но как только начинают появляться дополнительные фишки универсальность сразу падает.
Живой пример это подключение нескольких датчиков температуры, да шина 1-Wire позволяет подключить около 100 таких датчиков на один выход, но обращение к ним происходят по адресам, для себя я могу себе такое позволить, я в любой момент заменю сгоревший датчик и пропишу его новый адрес в код, когда 4 датчика это экономия 3 выходов. Но для публики которая не понимает в программировании нужно отдельно втыкать каждый датчик в отдельный выход.
Но суть вашего сообщения поддерживаю, каждый блок нужно дописывать до конца и ума, просчитывая все варианты развития событий, так что бы ни когда к нему не возвращаться.
P.S.: Всё не терпится посмотреть ваш код Ардуинки  Может есть какие интересные подходы у Вас ...
__________________ 
|
|
|
21.03.2017, 11:52
|
#12
|
Бан за нарушения
Реєстрація: 13.05.2016
Звідки Ви: Глобино
Дописи: 145
сказав Дякую: 37
сказали Дякую 54 раз(и) в 32 повідомленні
|
Re: Простой акваконтроллер ARDUINO ===www.aquaforum.ua===
Цитата:
Допис від AquaGomel
И судя по тому что в скетче уже более 1700 строк то место для прошивки там уже не особо много осталось, и если вкидывать еще код который доведет до ума все о чем вы пишите то не факт что оно влезет в кристалл ИМХО.
|
Ну это уже следующая ступень просветления!
У меня код для НАНО составляет где то 6000+ строк (2000+ их них или больше это код многоуровневого меню)
В какой то момент у меня просто закончилась оператива, а сколько ещё всего хотелось... Вот тогда я начала перерезать и оптимизировать код где только можно. Код в 100 строк превращался в 60 и изменялись области видимости переменных. В общем из загрузки в 90% оперативы получилось 55%, а размер самой программы тоже уменьшился процентов на 20-30.
НО для ATmega2560 самое интересное, что частоты кристалла, размер оперативы и флешки хватает что бы НЕ оптимизировать код.
Жаль что это всё нужно будет разбирать, потому что хочу собрать всё на ESP8266 и экран с меня уже не нужен будет, зато написанные библиотеки для датчиков и таймеров будут работать и дальше, на то они и библиотеки 
__________________ 
|
|
|
 |
Тут присутні: 1 (учасників - 0 , гостей - 1)
|
|
Ваші права у розділі
|
Ви не можете створювати теми
Ви не можете писати дописи
Ви не можете долучати файли
Ви не можете редагувати дописи
HTML код Вимк.
|
|
|
Часовий пояс GMT +3. Поточний час: 10:47.
|