Одновременное общение ардуин по проводу и по радиоканалу.
- Войдите на сайт для отправки комментариев
Бьюсь уже вторую неделю. Есть три ардуины. Две должны общаться по проводам. Одна из них должна общаться с третьей по радиоканалу.
Для общение по проводам пробовал варианты SoftwareSerial и вариант Wire. Пришел к выводу, что через Wire гораздо стабильнее связь и проще реализуема.
По радиоканалу тоже просто реализовал через VirtualWire.
Но вот со "склейкой" на той ардуине, что по проводам и по радиоканалу никак не выходит, т.к. библиотеки Wire и VirtualWire начинают конфликтовать.
Пробовал реализовать все только через VitrualWire. Почти получилось, остался затык. На той ардуине, что по проводам и радиоканал, когда к TX-пину (передающему) подключен провод и передатчик, то все замечательно, сигнал одновременно идет по проводу на одну ардуину и по радиоканалу на вторую, а вот на RX-пине (принимающем) начинается чехарда и сигнал по проводу и по радиканалу начинают друг друга давить.
Пробовал менять RX-пин через такую реализацию
if(R_RX==3) { vw_rx_stop(); R_RX=2; vw_set_rx_pin(R_RX); // устанавливаем пин приемника vw_setup(1500); // скорость передачи данных в Kbps vw_rx_start(); }
, вешая анализ приходящего сигнала по проводу на 2-пин, по радио на 3 пин и используя
attachInterrupt(0, receive_Radio, CHANGE); // вешаем функцию приема на прерывание attachInterrupt(1, receive_Line, CHANGE);
Но тогда начинают теряться передаваемые сообщения.
Поэтому прошу помощи в идее.
Либо надо как-то разделить работу библиотек Wire и VirtualWire, либо как-то придумать как разделить приходящий сигнал с провода и по радио. Да, пробовал еще подключать через диоды провод и радиоприемник (по прямой и обратной полярностью) - не помогло.
хз че ты там делаешь.
но по логике надо сеансы связи делать с главной - одной .
другие передают только когда получат сигнал с главной о начале приема.
вот и все. таким образом и будешь вначале опрашивать по проводу потом по радио.
Еще нюанс.
Ардуина, что по проводу и по радио принимает и отсылает по проводу через Wire все отлично, одновременно с этим может принимать радио. Все замечательно работает. Но стоет ей только послать команду по радио, тут же все затыкается, символы на экран перестают правильно выводиться, через Wire начинают вместо правильных сообщений отсылаться "пустые" строки с 0-м количеством входящих байтов.
Вот как реализованы функции радиоприема и радиопередачи
А вот как реализованы команды приема и передачи через Wire (пины A4 A5)
Paul_B, у меня складывается впечатление, что Вы пытаетесь по одному и тому же каналу общаться одновременно с разными устройствами.
Ответьте для начала на вопрос: через какие пины происходит общение с одним устройством, и через какие - с другим?
Я уже все реализовал.
14 пин (можно любой) - передача по проводу и по радиоканалу (одновременная рассылка возможна)
3 (можно любой) - прием по проводу
2 (можно любой)- прием по радиоканалу.
Анализ по какому каналу ринимать (с какого пина) идет перед рассылкой. Пожно на передачу по проводу и радиоканалу использовать разные пины, но я решил сэкономить.
Если интересно, могу привести коды реализаций.
Лично мне не интересно, написал исключительно из желания помочь. Но раз у Вас все работает - замечательно.
Вот привожу пример, который можно использовать так же в качестве передачи структуры данных только при помощи библиотеки VirtualWire.h (т.е. без применения библитеки EasyTransferVirtualWire.h), что существенно экономит ресурсы ардуины (и основную память и память для переменных).
Вот код для ардуины, которая используется как сервер (основной узел) и рассылает данные по радиоканалу и по проводам.
Код для приемника по радио и по проводу одинаков и отличается только настройкой скорости соединения, ну и должны отличаться My_id номер и при необходимости пины RX-TX