В общем вопрос вот в чем. Есть 4 цифровых входа, в зависимости от ситуации их состояние меняется, так вот сам вопрос, как сделать так чтоб при определенных комбинациях, ну например 0101, сработало реле, а при 1010 оно выключилось. Мне сам принцип бы понять, ибо я не могу задать правильно вопрос и поэтому получаю неправильные ответы))) Может кто подскажет как это реализовать в коде, я привел простой пример, на самом деле он намного сложнее, но думаю если пойму как это реализовать правильно, то с более сложным и сам справлюсь)))
А чего тут понимать-то, в лоб и делайте.
ЕСЛИ
вход0 == 0 И
вход1 == 1 И
вход2 == 0 И
вход3 == 1 ТО
включить_реле
ИНАЧЕ
ЕСЛИ
вход0 == 1 И
вход1 == 0 И
вход2 == 1 И
вход3 == 0 ТО
выключить_реле
Собсна и всё, что тут может быть непонятно?
То есть все вот так просто))) Что то я думал сложнее все намного, с ЦАП разобрался, а в простом затупил совсем)))
А че цап намного сложнее?
Еще легче ! Выбираешь все входы в пределах одного порта в нужном порядке и читаешь состояние порта, отсекаешь не нужные биты и прямо сравниваешь с 0101 или 1010 и т…д.
Это аудио ЦАП, а если быть точнее точнее ES9038Q2M, пришлось даташит покурить немного чтоб понять что куда отправлять, на данный момент уже все работает, есть oled дисплейчик который отображает используемый вход, уровень громкости, и вот собственно для чего мне это надо было, юсб транспорт, на нем есть пины состояние которых меняется в зависимости от частоты и битности аудиопотока и я хочу вывести эти значения на дисплейчик)))
Я так скажем совсем новичек))) в теории я понимаю как и что, а вот в реализаци кода ни бум бум))) загвоздка в самом коде, я знаю что надо сделать, но не знаю как это написать правильно, так точнее будет сказанно
Тут - Управление портами через регистры Atmega | Аппаратная платформа Arduino почитайте и по аналогии …
Правда у меня не ардуинка))) а стм-ка, но програмирую в среде ардуино, думаю мне это малополезно будет, но за инфу все равно спасибо)))
У стм немного по другому …
Если не в среде ардуино, то да. Я немного по разбирался и пока забросил…
Да там не сложно то в принципе, просто не знаешь как это правильно написать, везде свой синтаксис, в среде ардуино намного проще так как за тебя уже почти все написано в виде библиотек, твое дело просто брать и использовать готовые функции, я вот уже какой час бьюсь и никакого результата, вроде простая задача
новички-то вона какие умные пошли
молодец, успеха
«Звезда ф шоке». С ацп - «как два пальца об асфальт», а с такой задачей «затык»?
Заводишь переменную state, устанавливаешь значения соответствующих бит в этой переменной функцией bitWrite(), дальше switch… case
Да я сам в шоке
Что то умею делать, что то нет, но учусь, усиленно
Вообще все началось с того что я купил этот ЦАП, но у него нет автономного режима работы, только с внешним управлением от микроконтролера, покупал в чип и дипе, у них есть и модули управления, и софт для работы с цапом, но… как обычно но, все очень просто, невозможно прикрутить дисплей, да и что то поменять под себя почти невозможно. Как только у них появился этот модуль, их ПО еще не могло с цапом нормально работать, и вот тогда то я и решил попробовать сам что то напрограмировать))) и как ни странно, все далось очень легко, пара дней и у меня все с дисплейчиком, управляется енкодером, он оч простой в плане управления, пара библиотек от Гайвера и все отлично работает. Но не хватает отображения частоты и битности входящего потока аудио, и как я понял без массивов тут не обойтись, а я ни в зуб ногой как работать с ними, завтра будет курить документацию
Так покажите как пробовали.
Немного попозже))) результат то есть, но меня не устраивает))) проблема в том что все это в бесконечном цикле у меня, и программа постоянно отправляет по шине i2c данные на дисплей, а это зверски тормозит шину, и так как цап и дисплей на одной шине сидят, возникают трудности управления самим цапом. Надо как то придумать условие чтоб отправка на дисплей происходила один раз и только по изменению состояния пинов. Поэтому сейчас сижу и читаю все что возможно для реализации моих задач
Сохраняете значение пинов в отдельной переменной (oldState) и сравниваете с текущем значение (state), если state != oldState, то выполняете действие.