Передача значений с одной платы на другую
- Войдите на сайт для отправки комментариев
Доброго времени суток. По заданию я нажимаю на одну из четырех кнопок на одной платформе (arduino uno), а на второй (arduino nano) должны загораться соответствующие светодиоды. При этом нужно использовать только провода-перемычки от портов одной платы к портам другой (без радио, блютуз, вайфай модулей). Получилось реализовать через передачу от 4-х цифровых портов uno высокий уровень напряжения на nano при нажатии на кнопку, но для этого нужно 4 провода. Если бы по заданию требовалось реализовать 20 кнопок, у меня не хватило бы портов. Соответственно нужно уменьшить количество проводов связи платформ, эту проблему я и не могу решить. Пробовал с шим порта analogWrite(10, n) uno передавать определенные значения, соответствующие каждой кнопке (n =50, 100, 150 и 200) и принимать эти значения с nano через аналоговый порт A0 и analogRead(A0), но не получается нормально прочитать эти значения. Какие еще есть способы или идеи для решения этой проблемы ?
Смотрите в сторону последовательного протокола DMX512 (RS-485). Добавится две маленькие и дешевые микросхемы приемопередатчиков и можно передавать все, что угодно на расстояние до 1200 метров по проводу.
Кстати, приемников может быть несколько (до 30 на одной линии).
Посмотрите в сторону пинов протокола I2C(TWI) или пины протоколов UART, SPI .. или как он там правильно зовется.
реализовал подобное на сериал портах, но у меня в проэкте используется 4 провода - это RX, TX, общая земля и пин для подачи прерывания на прием сигнала. Мастер посылает прерывание, затем посылает команду и потом в зависимости от команды посылает или принимает данные от слейва. Передавать можно любые данные. Стырил из какого то умного дома в интернете, вот ссылка на мой работающий проэкт в circuits https://123d.circuits.io/circuits/1950474-semy-smart-light Если Вам нужно использовать много кнопок смотрите в сторону использования одного пина на несколько кнопок, как на пример тут http://arduino.ru/forum/programmirovanie/rabota-s-knopkami-v-pomoshch-novichku#comment-21461
Спасибо за советы. Пришел к решению соединить две платы через UART, посредством соединения порта TX первой платы с портом RX второй и портом RX первой с портом TX второй. Никакого дополнительного соединения не потребовалось. Никаких дополнительных функций в исходных кодах программ прописывать не нужно. В результате при записи с первой платы чего либо через функцию Serial.write(), можно прочитать записанное с другой платы через функцию Serial.read() и наоборот. В своем задании, при нажатии на кнопку1 я отправлял символ Serial.read('1'), а на второй плате поставил условие if(Serial.read() == '1'), зажечь светодиод1.
PS: Если задействованы оба входа TX и RX платы, при загрузке скетча на плату будет выдавать ошибку. Нужно на время загрузки скетча разьединить две платы.
UART - синхронный интерфейс, а I2C (TWI) - "асинхронный". Обеспечить синхронность между двумя МК, мне кажется будет чуть сложнее чем связать их по I2C. Последний на дуньках вполне способен работать вплоть до частот в 880 кгц, что дает около 800 килобод скорости передачи. В то время как на UART, да ещё и программном, вряд ли получите выше 115200.
UART - синхронный интерфейс, а I2C (TWI) - "асинхронный".
Архат, не позорьтесь так явно: https://ru.wikipedia.org/wiki/%D0%A3%D0%BD%D0%B8%D0%B2%D0%B5%D1%80%D1%81%D0%B0%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%B0%D1%81%D0%B8%D0%BD%D1%85%D1%80%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D1%80%D0%B8%D1%91%D0%BC%D0%BE%D0%BF%D0%B5%D1%80%D0%B5%D0%B4%D0%B0%D1%82%D1%87%D0%B8%D0%BA