Кодим вместе для Arduino - Аквафорум - форум аквариумистов и террариумистов


На сайт Всеукраинской Ассоциации аквариумистов
На главную страницу форума



 


Вернуться   Аквафорум - форум аквариумистов и террариумистов > Аквариум и оборудование > "Самоделкин" > Аквариумная автоматика
Аукцион Регистрация Дневники Справка Пользователи Календарь Поиск Сообщения за день Все разделы прочитаны

Важная информация

Ответ
 
Опции темы Опции просмотра
Старый 19.04.2016, 18:57   #1
Кодим вместе для Arduino
Бан за нарушения

Регистрация: 26.10.2009
Адрес: Аккаунт удалён
Сообщений: 2,901
 

Поблагодарил(а) : 865
Поблагодарили 1,541 раз(а) в 857 сообщениях
Записей в дневнике: 2
OrcSin OrcSin поза форумом 19.04.2016, 18:57
Рейтинг: ()

В этой теме предлагают обсуждать, советоваться и делится наработками фрагментов кода, подходами, методами и приёмами программирования для Arduino.
Большинство из тех кто собрал на форуме свои акваконтролеры самоучки как и Я.

При программировании для Arduino я встретил множество проблема и задач, некоторые перечислю, надеюсь кому то тоже интересно это как и мне.

1. При работе с простыми бюджетными экранами (1602, 2004, LCD NOKIA и другие) возникает одна из не приятнейших проблем, особенно для новичков - это отсутствие интерфейса пользователя (UI). Arduino не знает таких понятий как кнопка, лейбл, текстовое поле и меню. А обычно акваконтролер имеет минимум 5 "виртуальных экранов". И каждому разработчику приходится самому прописывать каждый экран до мелочей и потом научить дружить между собой эти все экраны. Методов много, но зачастую каждое изменение такого меню влечёт большие временные затраты, так как ломается вся система. Поэтому взять чужой метод не так уж и легко, зачастую всегда проще написать свой новый.

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

3. Большой размер кода - со временем ваша программа разрастается за 2000 строк и вы сами через пару недель начинаете теряться в этом коде и делать всё больше ошибок или вобще ни чего не понимать. Тут мне очень помогло прочтение книги "Чистый код"(не помню автора). В ней описывались примеры как правильно писать код и его оформлять. Соблюдая эти правила код даже спустя месяца читается чуть ли не ночью спросонья. К сожалению этим методом я до конца не овладел.

4. Так же со временем ваш код начинает приобретать критический размер (заканчивается память на контроллере), а вы ещё не до конца сделали что хотели. Зачастую большую часть памяти вашего скетча "пожирают" библиотеки. Тут выхода три или оптимизация кода, или подрезать лишнее из библиотек, так как они универсальны и половиной кода вы можете просто не пользоваться, но делать это надо умеючи и понимаючи и третий вариант - расширение памяти, но это уже борьба с последствиями, а не с причиной.

5. Библиотеки - пункт тесно связанный с п.4 и п.5. Очень полезная штука. Когда код начинает разрастаться или вы пишите разные версии или под разные устройства удобно создавать библиотеки. То есть часть кода которая часто используется переносится в библиотеку, которую вы можете подключить к любой своей программе или даже поделится с другими людьми. И ещё очень большой плюс, что больше не видите эту часть кода в своей программе и не боитесь туда поселить новую ошибку.

Вобщем давайте делится опытом.
Просмотров: 3264
Ответить с цитированием
3 пользователей поблагодарили OrcSin за данный пост:
GreenD (19.04.2016), myprog (06.01.2017), Сергій М (19.04.2016)
Старый 19.04.2016, 19:12   #2
Бан за нарушения
  
 
Регистрация: 26.10.2009
Адрес: Аккаунт удалён
Сообщений: 2,901
Поблагодарил(а) : 865
Поблагодарили 1,541 раз(а) в 857 сообщениях
Записей в дневнике: 2
Re: Кодим вместе для Arduino ===www.aquaforum.ua===

Начнём, у многих в акваконтролерах имеются по несколько датчиков температуры, код считывания температуры не очень то и мал, около 15 строк, если добавить туда всякие проверки времени и т.д. получается до 30 строк. на 4 датчика это 120 строк.
По сути нельзя допускать повторяющийся код, а это 4 повтора, готовых библиотек не встречал, но пробовал писать, что то не получается и надо разбираться в тонкостях. Но согласитесь было бы удобно 30 строк заменить одной и использовать где угодно.
Может кто то уже такое сделал?

OrcSin поза форумом   Ответить с цитированием
Старый 20.04.2016, 18:03   #3
Бан за нарушения
  
 
Регистрация: 26.10.2009
Адрес: Аккаунт удалён
Сообщений: 2,901
Поблагодарил(а) : 865
Поблагодарили 1,541 раз(а) в 857 сообщениях
Записей в дневнике: 2
Re: Кодим вместе для Arduino ===www.aquaforum.ua===

Не знаю почему не нашёл раньше, а может бросил искать но есть очень обширная библиотека DallasTemperature.h.
Мне начинает казаться, что библиотеки не полностью компиляться с программой, а только нужные кусочки кода. И может не нужно трогать готовые либы и обрезать их с целью экономии.

OrcSin поза форумом   Ответить с цитированием
Старый 06.01.2017, 13:38   #4
Живу я тут
  
 
Аватар для AquaGomel
 
Регистрация: 31.07.2010
Адрес: Белоруссия, Гомель
Сообщений: 256
Поблагодарил(а) : 26
Поблагодарили 141 раз(а) в 58 сообщениях
Отправить сообщение для AquaGomel с помощью ICQ Отправить сообщение для AquaGomel с помощью Skype™
Re: Кодим вместе для Arduino ===www.aquaforum.ua===

Цитата:
Сообщение от OrcSin Посмотреть сообщение
Не знаю почему не нашёл раньше, а может бросил искать но есть очень обширная библиотека DallasTemperature.h.
Мне начинает казаться, что библиотеки не полностью компиляться с программой, а только нужные кусочки кода. И может не нужно трогать готовые либы и обрезать их с целью экономии.
Правильно кажется, компилятор не включает в сборку те методы и переменные которые не задействованы в коде (на них нет ссылок). Однако бездумно пихать все либы в подряд в скетч не есть хорошо. Иногда лучше писать самому руками. В частности рисовать свое меню экономически более выгоднее относительно размера скетча чем использовать сторонние решения. ИМХО из моей практики...

AquaGomel поза форумом   Ответить с цитированием
Старый 06.04.2017, 11:51   #5
Живу я тут
  
 
Аватар для AquaGomel
 
Регистрация: 31.07.2010
Адрес: Белоруссия, Гомель
Сообщений: 256
Поблагодарил(а) : 26
Поблагодарили 141 раз(а) в 58 сообщениях
Отправить сообщение для AquaGomel с помощью ICQ Отправить сообщение для AquaGomel с помощью Skype™
Re: Кодим вместе для Arduino ===www.aquaforum.ua===

Возможно кому-то будет полезна сия информация. Есть такая IDE для Ардуинки (и для ESP) как Sloeber. Это штатный Эклипс с прикрученными к нему плагинами. В принципе вещь достаточно удобная. Но капризная. У него свои папки для хранения либ и платформ. Плюс ко всем у него немного другая структура хранения библиотек, поэтому приходится немного менять структуру папок у скачанных библиотек. Но это все лирика. Для сборок я им практически не пользовался, так как тоже возникают ошибки на ровном месте, где стандартная IDE от Arduino спокойно собирает проекты. Так вот юзал я его чисто как редактор. А компилил в стандартной IDE. Пока в один прекрасный момент не увидел вот такую вот настроечку:



Собрав предварительно билд в стандартной IDE получил размер hex:


А затем в Sloeber:


Вот как-то так....
Миниатюры
Нажмите на изображение для увеличения
Название: Screenshot_1.png
Просмотров: 176
Размер:	21.4 Кб
ID:	590500   Нажмите на изображение для увеличения
Название: Screenshot_2.png
Просмотров: 109
Размер:	5.2 Кб
ID:	590506   Нажмите на изображение для увеличения
Название: Screenshot_3.png
Просмотров: 128
Размер:	5.8 Кб
ID:	590507  

AquaGomel поза форумом   Ответить с цитированием
Пользователь, который поблагодарил AquaGomel за данный пост:
mashenkaM (06.04.2017)
Реклама помогает развиваться
Старый 06.04.2017, 14:14   #6
Живу я тут
  
 
Регистрация: 15.04.2016
Адрес: Киев
Сообщений: 280
Поблагодарил(а) : 59
Поблагодарили 65 раз(а) в 50 сообщениях
Re: Кодим вместе для Arduino ===www.aquaforum.ua===

Цитата:
Сообщение от OrcSin Посмотреть сообщение
на 4 датчика это 120 строк.
По сути нельзя допускать повторяющийся код, а это 4 повтора, готовых библиотек не встречал, но пробовал писать, что то не получается и надо разбираться в тонкостях. Но согласитесь было бы удобно 30 строк заменить одной и использовать где угодно.
Может кто то уже такое сделал?
Ардуино пашет на какойто Си подобной штуке.
То, что вы описываете называется функцией. Можно так же в ооп стиле написания использовать классы.
Для языка Python функция выглядит так:
def add(x, y):
return x + y

потом можно вызывать функцию и передавать в нее значения переменных:
add(1, 10)
функция выведет результат: 11

ООП вариант уже сложнее для восприятия и нужно намного дольше вникать и весь код писать желательно тогда в ооп.

Таким образом с использованием функций легче всего засунуть одинаковый функционал без повторений в код. Кроме того можно вызывать функцию внешним файлом, опять таки не знаю как это выглядит в си. Грубо у Вас основная программа может состоять из подключаемых модулей типо библиотек с нужными кусками кода и логикой их работы, т.е. готовый функционал для работы датчика будет находиться в отдельном файле и работать по аналогии с библиотеками. Сам костяк программы будет обращатся к этому файлу и передавать в функцию\класс данные и получать назад результат относительно которого уже будет происходить дальнейший сценарний.

К сожалению до изучения Arduino и Си все еще не добрался, а лежит уже пару лет(готовые модули стоят денег, а паять руки не стоят и електротехнику не знаю).


Цитата:
Сообщение от OrcSin Посмотреть сообщение
Мне начинает казаться, что библиотеки не полностью компиляться с программой, а только нужные кусочки кода. И может не нужно трогать готовые либы и обрезать их с целью экономии.
Опять таки в других языках можно подключать не всю либу, а только используемые Вами функции или классы. Например если есть билбиотека в которой есть 20 функция для работы с сервоприводом, а вам нужна только функция которая будет осуществлять поворот сервопривода только влева, то незачем подключать всю библиотеку, можно подключить только функцию отвечающюю за поворот СП влево. Но опять таки специфики работы Си я не знаю, возможно компилятор сам обрабатывает это таким же образом) Думаю можете найти интересующие Вас материалы в книгах\профильных статьях про програмирование.

А вообще хорошая тема) Надо будет сервопривод купить, давно хотел сделать автокормушку для малька)


Последний раз редактировалось Maryen; 06.04.2017 в 16:08..
Maryen поза форумом   Ответить с цитированием
Старый 06.04.2017, 18:18   #7
Бан за нарушения
  
 
Регистрация: 13.05.2016
Адрес: Глобино
Сообщений: 147
Поблагодарил(а) : 37
Поблагодарили 54 раз(а) в 32 сообщениях
Re: Кодим вместе для Arduino ===www.aquaforum.ua===

Пишу код в Notepad++, через Arduino IDE, там есть функция использовать внешний редактор. То есть пишите в Notepad++, сохраняете и Arduino IDE компилирует уже обновлённый код.
Notepad++ есть хорошая функция форматирования и подсветки синтаксиса. Не хватает только функции обнаружения ошибок синтаксиса.
Сколько пыталась использовать Еклипс, причём на линуксе, столько раз испытывала чувство какой то недоделанности.

А по поводу температуры я написала для себя библиотеку, работает как с датчиками на отдельных выходах, так и с несколькими на одном выходе.
Функция Delay() не используется, для пользователя это выглядит так:

Цитата:
void setup(void) {
sensorsTemperature.begin();
}

void DisplayTeTemperatures() {
if (sensorsTemperature.checkSensorReady()) {
temperature = sensorsTemperature.getTemperature();
}
}


__________________

mashenkaM поза форумом   Ответить с цитированием


Share/Bookmark

Ответ

Метки
arduino, акваконтролер, код, программирование


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход







Текущее время: 17:11. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd. Перевод: zCarot
(с)Бешлега Александр Анатольевич, 2002-2015. Использование материалов сайта без ссылки на источник запрещено.
Благодарим за лицензионную версию форума компанию Барбус, представителя торговой марки Sera в Украине.

Друзья форума: www.akvariumi.com.ua/; Интернет-магазин аквариумных товаров "У Водяного" http://eshop.aqua.in.ua/; Интернет-магазин http://ezoo.com.ua/

AQA.ru  - все об аквариумах

no new posts