Помогите с реализацией управление по I2C
- Войдите на сайт для отправки комментариев
Добрый день.
Не могу разобраться с управлением внешний устройств по I2C шине.
Прочитал несколько факов, разобрал кучу готовых примеров, но не могу понять как организовать работу контроллера так, чтобы он не дергал постоянно шину.
Имеем ардуино и внешнее устройство TDA7313 (звуковой процессор с селектором каналов и тп).
Ардуина управляется 1 кнопкой, по которой должна происходить смена режимов и соответственно совершаться посыл о смене режима в шину, вместе с посылом зажигается 1 из 2 светодиодов. Так же к мк подключено 2 потенциометра для управления громкостью и тембром.
(такое управление диктуется исходным устройством, в которое происходит встраивание)
Собственно мне не понятно можно ли сделать так, чтобы запись в шину происходила только при наступлении события (переключение режима или изменении сопротивления) - исходя из логики работы мк все что висит в loop-е крутится по кругу.
В разобранных примерах не было режимов, переключаемых одной кнопкой, устройства как правило либо простые (таймеры, датчики температуры и тп), либо управляются несколькими кнопками.
Переключение режимов я реализовал через switch-case, внутри кейсов управление светодиодами и еще парой пинов меняющих свое состояние. При такой реализации прописывая внутри кейсов передачу события в шину получаем постоянный засыл этого события.
Что-то типа такого (если я правильно понял проблему)?
вот описание команды switch-case из фака:
значение var присваивается на этапе проверки нажата ли кнопка
дальше, по моей логике, при значении var=1 крутится в цикле первый кейс, но мне нужно чтобы в нем выполнилось действие только 1 раз. для этого ввожу дополнительную проверку состояние системы внутри кейсов и если условия удовлетворяют, то выполняется действие в кейсе и переменная меняется так, чтобы условие не выплонялось. но на практике не работает...
вот кусок кода с упрощением для наглядности
логика работы такова, что case 1 всегда выполняется при первом старте программы - те включенный синий светодиод = начальное состояние системы. вместо записи в серийный-порт ессесно посыл в шину
так, увидел косяк - в проверке условий внутри кейса присваивание стоит вместо ==
исправил, но теперь возникла проблема с неоднозначным срабатыванием кнопки, до ввода условий в кейсах светодиоды переключались однозначно, сейчас будто дребезг жуткий появился