Перейти к контенту
МОРСКОЙ АКВАРИУМ - форум Аква Лого

Аква Лого / мы на связи
Аква Лого в VK
Аква Лого в Телеграмм
Аква Лого в соцсетях

Жаба на питоне

Морской чёрт-обжора

Судак-тудак

svyaz

DIY 6-Канальный контроллер LED c тач-панелью "3.2"

Рекомендуемые сообщения

Еще не могу понять где разкоментировать строки, чтобы настройки Wavemaker'a появились, я помпы на управляемые разетки повесил.

Я подозреваю, что если в строчках:

int PumpTstate = LOW; //Used to set the Top Powerhead ON or OFF

int PumpBstate = LOW; //Used to set the Bottom Powerhead ON or OFF

LOW изменить на High, то помпы будут постоянно включены?

Поделиться этим сообщением


Ссылка на сообщение

Нигде. Это контроллер светильника.

Я и так наверно нарушаю авторское право, хотя там от оригинала Джейми осталось наверно 50%.

Поэтому в последней (этой версии) все не касающееся ледов и терморегулирования закомментированно удалено.

Не хочу проблем, поскольку Джейми чтото с этого имеет.

 

Если тебе уж так интересен Wavemaker - возьми мою версию которую я выложил тут месяц или около того назад.

Она вполне рабочая, но багов там естественно больше, чем в теперешней.

Попробовать можешь как там Wavemaker работает, но я за это ответственности не несу. Эта функция написана безграмотно,

внутри я не лез, и как она повлияет на работу светильника - предсказать немогу, никогда не пробовал.

Там используется функция delay 5 или 10 секунд в какомто режиме. Она может на это время тормозить пересчет изменения % ШИМ управления ледами.

 

Так или иначе, вфункционирование 2х функций Wavemaker и autofeeder - я вообще не проверял.

 

 

РС:

int PumpTstate = LOW; //Used to set the Top Powerhead ON or OFF

int PumpBstate = LOW; //Used to set the Bottom Powerhead ON or OFF

LOW изменить на High, то помпы будут постоянно включены?

 

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

Поделиться этим сообщением


Ссылка на сообщение

Я и так наверно нарушаю авторское право, хотя там от оригинала Джейми осталось наверно 50%.

Поэтому в последней (этой версии) все не касающееся ледов и терморегулирования закомментированно удалено.

Не хочу проблем, поскольку Джейми чтото с этого имеет.

Олег, я не большой спец в лицензировании, линуксоиды меня поправят если я ошибоаюсь, но по моему ты не нарушаешь ничьих прав, а вот со стороны Джейми, как мне кажется, как раз не все чисто. LEGAL DISCLAIMER в тексте программы весьма странный, там вроде бы сказано, что распространяется под GNU GPL лицензией. Если так, то Джейми ОБЯЗАН предоставить исходный код без каких-либо условий и ты (и кто угодно другой) получают все права на любое использование, изменение, распространение (в том числе на коммерческой основе) и так далее. То, что Джейми написал в дисклаймере, что при коммерческом использовании необходимо написать ему (и, видимо, заплатить) - это ерунда (но, повторюсь, я не большой спец в деталях подобных лицензий, а разбираться лень). Я не уверен, дает ли GNU лицензия ему право продавать исходный код (что он по сути говоря и делает, под видом donation), но совершенно очевидно, что получив от него код кто угодно имеет полное право его выложить в общий доступ.

 

Когда я писал shareware программы и тусовался на соответствующем форуме, то одно из непреложных правил там было - если хочешь сохранить права на программу за собой, то не дай бог тебе использовать код под GNU General Public License в продукте. Я не помню какие правила действуют если, допустим, в своей программе некто использовал одну готовую GNU библиотеку - не в курсе налагает ли это на автора программы обязательство раскрывать весь исходный код с полной передачей всех прав пользователю, или можно ограничиться только кодом использующим библиотеку. И не дай бог если кого-то поймают на "тихушном" использовании кода под GNU лицензией, мало не покажется.

 

Короче - мое мнение с полученым от Джейми кодом можно делать все что угодно, в том числе и выкладывать в интернет.

Поделиться этим сообщением


Ссылка на сообщение

Олег, а я правильно понял, что ты в своем скетче применив диапазон 0...100% сильно снизил плавность увеличения (уменьшения) света?

Ведь в void LED_levels_output() ты используешь преобразование wled_out = map(wcol_out, 0, 100, 0, 255);

 

Тем самым при изменении на экране параметров света на 1% на самом деле на выходе будет 2,25% ?

Поделиться этим сообщением


Ссылка на сообщение

Да Илья. Правильно.Минимальный шаг сейчас действительно 2.25% от 100%.

сильно снизил плавность увеличения

Это ты "сильно" сказал :))

Не думаю что это так уж и существенно, зато возросло удобство пользования. Кроме того - это только

один из шагов преобразования программы на пути от 8битного шим к 11битному, там шаги будут существенно меньше и переключение

значительно плавнее.

Я по прежнему придерживаюсь мнения - что попытка от основных драйверов добится минимальной светимости, для работы в режиме ледов - ненужна.

Значительно лучших результатов можно добится используя в к-ве луны обычные 5мм леды. Учитывая что в программе (и шилде) под это есть отдельный канал - грех его не использовать. Один мой товарищ практически полностью убрал "заметность" 5% ступеньки в драйверах ELN - именно с помощью канала луны в программе. В качестве луны использовалась лед-лента.

Поделиться этим сообщением


Ссылка на сообщение

Да Илья. Правильно.Минимальный шаг сейчас действительно 2.25% от 100%.

 

Не думаю что это так уж и существенно, зато возросло удобство пользования. Кроме того - это только

один из шагов преобразования программы на пути от 8битного шим к 11битному, там шаги будут существенно меньше и переключение

значительно плавнее.

 

Я приложил руку к переделыванию шима в 11бит в сборке Олега, просто эта сборка еще не вышла в свет. При задании настроек 1% будет равен 20 градациям шима(иными словами шаги по 0.05%), и эти градации будут меняться плавно. Плюс, когда получу его сборку адаптирую настройки, чтобы можно было выделять какой канал будет работать луной(если не хочется делать отдельную луну на 5мм леде)

Изменено пользователем mixzt (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение

почти переписал программу - теперь намек делает что готова будет заработать на бОльший экранчике (еще не пришел проверить не могу,но на уменьшение рабоет).

Токо вот что фонтами делать (да и картинками) делать что ?

С картинками я так понимаю ничего не придумать. На другой размер генерить их придется. Но поскольку их не много - это не проблема.

А вот в фонты можно как то автоматом уменьшить-увеличить? Типа какой нибудь проги не компе - скармливаешь фонт, задаеш коэффицент и получаешь новый фонт.

И еще глюк у меня - красным на картинке. Я правильно понимаю что в фонте ошибка - как поправить? Что то никак не могу в структуре rusfont разобраться.

 

gluk.jpg

gluk2.jpg

Поделиться этим сообщением


Ссылка на сообщение

Олег, а в твоей версии можно делать PWM на леды более 500гц , например 23кгц? т.к. именно низкая частота PWM меня и отпугивает, хотя уже приобрел аурдину.

 

 

Отправлено из моего iPad используя Tapatalk HD

 

Олег, а в твоей версии можно делать PWM на леды более 500гц , например 23кгц? т.к. именно низкая частота PWM меня и отпугивает, хотя уже приобрел аурдину.

 

 

Отправлено из моего iPad используя Tapatalk HD

 

Олег, а в твоей версии можно делать PWM на леды более 500гц , например 23кгц? т.к. именно низкая частота PWM меня и отпугивает, хотя уже приобрел аурдину.

 

 

Отправлено из моего iPad используя Tapatalk HD

Поделиться этим сообщением


Ссылка на сообщение

Олег, а в твоей версии можно делать PWM на леды более 500гц , например 23кгц? т.к. именно низкая частота PWM меня и отпугивает, хотя уже приобрел аурдину.

 

 

В 11 бит шиме частота по умолчанию 1кГц, легко можно переключить на 8кГц.

 

Если захочется больше частоты, то придется уменьшать разрядность шима.

К примеру для 23кГц разрядность шима будет всего 10 бит(счет до 1024) И придется переписать слегка прогу(поменяются счетчики ).

Поделиться этим сообщением


Ссылка на сообщение

почти переписал программу - теперь намек делает что готова будет заработать на бОльший экранчике (еще не пришел проверить не могу,но на уменьшение рабоет).

Токо вот что фонтами делать (да и картинками) делать что ?

С картинками я так понимаю ничего не придумать. На другой размер генерить их придется. Но поскольку их не много - это не проблема.

А вот в фонты можно как то автоматом уменьшить-увеличить? Типа какой нибудь проги не компе - скармливаешь фонт, задаеш коэффицент и получаешь новый фонт.

И еще глюк у меня - красным на картинке. Я правильно понимаю что в фонте ошибка - как поправить? Что то никак не могу в структуре rusfont разобраться.

Один француз, взяв за основу версию 1.1 переписал под 5 дюймов экран, добавляя умножение по горизонтали 2.5, по вертикали 2

 

/**************************** CHOOSE OPTION MENU BUTTONS *****************************/

const int tanD[]= {10*2.5, 29*2, 155*2.5, 59*2}; //"TIME and DATE" settings

const int gSet[]= {10*2.5, 149*2, 155*2.5, 179*2}; //"GENERAL SETTINGS" page

const int tesT[]= {165*2.5, 29*2, 310*2.5, 59*2}; //"LED TESTING OPTIONS" menu

const int ledChM[]= {165*2.5, 69*2, 310*2.5, 99*2}; //"CHANGE LED VALUES" menu

const int about[]= {165*2.5, 149*2, 310*2.5, 179*2}; //"ABOUT" program information

 

Фонт можно создавать 2-я способами :

1. online конвертером, берем за основу картинку готовых шрифтов, старые вытираем (заливаем черным цветом), и рисуем свой шрифт в формате 16 символов на 6 линий

 

post-972-0-04672300-1358506003.png

 

После конвертации получаем файл c, где в массиве будут находится наши символы. Автоматом ставится комментарий, так как предполагается размещение в определённом алфавитном порядке.

Кстати по этому же принципу, удобно размещать текст во флеш, намного проще чем сделал Олег.

 

char* print_text[] PROGMEM = { // текст во флеш

"", // print_text[0]

"CANCEL", // print_text[1]

"<< BACK", // print_text[2]

"SAVE", // print_text[3]

"STOP", // print_text[4]

"MORE COLORS", // print_text[5]

"CHANGE", // print_text[6]

};

 

и далее в требуемом месте ставим индекс текста

printButton(print_text[1], canC[0], canC[1], canC[2], canC[3], SMALL);

 

Второй вариант создания шрифта - GLCD Font Creator, например RusFont1 - я делал в нем, брал за основу самый маленький шрифт Sinclair_S.c и делал недостающие символы, так как некоторые A,B,C и т.д. годятся и так.

В этом экране символы формируются несколько по другому, чем например в других графических дисплеях, по этому нужно рисовать под углом 90 градусов

 

post-972-0-97928900-1358503674_thumb.png

Изменено пользователем svyaz (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение

И еще глюк у меня - красным на картинке. Я правильно понимаю что в фонте ошибка - как поправить? Что то никак не могу в структуре rusfont разобраться.

Открываем текстовым редактором любой из фонтов, мне очень нравится текстовый редактор Notepad++

и смотрим комментарий, в скобках клавиша на клавиатуре, которой будет соответствовать русская буква.

 

post-972-0-01768100-1358507249_thumb.png

 

И таки да, есть там крякозябра одна, этот фонт создавался онлайн конвертером, но там есть и нормальный мягкий знак. Порядок букв, соответствует с файлу со шрифтом.

 

post-972-0-16070200-1358507372_thumb.jpg

Поделиться этим сообщением


Ссылка на сообщение

Мне вроде токо фонты и картинки осталось победить. С остальным я знаю как боротся - вообще все переписал (до конца еще далеко, но основное работает). Ни от кого ничего почти не осталось. Разве что названия переменных, функций (что бы было удобно в чужие скетчи подсмативать), да и пока еще расположение кнопок и цвета.

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

Если что нужно заменить - достаточно поправить только в одном месте, и не лазить везде. - В экселе. Или в к примеру в а-ля printButton-е, куда я запихнул всякие ап/даун/слайдер бары и пр.

Меня токо размеры массивов волнуют. Памяти хватит ? Просто у меня по из экселя только по кнопкам формируются 6 двумерных массивов размером макс.кол-во кнопок на на экране умноженное на кол-во экранов. (x1,x2,x3,x4, плюс тип и названия на каждую кнопку ). Ну зато в скетче потом разбираться удобно. Типа все кнопки напечатать нужно все го лишь:

 

void printallkeys() {

for (int i=0; i<keyN; i++) { // keyN - макс кол-во кнопок на экране

if (keyT[dispScreen]>0) { //0 - отсутствие кнопки в массиве

strcpy_P(buffer, (char*)pgm_read_word_near(&(Key_table[i+dispScreen*(keyN+1)]))); //

printButton_(buffer, x1[dispScreen], y1[dispScreen], x2[dispScreen], y2[dispScreen], keyT[dispScreen]); }

}

Поделиться этим сообщением


Ссылка на сообщение

Мне вроде токо фонты и картинки осталось победить.

В компиляторе, в папке граф.библиотеки (Tools) есть конвертер картинок ImageConverter565 и ссылка на конвертер онлайн.

Кстати на форуме ардуино идет разработка сверхбыстрой граф. библиотеки для экрана на чипе SSD1289 (контроллер jarduino)

Для сравнения, заполнение экрана для библиотеки UTFT - 560ms, у этой - 19.7ms, там и видео есть.

Поделиться этим сообщением


Ссылка на сообщение
Олег, а в твоей версии можно делать PWM на леды более 500гц , например 23кгц? т.к. именно низкая частота PWM меня и отпугивает, хотя уже приобрел аурдину.

Смотри в сообщении #1346. До 8кгц ты можешь одним движением пальца :)) , а выше - головная боль. Можно , но надо возится.

23кгц - никак, и смысла в этом абсолютно нет. При повышении частоты шима сильно уменьшается диапазон регулировки яркости у драйвера.

Т.е ты проиграешь в этом.

 

Кстати по этому же принципу, удобно размещать текст во флеш, намного проще чем сделал Олег.

Не понял тебя Вадим, где у меня "переусложнено". Поясни пожалста.

Комманда PROGMEM вроде такая-же?????

 

 

Меня токо размеры массивов волнуют. Памяти хватит ?

Нормальный компилятор при компилировании выдает сообщение типа

Compiling 'Jarduino_V1_2_Oleg_mod' for 'Arduino Mega 2560 or Mega ADK'

Binary sketch size: 183896 bytes (of a 258048 byte maximum) (15.3188762 secs)

 

AVR Memory Usage

----------------

Device: atmega2560

 

Program: 183896 bytes (70.2% Full)

(.text + .data + .bootloader)

 

Data: 4852 bytes (59.2% Full)

(.data + .bss + .noinit)

 

text data bss dec hex

0 183896 0 183896 2ce58

Т.е в моей версии программы еще 30% флеша и 40% ram свободны.

 

Если ты работаешь в среде ардуины, то вот тут написанно как проверить свободную память

http://electronics.stackexchange.com/questions/24269/checking-memory-footprint-in-arduino

Изменено пользователем Oleg_il (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение

Не понял тебя Вадим, где у меня "переусложнено". Поясни пожалста.

Комманда PROGMEM вроде такая-же?????

Cмотри, помещаем текст во флеш и выводим на экран, в твоем варианте, для упрощения для одной фразы

 

prog_char Text_string0[] PROGMEM = "Writing to file Backup.txt"; // поместили текст

char* Text_table [] PROGMEM = {

Text_string0,

};

 

strcpy_P(buffer, (char*)pgm_read_word_near(&(Text_table[0]))); // вывели на экран

myGLCD.print(buffer, 5, 24);

 

тогда как можно сделать намного проще

 

char* print_text[] PROGMEM = {

"Writing to file Backup.txt", // print_text[0] // поместили текст

};

 

myGLCD.print(print_text[0], 5, 24); // вывели на экран

 

Таким же образом удобно выводить текст внутри виртуальной кнопки

 

printButton(print_text[0], back[0], back[1], back[2], back[3], SMALL);

Изменено пользователем svyaz (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение

Нормальный компилятор при компилировании выдает сообщение типа

 

Т.е в моей версии программы еще 30% флеша и 40% ram свободны.

 

Если ты работаешь в среде ардуины, то вот тут написанно как проверить свободную память

http://electronics.s...rint-in-arduino

В среде ардуины, можно еще так

В тело программы помещаем код

 

int freeRam (){

extern int __heap_start, *__brkval;

int v;

return (int) &v - (__brkval == 0 ? (int) &__heap_start : (int) __brkval); }

 

а в setup этот

 

Serial.println("\n[memCheck2]");

Serial.println(freeRam());

 

При сбросе контроллера, в мониторе порта увидим свободную память

Изменено пользователем svyaz (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение

не понял про память. Это в каких попугаях? в ардуине...

 

 

монитор выдал :

[memCheck2]

3085

 

Это что значит? И в какой памяти?

Изменено пользователем azh122 (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение

не понял про память. Это в каких попугаях? в ардуине...

 

монитор выдал :

[memCheck2]

3085

 

Это что значит? И в какой памяти?

Свободного места в ОЗУ из 8кб

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

Изменено пользователем svyaz (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение

 

тогда как можно сделать намного проще

 

char* print_text[] PROGMEM = {

"Writing to file Backup.txt", // print_text[0] // поместили текст

};

 

myGLCD.print(print_text[0], 5, 24); // вывели на экран

 

Таким же образом удобно выводить текст внутри виртуальной кнопки

 

printButton(print_text[0], back[0], back[1], back[2], back[3], SMALL);

 

Что то не заработало в цикле.

printButton(print_text, back[0], back[1], back[2], back[3], SMALL);

где i=4 монитор выдал print_text =4

вместо char* print_text[] PROGMEM = {

cтавишь char* print_text[] = {

- ессно работает

Поделиться этим сообщением


Ссылка на сообщение

Что то не заработало в цикле.

printButton(print_text, back[0], back[1], back[2], back[3], SMALL);

где i=4 монитор выдал print_text =4

вместо char* print_text[] PROGMEM = {

cтавишь char* print_text[] = {

- ессно работает

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

 

char* print_text[] PROGMEM = {

"BACK", // print_text[0] // индекс текста

"CANCEL", // print_text[1] // индекс текста

"SAVE", // print_text[2] // индекс текста

};

 

printButton(print_text[0], back[0], back[1], back[2], back[3], SMALL);

printButton(print_text[1], canC[0], canC[1], canC[2], canC[3], SMALL);

printButton(print_text[2], prSAVE[0], prSAVE[1], prSAVE[2], prSAVE[3], SMALL);

Поделиться этим сообщением


Ссылка на сообщение

да, явным образом работает.

Только мне это не поможет:

Прогу переделал - ушел от двумерных массивов, но теперь заранее индекс кнопки не известен - вычисляется по ходу дела.

Но не суть - оставлю как было.

Поделиться этим сообщением


Ссылка на сообщение

А вот если выкинуть из головы то что уже сделано. Но оставить железо. То какой контроллер с точки зрения интерфеса вы бы себе представляли?

Ну или какие решения вам бы приглянулись ? Если из готовых то может ссылки на картинки есть ?

 

Короче - интерфейс хочу переделать (переписал кое-что - сейчас легко все правится). Но дизайнер из меня никакой (((

 

К примеру, у меня мысли такие (может ошибаюсь):

убрать все настройки из менюшек.

Ну к примеру часы нужно настроить - так ткнись пальцем на часы и подержи секунды три-четыре - вываливаешься в менюшку.

С таймерами, и т.д. - также сделать.

Не нравится вот мне двойные кнопки в настройках. Почему не одна? Нажал раз - высветился к примеру 12часовая индикаци, нажал еще раз - попал на 24 часа. Спрашиваю потому что реализовать такое проще и короче в универсальном коде (как и прочие типа ON/OFF, ON/OFF/AUTO)

Ну или еще (вопрос к Вадиму наверное) - ну вот есть в прошивке от svyaz: Есть часы. Есть таймеры. Ну кака принципиальная разница с точки зрения выствления времени? Почему один интерфейс не использовать ? - "зоопарк" же хуже воспринимается.

Поделиться этим сообщением


Ссылка на сообщение

printButton(print_text[0], back[0], back[1], back[2], back[3], SMALL);

printButton(print_text[1], canC[0], canC[1], canC[2], canC[3], SMALL);

printButton(print_text[2], prSAVE[0], prSAVE[1], prSAVE[2], prSAVE[3], SMALL);

 

Да работает это и с индексами.

Вот, только что проверил, смотри

 

/********************************************

char* print_text[] PROGMEM = {

"

"NEXT >>", // print_text[1]

"SAVE", // print_text[2]

"CANCEL", // print_text[3]

"Dim LEDs Temp.", // print_text[4]

"Screensaver", // print_text[5]

};

/********************************************

 

for (byte i=0; i

{

if (i==0) {printButton(print_text, backGS[0], backGS[1], backGS[2], backGS[3], SMALL);}

if (i==1) {printButton(print_text, nextGS[0], nextGS[1], nextGS[2], nextGS[3], SMALL);}

if (i==2) {printButton(print_text, prSAVEgs[0], prSAVEgs[1], prSAVEgs[2], prSAVEgs[3], SMALL);}

if (i==3) {printButton(print_text, canCgs[0], canCgs[1], canCgs[2], canCgs[3], SMALL); }

}

 

Все работает и показывает как надо. Внутри цикла if (i==0) и тд - только для простоты, чтобы не делать shift координат кнопки и просто для проверки идеи. Тебе, то это не надо, с "универсальной кнопкой".

 

Не нравится вот мне двойные кнопки в настройках. Почему не одна?

Ну и поставь одну - я так уже сделал, вопрос чисто времени на это.

 

Ну или еще (вопрос к Вадиму наверное) - ну вот есть в прошивке от svyaz: Есть часы. Есть таймеры. Ну кака принципиальная разница с точки зрения выствления времени? Почему один интерфейс не использовать ? - "зоопарк" же хуже воспринимается.

Я не Вадим, :)) но думаю что ответ знаю.

Просто это надерганные кусочки от разных авторов (не в обиду). В так называемом "оригинале" - тоже есть такое явление, но в меньшей степени.

Изменено пользователем Oleg_il (см. историю изменений)

Поделиться этим сообщением


Ссылка на сообщение

Ну или еще (вопрос к Вадиму наверное) - ну вот есть в прошивке от svyaz: Есть часы. Есть таймеры. Ну кака принципиальная разница с точки зрения выствления времени? Почему один интерфейс не использовать ? - "зоопарк" же хуже воспринимается.

Как правильно заметил Олег - многое "надергано" , потому как делался контроллер аквариумистами, программисты обычно в другой ветке :))

"зоопарк" - из за того, что дисплей цветной :) и легче визуально воспринимается, когда каждая функция имеет свой цвет и мне например приятнее наблюдать картинку которая справа,

и настраивать удобнее без стилуса. Слева-как было, справа - как стало.

 

post-972-0-20757400-1358678569_thumb.png

Поделиться этим сообщением


Ссылка на сообщение

Пожалуйста, авторизуйтесь, чтобы оставить комментарий

Вы сможете оставлять комментарии после авторизации



Войти

×
×
  • Создать...

Политика обработки персональных данных