Взаимодействие ардуин, или digitalRead?!

wowsel
Offline
Зарегистрирован: 14.05.2016

Здравствуйте.

У меня есть следующая задача, а именно:
Есть ардуинка Uno R3 к которой по 8 цифровым портам подключается другое цифровое устройство. 

Логика работы проста до безобразия. 

Ардуинка посылает по портам логическую единицу, второе устройство её принимает и отправляет ардуинке ответ таким же темпом, а первая в это время пристально слушает. 

Бьюсь уже 4 дня, нарисовал схему того, что есть сейчас во фриз. Загрузить сюда не удалось, загрузил на обменник

http://i80.fastpic.ru/big/2016/0515/a4/28f5db7957c4e091ce065a18c78cb2a4.jpg

Код девайса с диодами http://codepaste.net/4twyjm

Код девайса с кнопками http://codepaste.net/fxoevh

Сейчас всё работает в таком режиме:
Устройство с диодами (тестовое) правильно считывает сигналы и включает диоды по ним.

Устройство с экраном (главное) правильно отдаёт 4 команды, все единицы, все нули, бегущий 0 и бегущая единица.

Теперь нужно как то заставить их отвечать друг другу и слушать собеседника.

Пробовал pulseIn, пробовал просто читать состояние выходов, но при переключении главного с OUTPUT в INPUT состояние у него остаётся старое и не меняется при любом раскладе. Потом начинает твориться неразбериха полная. 
Я уже даже не знаю что придумать. Помогите советом, или делом, куда копать. 

Спасибо

wowsel
Offline
Зарегистрирован: 14.05.2016

Не могу отредактировать свой пост.
По поводу множества закоменченных строк в коде - это всё мои попытки их разговорить. 

T.Rook
Offline
Зарегистрирован: 05.03.2016

Зачем же так громоздко? Используйте последовательную передачу. Гляньте, задача практически Ваша:

http://arduino.ru/forum/programmirovanie/peredacha-znachenii-s-odnoi-pla...

wowsel
Offline
Зарегистрирован: 14.05.2016

T.Rook пишет:

Зачем же так громоздко? Используйте последовательную передачу. Гляньте, задача практически Ваша:

http://arduino.ru/forum/programmirovanie/peredacha-znachenii-s-odnoi-pla...

Спасибо, изучу стандарт. 
Однако в даьнейшем вместо тестовой ардуины будет применяться другое устройство с неизвестным протоколом передачи.

Всё, что я о нём знаю - это оно умеет принять сигнал (логический 0 или 1) по проводу (проводов 8, по каждому надо обработать отдельно) и ответить по этому же проводу свой 0 или 1.  А может и не ответить. 

Ещё есть вариант, что провод не подключен к устройству и тогда об ответе речи не идёт, но ардуина должна как - то узнать об этом.

Спасибо

T.Rook
Offline
Зарегистрирован: 05.03.2016

wowsel пишет:

..будет применяться другое устройство с неизвестным протоколом передачи.

Запрограмить "неизвестный протокол" это круто.

wowsel пишет:

Всё, что я о нём знаю - это оно умеет принять сигнал (логический 0 или 1) по проводу (проводов 8, по каждому надо обработать отдельно) и ответить по этому же проводу свой 0 или 1.  А может и не ответить. 

ну тогда и выбор невелик: перешли в режим выхода, отдали сигнал, перешли в режим слушания, слушаем некоторое время, принимаем решение. Не забыли схемотехнически защитить порт МК от передачи "1" в момент ответа  нулем с другой стороны. Только как Вы будете синхронизировать это? Особенно если протокол не известен.

перечитал. похоже на бред :(

 

wowsel
Offline
Зарегистрирован: 14.05.2016

Задача изменилась)) 

Теперь оби ардуинки соединены через UART, земля общая.

У первой все выходы OUT и выставлено некоторое значение, она отправляет сигнал второй, что пора читать.

Вторая в INPUT через digitalRead читает значения и отправляет по UART их первой, которая в свою очередь сравнивает отправленные и принятые.

Данные передаются нормально по порту, но у принимающей ардуинки значения - полный бред. Она просто читает рандом с портов какой то. 
Как можно вылечить "шум" в портал? Порты от 5 до 12. 
Спасибо

bwn
Offline
Зарегистрирован: 25.08.2014

wowsel пишет:

Данные передаются нормально по порту, но у принимающей ардуинки значения - полный бред. Она просто читает рандом с портов какой то. 
Как можно вылечить "шум" в портал? Порты от 5 до 12. 
Спасибо

Подтяжка?

wowsel
Offline
Зарегистрирован: 14.05.2016

Да, спасибо! 

Уже всё решил сам))
Тему можно закрывать.