Передача значений с одной платы на другую

sm4511022
Offline
Зарегистрирован: 11.05.2016

Доброго времени суток. По заданию я нажимаю на одну из четырех кнопок на одной платформе (arduino uno), а на второй (arduino nano) должны загораться соответствующие светодиоды. При этом нужно использовать только провода-перемычки от портов одной платы к портам другой (без радио, блютуз, вайфай модулей). Получилось реализовать через передачу от 4-х цифровых портов uno высокий уровень напряжения на nano при нажатии на кнопку, но для этого нужно 4 провода. Если бы по заданию требовалось реализовать 20 кнопок, у меня не хватило бы портов. Соответственно нужно уменьшить количество проводов связи платформ, эту проблему я и не могу решить. Пробовал с шим порта analogWrite(10, n) uno передавать определенные значения, соответствующие каждой кнопке (n =50, 100, 150 и 200) и принимать эти значения с nano через аналоговый порт A0 и analogRead(A0), но не получается нормально прочитать эти значения. Какие еще есть способы или идеи для решения этой проблемы ?

Catholic
Offline
Зарегистрирован: 02.01.2015

Смотрите в сторону последовательного протокола DMX512 (RS-485). Добавится две маленькие и дешевые микросхемы приемопередатчиков и можно передавать все, что угодно на расстояние до 1200 метров по проводу.

Кстати, приемников может быть несколько (до 30 на одной линии).

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

Посмотрите в сторону пинов протокола I2C(TWI) или пины протоколов UART, SPI .. или как он там правильно зовется.

Mr.Privet
Mr.Privet аватар
Offline
Зарегистрирован: 17.11.2015

реализовал подобное на сериал портах, но у меня в проэкте используется 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

sm4511022
Offline
Зарегистрирован: 11.05.2016

Спасибо за советы. Пришел к решению соединить две платы через UART, посредством соединения порта TX первой платы с портом RX второй и портом RX первой с портом TX второй. Никакого дополнительного соединения не потребовалось. Никаких дополнительных функций в исходных кодах программ прописывать не нужно. В результате при записи с первой платы чего либо через функцию Serial.write(), можно прочитать записанное с другой платы через функцию Serial.read() и наоборот. В своем задании, при нажатии на кнопку1 я отправлял символ Serial.read('1'), а на второй плате поставил условие if(Serial.read()  == '1'), зажечь светодиод1. 

PS: Если задействованы оба входа TX и RX платы, при загрузке скетча на плату будет выдавать ошибку. Нужно на время загрузки скетча разьединить две платы.

Arhat109-2
Offline
Зарегистрирован: 24.09.2015

UART - синхронный интерфейс, а I2C (TWI) - "асинхронный". Обеспечить синхронность между двумя МК, мне кажется будет чуть сложнее чем связать их по I2C. Последний на дуньках вполне способен работать вплоть до частот в 880 кгц, что дает около 800 килобод скорости передачи. В то время как на UART, да ещё и программном, вряд ли получите выше 115200.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015