Помогите новичку или направьте в нужном направлении)))

В общем вопрос вот в чем. Есть 4 цифровых входа, в зависимости от ситуации их состояние меняется, так вот сам вопрос, как сделать так чтоб при определенных комбинациях, ну например 0101, сработало реле, а при 1010 оно выключилось. Мне сам принцип бы понять, ибо я не могу задать правильно вопрос и поэтому получаю неправильные ответы))) Может кто подскажет как это реализовать в коде, я привел простой пример, на самом деле он намного сложнее, но думаю если пойму как это реализовать правильно, то с более сложным и сам справлюсь)))

А чего тут понимать-то, в лоб и делайте.

ЕСЛИ вход0 == 0 И вход1 == 1 И вход2 == 0 И вход3 == 1 ТО включить_реле
ИНАЧЕ ЕСЛИ вход0 == 1 И вход1 == 0 И вход2 == 1 И вход3 == 0 ТО выключить_реле

Собсна и всё, что тут может быть непонятно?

1 лайк

То есть все вот так просто))) Что то я думал сложнее все намного, с ЦАП разобрался, а в простом затупил совсем)))

А че цап намного сложнее?

Еще легче ! Выбираешь все входы в пределах одного порта в нужном порядке и читаешь состояние порта, отсекаешь не нужные биты и прямо сравниваешь с 0101 или 1010 и т…д.

1 лайк

Это аудио ЦАП, а если быть точнее точнее ES9038Q2M, пришлось даташит покурить немного чтоб понять что куда отправлять, на данный момент уже все работает, есть oled дисплейчик который отображает используемый вход, уровень громкости, и вот собственно для чего мне это надо было, юсб транспорт, на нем есть пины состояние которых меняется в зависимости от частоты и битности аудиопотока и я хочу вывести эти значения на дисплейчик)))

Я так скажем совсем новичек))) в теории я понимаю как и что, а вот в реализаци кода ни бум бум))) загвоздка в самом коде, я знаю что надо сделать, но не знаю как это написать правильно, так точнее будет сказанно :slightly_smiling_face:

Тут - Управление портами через регистры Atmega | Аппаратная платформа Arduino почитайте и по аналогии …

1 лайк

Правда у меня не ардуинка))) а стм-ка, но програмирую в среде ардуино, думаю мне это малополезно будет, но за инфу все равно спасибо)))

У стм немного по другому …

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

Да там не сложно то в принципе, просто не знаешь как это правильно написать, везде свой синтаксис, в среде ардуино намного проще так как за тебя уже почти все написано в виде библиотек, твое дело просто брать и использовать готовые функции, я вот уже какой час бьюсь и никакого результата, вроде простая задача

новички-то вона какие умные пошли :wink:
молодец, успеха

«Звезда ф шоке». С ацп - «как два пальца об асфальт», а с такой задачей «затык»?

Заводишь переменную state, устанавливаешь значения соответствующих бит в этой переменной функцией bitWrite(), дальше switch… case

2 лайка

Да я сам в шоке :joy: :joy: :joy: Что то умею делать, что то нет, но учусь, усиленно :joy: :joy: :joy:

Вообще все началось с того что я купил этот ЦАП, но у него нет автономного режима работы, только с внешним управлением от микроконтролера, покупал в чип и дипе, у них есть и модули управления, и софт для работы с цапом, но… как обычно но, все очень просто, невозможно прикрутить дисплей, да и что то поменять под себя почти невозможно. Как только у них появился этот модуль, их ПО еще не могло с цапом нормально работать, и вот тогда то я и решил попробовать сам что то напрограмировать))) и как ни странно, все далось очень легко, пара дней и у меня все с дисплейчиком, управляется енкодером, он оч простой в плане управления, пара библиотек от Гайвера и все отлично работает. Но не хватает отображения частоты и битности входящего потока аудио, и как я понял без массивов тут не обойтись, а я ни в зуб ногой как работать с ними, завтра будет курить документацию :joy: :joy: :joy:

Так покажите как пробовали.

2 лайка

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

Сохраняете значение пинов в отдельной переменной (oldState) и сравниваете с текущем значение (state), если state != oldState, то выполняете действие.

2 лайка