Страница 1 из 3
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 31 авг 2018, 21:48
kalobyte
[ref]av[/ref],
этот пример на 95% состоит из ненужных тебе вещей, т.к. там больше кода для обработки нажатий и вывода на индикатор
все это не нужно для создания блока
важные вещи это вот это
PT2322 audio;
если говорить простыми словами, то тут создается специальная переменная типа PT2322 , в ней хранятся все функции, которые тебе надо вызывать в секции сетап или луп
а переменная идет в секцию декларации или как она там называется, т.к. должна быть доступна всегда
теперь ищеш все вызовы функций в нужных секциях и тупо копируеш их в мастер создания блока
например
int rtnCode = audio.init(); в секции сетап, они выполнятся один раз, мелкасхема будет настроена по умолчанию, в самой библиотеке эти значения уже забиты, а в этом примере автор решил сделать свои значения по умолчанию
в файле .h перечислены все функции пользователя
int init(void);
void muteOn(void);
void muteOff(void);
void _3DOn(void);
void _3DOff(void);
void toneOn(void);
void toneOff(void);
void leftVolume(unsigned char flv);
void rightVolume(unsigned char frv);
void centerVolume(unsigned char cv);
void rearLeftVolume(unsigned char rlv);
void rearRightVolume(unsigned char rrv);
void subwooferVolume(unsigned char sv);
void masterVolume(unsigned char mv);
void bass(unsigned char tb);
void middle(unsigned char tm);
void treble(unsigned char tt);
ты мне дал вчера другую библиотеку и там было по-другому малость
тут функции ничего не возвращают и принимают беззнаковые значения
по поводу возвращаемого значения функции инит я так и не понял, это даташит надо читать, зачем там что-то возвращать и что там за функции
теперь по поводу создания входов и выходов
тут нужно понимать, какие функции могут быть входами какого типа и как это оформить в коде, т.к. все равно придется писать свой код для реализации логики
для этого надо хорошо понимать, как работает мелкасхема и ее функция
сразу скажу, что код это универсальная штука и реализаций может быть сколько угодно, в зависимости от потребности программиста
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 31 авг 2018, 22:06
kalobyte
берем 2 функции, которые реализуют один режим - включить и выключить звук
void muteOn();
void muteOff();
у этих функций нет вообще никаких параметров, как их вызвать из флпрог? какого типа будет вход?
определимся, что делает функция
в данном случае она вызывается 1 раз и устанавливает 1 режим, другая функция устанавливает тоже один режим, но он противоположный первому
значит эти функции не могут вызываться друг за другом, а только по условию
и тут встает вопрос: как я буду использовать в флпрог эти функции мелкасхемы? что лучше: сделать 2 входа как 2 функции или же один вход boolean и вызывать нужную функцию в зависимости от состояния входа? какие дополнительные блоки флпрог я повешу еще, чтобы все работало как надо и чтобы паразитного кода было меньше?
например я хочу выключить звук кнопкой на пульте ду - как работает блок пульта ду? сохраняется ли состояния кнопки или же оно только 1, когда кнопка нажата? логично предположить, что выход сбрасывается в 0, когда кнопка отпущена, а если нам надо держать его в 1, то бы ставим туда триггер тт
если у нас есть уже блок триггера, то зачем нам его писать еще раз в блоке?
значит мы сделаем просто один вход mute типа boolean
если там 1, то вызовется 1 раз функция muteOn, которая выключит звук
если же единицы нет, то т.к. эта функция будет помещена в блок луп, то она будет вызываться постоянно и включать звук
делаем в блоке вход mute типа boolean
в секции луп пишем условие
if (mute) muteOn();
else muteOff();
пока все, если возникли вопросы по этому куску, то пиши
Отправлено спустя 7 минут 1 секунду:
[ref]av[/ref], тебе не си надо учить, а диалект с++ для ардуины, он намного проще и это совсем другое, нежели с и с++
в ютубе есть куча инфы
https://www.youtube.com/watch?v=CRRlbzzt3VA
https://www.youtube.com/watch?v=6uOz-v- ... WL&index=3
и как говорится в том видео - делай конспекты и пиши ручкой на бумажке, так в голове откладывается
тупой просмотре без практики не работает вообще, хотя тебе будет казаться, что ты все понял и что все оказывается легко
как только ты начнеш писать код, то вылезет столько неописанных глюков и ошибок, что тебе придется самому все разгребать и получать опыт
будут уходить часы и дни, пока ты что-то начнеш понимать
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 31 авг 2018, 22:28
kalobyte
av писал(а): 31 авг 2018, 22:11ачем их там две если по даташиту на управление mute идет один бит данных
так решил автор библиотеки
ты можеш переписать ее как mute(boolean); и когда на входе true, то звук выключится
проще вызвать функцию без параметра и понять ее смысл на основе ее названия. нежели помнить, какой тип данных в нее пихать и в каких пределах
иногда это никак не влияет на код, иногда может занять больше памяти пзу, тут и надо соблюдать баланс между тратой памяти и читабельностью кода
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 31 авг 2018, 23:03
kalobyte
ни один процессор не может оперировать памятью меньше одного байта
т.е. если ты использовал 1 бит, то технически это все равно создалась переменная типа byte
прикол только тут в том, что в момент компиляции компилятор в этот байт может запихать несколько boolean
тип boolean удобен чисто для программиста, чтобы понимать или помочь понять смысл кода
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 31 авг 2018, 23:21
kalobyte
ага
так что если ты использовал 1 булеан, то спокойно можеш использовать еще 7 без расхода памяти
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 01 сен 2018, 00:26
kalobyte
тебе нужны только куски, начинающиеся на audio.
ну и еще зачем-то автор инициализирует и2ц в основном коде, когда это должно делаться в библиотеке

Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 01 сен 2018, 09:08
Sancho
kalobyte писал(а): 31 авг 2018, 21:48по поводу возвращаемого значения функции инит я так и не понял, это даташит надо читать, зачем там что-то возвращать и что там за функции
0: передача успешна
1: объем данных слишком велик для буфера передачи
2: получен NACK при передаче адреса
3: получен NACK при передаче данных
4: другая ошибка
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 01 сен 2018, 11:22
kalobyte
выход из меню или завершение работы в пункте меню, когда значение поменялось
это все не относится к блоку
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 01 сен 2018, 11:29
kalobyte
av писал(а): 01 сен 2018, 11:25
Значит можно из перечисления функций enum удалить эту функцию ?
это не функции в плане синтаксиса, енум это перечисление, оно не является кодом рантайма и вычисляется во время компиляции
вместо этих букв будут подставлены числа от 0 до количества перечислений -1
нужно это для замены числовых констант боле понятными буквенными
типа как тут
// commands
#define LCD_CLEARDISPLAY 0x01
#define LCD_RETURNHOME 0x02
#define LCD_ENTRYMODESET 0x04
только тут нет перечисления, а конкретные значения
av писал(а): 01 сен 2018, 11:22Вопрос для чего ?
оператор if в скобках ожидает какое-то условие, результат которого всегда должен быть true или false
что такое true? это любое число не 0
отсюда следует, что если переменная (вход) mute будет в флпрог выставлена в true, то оператор if выполнит условие в первых фигурных скобках и запустит функцию muteOn, которая выключит звук
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 01 сен 2018, 12:18
kalobyte
так я тебе и говорил, что тебе нужен только .х файл, чтобы посмотреть пользовательские функции и типы входных параметров
а тот пример это просто пример, который покажет тебе, как используется библиотека и какие куски или строки в каких секциях распологать
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 01 сен 2018, 13:58
Sancho
av писал(а): 01 сен 2018, 11:41а может тупо с файла .h скопировать все функции добавить входы параметров ну и где нужно преобразовать в нужный тип переменной. Возможно ли такое ?
Можно, но, в данном случае не нужно - там лишнего нет. И нет гимора копирования, много копировать...
Ещё.
Разницу посмотри, о чём вчера беседовали..
Не забывай задекларировать old_.... с нужными типами данных.
Код: Выделить всё
if (mute) muteOn();
else muteOff();
И так:
if (mute != old_mute)
{
if (mute) muteOn();
else muteOff();
old_mute=mute;
}
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 02 сен 2018, 00:20
kalobyte
[ref]av[/ref], вот еще тебе список всех операторов
http://arduino.ru/Reference
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 04 сен 2018, 14:56
Sancho
[ref]av[/ref], Сейчас сделаю набросок. Подправлю библиотеку, немножко...
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 04 сен 2018, 16:05
kalobyte
[ref]av[/ref], неправильно
в самом верху зачем скобки вокруг переменной?
не надо значения переменных со входов блока присваивать переменным в коде и потом их отправлять в функции
это делается сразу - со входа данные идут как аргумент функции без расхода памяти и запутывании кода
тут один косяк есть - при каждом проходе цикла луп - данные функции будут вызываться и в мелкасхему будут отправляться данные, что может привести к тому, что регулировка будет рывками или даже пропуск значений промежуточных
вот тут весь цимес - сделать алгоритм такой, чтобы не посылать лишний раз данные, если они не менялись
у меня примерно этот алгоритм возник, но тебе придется писать код и тестировать все на реальном железе
95% времени занимает как раз тестировании алгоритма и подгонка кода под этот алгоритм
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 04 сен 2018, 16:37
kalobyte
av писал(а): 04 сен 2018, 16:16Сейчас посмотрел вроде отправка реализована в файле .cpp из библы к PT2322/
это тебе не надо знать, там реализованы функции отправки и туда не надо лезть
никогда не меняй в чужих файлах бех необходимости
алгоритм примерно такой
если ты не планируеш использовать какие-то функции этой мелкасхемы, то не делай их
далее вводятся дополнительные переменные для каждой функции, которые будут содержать данные от прошлого изменения типа last_volume_up
далее делаем примерно так
if (last_volume!=volume_up){
volumeup(volume_up);
last_volume = volume;
}
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 04 сен 2018, 16:57
Sancho
Принимайте, други
Файл ino - это не скетч, а заготовка для блока. Надо дописать

Поправленая бибка
Отправлено спустя 3 минуты 17 секунд:
Громкость 0- мин, 79 макс.
Каналы 0 макс, 15 - затухание -15дб
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 04 сен 2018, 17:05
kalobyte
av писал(а): 04 сен 2018, 16:49Чтобы менять там что то с начало надо знать вообще как оно работает.
ну как? довольно просто - в функцию передаеш число и она переводит его в набор нулей и единиц, которые надо отправить в мелкасхему
а какие нули с единицами - это в даташите пишут, правда иногда очень замудрено выходит, особенно когда с китайского на английский переводят
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 04 сен 2018, 17:14
Sancho
[ref]av[/ref], Бибку перекачать - забыл несколько буков в описании функции
Отправлено спустя 2 минуты 52 секунды:
Здесь список более полный, немного, но всё-же )
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 04 сен 2018, 17:44
kalobyte
[ref]av[/ref],
вот как я и говорил, [ref=#ff8000]Sancho[/ref] сделал этот алгоритм
if(old_MASTERvol != MASTERvol){old_MASTERvol = MASTERvol; audio.masterVolume(MASTERvol);}
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Добавлено: 04 сен 2018, 19:08
kalobyte
правильность покажет только правильная работа в железе