Пользовательские блоки аудиопроцессоров на PT2322 и PT2323
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
[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);
ты мне дал вчера другую библиотеку и там было по-другому малость
тут функции ничего не возвращают и принимают беззнаковые значения
по поводу возвращаемого значения функции инит я так и не понял, это даташит надо читать, зачем там что-то возвращать и что там за функции
теперь по поводу создания входов и выходов
тут нужно понимать, какие функции могут быть входами какого типа и как это оформить в коде, т.к. все равно придется писать свой код для реализации логики
для этого надо хорошо понимать, как работает мелкасхема и ее функция
сразу скажу, что код это универсальная штука и реализаций может быть сколько угодно, в зависимости от потребности программиста
этот пример на 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
берем 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
и как говорится в том видео - делай конспекты и пиши ручкой на бумажке, так в голове откладывается
тупой просмотре без практики не работает вообще, хотя тебе будет казаться, что ты все понял и что все оказывается легко
как только ты начнеш писать код, то вылезет столько неописанных глюков и ошибок, что тебе придется самому все разгребать и получать опыт
будут уходить часы и дни, пока ты что-то начнеш понимать
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
так решил автор библиотекиav писал(а): 31 авг 2018, 22:11ачем их там две если по даташиту на управление mute идет один бит данных
ты можеш переписать ее как mute(boolean); и когда на входе true, то звук выключится
проще вызвать функцию без параметра и понять ее смысл на основе ее названия. нежели помнить, какой тип данных в нее пихать и в каких пределах
иногда это никак не влияет на код, иногда может занять больше памяти пзу, тут и надо соблюдать баланс между тратой памяти и читабельностью кода
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
ни один процессор не может оперировать памятью меньше одного байта
т.е. если ты использовал 1 бит, то технически это все равно создалась переменная типа byte
прикол только тут в том, что в момент компиляции компилятор в этот байт может запихать несколько boolean
тип boolean удобен чисто для программиста, чтобы понимать или помочь понять смысл кода
т.е. если ты использовал 1 бит, то технически это все равно создалась переменная типа byte

прикол только тут в том, что в момент компиляции компилятор в этот байт может запихать несколько boolean
тип boolean удобен чисто для программиста, чтобы понимать или помочь понять смысл кода
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
ага
так что если ты использовал 1 булеан, то спокойно можеш использовать еще 7 без расхода памяти
так что если ты использовал 1 булеан, то спокойно можеш использовать еще 7 без расхода памяти
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
тебе нужны только куски, начинающиеся на audio.
ну и еще зачем-то автор инициализирует и2ц в основном коде, когда это должно делаться в библиотеке
ну и еще зачем-то автор инициализирует и2ц в основном коде, когда это должно делаться в библиотеке

- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
0: передача успешнаkalobyte писал(а): 31 авг 2018, 21:48по поводу возвращаемого значения функции инит я так и не понял, это даташит надо читать, зачем там что-то возвращать и что там за функции
1: объем данных слишком велик для буфера передачи
2: получен NACK при передаче адреса
3: получен NACK при передаче данных
4: другая ошибка
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
выход из меню или завершение работы в пункте меню, когда значение поменялось
это все не относится к блоку
это все не относится к блоку
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
av писал(а): 01 сен 2018, 11:25 Значит можно из перечисления функций enum удалить эту функцию ?
это не функции в плане синтаксиса, енум это перечисление, оно не является кодом рантайма и вычисляется во время компиляции
вместо этих букв будут подставлены числа от 0 до количества перечислений -1
нужно это для замены числовых констант боле понятными буквенными
типа как тут
// commands
#define LCD_CLEARDISPLAY 0x01
#define LCD_RETURNHOME 0x02
#define LCD_ENTRYMODESET 0x04
только тут нет перечисления, а конкретные значения
оператор if в скобках ожидает какое-то условие, результат которого всегда должен быть true или false
что такое true? это любое число не 0
отсюда следует, что если переменная (вход) mute будет в флпрог выставлена в true, то оператор if выполнит условие в первых фигурных скобках и запустит функцию muteOn, которая выключит звук
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
так я тебе и говорил, что тебе нужен только .х файл, чтобы посмотреть пользовательские функции и типы входных параметров
а тот пример это просто пример, который покажет тебе, как используется библиотека и какие куски или строки в каких секциях распологать
а тот пример это просто пример, который покажет тебе, как используется библиотека и какие куски или строки в каких секциях распологать
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Можно, но, в данном случае не нужно - там лишнего нет. И нет гимора копирования, много копировать...av писал(а): 01 сен 2018, 11:41а может тупо с файла .h скопировать все функции добавить входы параметров ну и где нужно преобразовать в нужный тип переменной. Возможно ли такое ?
Ещё.
Разницу посмотри, о чём вчера беседовали..
Не забывай задекларировать old_.... с нужными типами данных.
Код: Выделить всё
if (mute) muteOn();
else muteOff();
И так:
if (mute != old_mute)
{
if (mute) muteOn();
else muteOff();
old_mute=mute;
}
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
[ref]av[/ref], вот еще тебе список всех операторов http://arduino.ru/Reference
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
[ref]av[/ref], Сейчас сделаю набросок. Подправлю библиотеку, немножко...
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
[ref]av[/ref], неправильно
в самом верху зачем скобки вокруг переменной?
не надо значения переменных со входов блока присваивать переменным в коде и потом их отправлять в функции
это делается сразу - со входа данные идут как аргумент функции без расхода памяти и запутывании кода
тут один косяк есть - при каждом проходе цикла луп - данные функции будут вызываться и в мелкасхему будут отправляться данные, что может привести к тому, что регулировка будет рывками или даже пропуск значений промежуточных
вот тут весь цимес - сделать алгоритм такой, чтобы не посылать лишний раз данные, если они не менялись
у меня примерно этот алгоритм возник, но тебе придется писать код и тестировать все на реальном железе
95% времени занимает как раз тестировании алгоритма и подгонка кода под этот алгоритм
в самом верху зачем скобки вокруг переменной?
не надо значения переменных со входов блока присваивать переменным в коде и потом их отправлять в функции
это делается сразу - со входа данные идут как аргумент функции без расхода памяти и запутывании кода
тут один косяк есть - при каждом проходе цикла луп - данные функции будут вызываться и в мелкасхему будут отправляться данные, что может привести к тому, что регулировка будет рывками или даже пропуск значений промежуточных
вот тут весь цимес - сделать алгоритм такой, чтобы не посылать лишний раз данные, если они не менялись
у меня примерно этот алгоритм возник, но тебе придется писать код и тестировать все на реальном железе

95% времени занимает как раз тестировании алгоритма и подгонка кода под этот алгоритм
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
это тебе не надо знать, там реализованы функции отправки и туда не надо лезтьav писал(а): 04 сен 2018, 16:16Сейчас посмотрел вроде отправка реализована в файле .cpp из библы к PT2322/
никогда не меняй в чужих файлах бех необходимости
алгоритм примерно такой
если ты не планируеш использовать какие-то функции этой мелкасхемы, то не делай их
далее вводятся дополнительные переменные для каждой функции, которые будут содержать данные от прошлого изменения типа last_volume_up
далее делаем примерно так
if (last_volume!=volume_up){
volumeup(volume_up);
last_volume = volume;
}
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
Принимайте, други
Файл ino - это не скетч, а заготовка для блока. Надо дописать
Поправленая бибка
Отправлено спустя 3 минуты 17 секунд:
Громкость 0- мин, 79 макс.
Каналы 0 макс, 15 - затухание -15дб
Файл ino - это не скетч, а заготовка для блока. Надо дописать

Поправленая бибка
Отправлено спустя 3 минуты 17 секунд:
Громкость 0- мин, 79 макс.
Каналы 0 макс, 15 - затухание -15дб
У вас нет необходимых прав для просмотра вложений в этом сообщении.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
ну как? довольно просто - в функцию передаеш число и она переводит его в набор нулей и единиц, которые надо отправить в мелкасхему
а какие нули с единицами - это в даташите пишут, правда иногда очень замудрено выходит, особенно когда с китайского на английский переводят
- Sancho
- Полковник
- Сообщения: 4066
- Зарегистрирован: 25 дек 2015, 17:32
- Откуда: Ярославль.
- Имя: Александр
- Поблагодарили: 5 раз
- Контактная информация:
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
[ref]av[/ref], Бибку перекачать - забыл несколько буков в описании функции 
Отправлено спустя 2 минуты 52 секунды:
Здесь список более полный, немного, но всё-же )

Отправлено спустя 2 минуты 52 секунды:
Здесь список более полный, немного, но всё-же )
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
[ref]av[/ref],
вот как я и говорил, [ref=#ff8000]Sancho[/ref] сделал этот алгоритм
if(old_MASTERvol != MASTERvol){old_MASTERvol = MASTERvol; audio.masterVolume(MASTERvol);}
вот как я и говорил, [ref=#ff8000]Sancho[/ref] сделал этот алгоритм
if(old_MASTERvol != MASTERvol){old_MASTERvol = MASTERvol; audio.masterVolume(MASTERvol);}
Разработка пользовательского блока для звукового процессора 5.1 на PT2322
правильность покажет только правильная работа в железе
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость