Передача аналогового сигнала на другую Arduino
- Войдите на сайт для отправки комментариев
Втр, 19/08/2014 - 02:29
Доброго времени суток, уважаемые форумчане.Сегодня столкнулся с такой проблеммой - есть две Arduino Uno, в первой в мамяти хранится некая переменная, значение которой необходимо передать на другую Ардуинку.Полазив по справочной информации на этом сайте попытался сделать след.образом: соединил 9-й пин первой Ардуино с выходом А0 второй. В прошивке програмно отправлял с первой через команду AnalogWrite, и на второй, через команду AnalogRead() принимал.В результате получал только 2 значения 1023 и 0 (как я подозреваю оно передавало значения HIGH и LOW).Просветите неграмотного, как можно решить эту проблемму. Большое спасибо.
Если значение целочисленное, то его можно передавать импульсами, например так:
Ардуино 1 устанавливает на выходе PIN3 низкий уровень сигнала. А сам выход PIN3 подключен к PIN3 на второй Ардуино, только там он не выход, а вход.
Ардуино 2 видит, что на PIN3 низкий уровень сигнала, понимает, что сейчас начнётся передача данных и разрешает работу внешних прерываний
Ардуино 1 меняет состояние на PIN4 (каждое изменение состояния это +единица к счётчику)
Ардуино 2 отлавливает по прерыванию изменение состояния на своём PIN4 и прибавляет к счётчику единицу
...
Так повторяется до тех пор, пока Ардуино 1 не передаст всю информацию. По окончании передачи Ардуино 1 устанавливает на выхоlе PIN3 высокий уровень и этим сообщает Ардуино 2, что передача окончена.
Ардуино 2 запрещает прерывания, смотрит, сколько насчитал счётчик и потом использует эти данные так, как вам нужно.
Вот таким образом можно передавать самую разнобразную информацию с одной Ардуино на другую Ардуино.
Но если этот, вне всякого сомнения, гениальный способ вам почему то не подойдёт, то можно сделать так - http://rfanat.ru/s19/ardu-sv2pl.html
===
Удивительно, но оказалось, что информации на русском о соединении двух ардуино по проводам очень мало.
Доброго времени суток, уважаемые форумчане.Сегодня столкнулся с такой проблеммой - есть две Arduino Uno, в первой в мамяти хранится некая переменная, значение которой необходимо передать на другую Ардуинку.Полазив по справочной информации на этом сайте попытался сделать след.образом: соединил 9-й пин первой Ардуино с выходом А0 второй. В прошивке програмно отправлял с первой через команду AnalogWrite, и на второй, через команду AnalogRead() принимал.В результате получал только 2 значения 1023 и 0 (как я подозреваю оно передавало значения HIGH и LOW).Просветите неграмотного, как можно решить эту проблемму. Большое спасибо.
если по вашему варианту, то нужен ЦАП на 21 резисторе по схеме матрицы R2R.... такой ЦАП задействует 10 пинов на выход.... тогда ардуина_1 будет выдавать через ЦАП значения ( в виде напряжения ) 0...1023
ардуина_2 аналоговым пином сможет принимать эти значения, но с ошибкой :(
кроме ошибки ещё одна проблема - СИНХРОНИЗАЦИЯ приёма передачи
:) прикольный способ :) посмотрите патенты ! может этот способ ещё не запатентован :)-
Целесообразнее посмотреть в сторону дельта-сигма модуляции (гугл выдаст массу информации). Для передачи сигнала достаточно 1 линии. Плюс линия для синхронизации. И никаких R2R огородов с десятью выходными пинами.
Вообще-то, вопрос в топике задан как-то странно - в шапке речь идет о передаче аналогового сигнала, в тексте - о передаче некоей переменной. Если аналоговый (периодический, непрерывный, длительный...) сигнал - то дельта-сигма, если отдельно взятая переменная - то стандартные процедуры ардуино. Кроме того, если речь идет-таки об аналоговым сигнале, желательно указать его динамический и частотный диапазоны. Это тоже сильно повлияет на выбор оптимального способа передачи.
Целесообразнее посмотреть в сторону дельта-сигма модуляции (гугл выдаст массу информации). Для передачи сигнала достаточно 1 линии. Плюс линия для синхронизации. И никаких R2R огородов с десятью выходными пинами.
Вообще-то, вопрос в топике задан как-то странно - в шапке речь идет о передаче аналогового сигнала, в тексте - о передаче некоей переменной. Если аналоговый (периодический, непрерывный, длительный...) сигнал - то дельта-сигма, если отдельно взятая переменная - то стандартные процедуры ардуино. Кроме того, если речь идет-таки об аналоговым сигнале, желательно указать его динамический и частотный диапазоны. Это тоже сильно повлияет на выбор оптимального способа передачи.
щас ( чуть позжее ) ТС прочитает - и офуеет!!!!!
не нано его грузить дельтасигмами ! пусть здеся освоится ллы начала !
serginusoid, попробуйте эти способы:
1. по сериалу
Передатчик:
Приёмник:
2. по iic
(резисторы по 4.7k)
Передатчик:
Приёмник:
Архив с либой: https://github.com/madsci1016/Arduino-EasyTransfer
И снова здраствуйте, почти месяц прошел, а я все еще топчусь на том же месте.)) Попытался попробовать все вышеозвученные способы (кроме модуляции, т.к. вообще не в теме). Вообщем все не получалось кроме последнего примера по сериалу(который предложил(а) std) но и с ним не все хорошо. Собственно, с ним я и пытаюсь сейчас работать. Суть в чем: сам пример работает замечательно, но я его немного изменил(в коде Приемника):
Итак, надеюсь, идея понятна. Hо при подсоединении к платке Приемника сервопривода, он(серв), работать не будет потому нет питания, поэтому было логично, по крайней мере для меня питание подключить. И тут начались проблеммы - платка Приемника подключалась через USB порт в результате чего все просто переставало работать(как я думаю, это связано с внутренней логикой контроллера), а в Serial Monitor (Передатчика) вместо нормальных значений появляется абаркадабра какая-то(в коде Передатчика я вставил в loop метод Serial.println(myData.pause) чтобы отслеживать правильность значений). Собственно в чем может быть проблемма?
После вызова метода ET.begin() вывод информации в Serial monitor невозможен. Сериал не может одновременно пропускать через себя и отладочную информацию, и трафик EasyTransfer.
Как вариант, можно передавать по i2c. Приём по этой шине должен работать. Пробовался ли этот вариант?
Кстати, существует реализация через программный сериал, называется SoftEasyTransfer. И кстати, скорее всего всё вышеперечисленное вряд-ли нужно. Читайте пример EasyTransfer_2Way_wServo_Example.
Получается, я не могу подключить сериал к связке из двух ардуин? Если так, то как это можно обойти, если это вообще возможно?
Получается, я не могу подключить сериал к связке из двух ардуин? Если так, то как это можно обойти, если это вообще возможно?
Давайте представим сериал как 2 трубы в одну кричишь из другой слушаешь. Пока у вас 2 человека они могут орать и говорить одновременно. Полный дуплекс. А если 3 и все говорят одновременно, то получается фигня и никто не слышит никого.
Попробуйте
A New Software Serial Library for Arduino
Делает ещё один Serial port на двух цифровых выходах
подскажите пожалуйста как сделать код под мои нужды:
у меня есть плата в которой спаяны и ардуино и мотор шилд.
на ней нехватает свободных пинов, для этих целей я хочу управлять ею с другой платы через UART
вот то что я хочу получить в картинках:
оно же в расширеной версии.
у меня колесный робот. на котором 2 канала моторов. и нужно управлять кучей серво приводов и нагрузок. на камеру и эхолот внимания не обращайте... это так, может быть в будущем.
все перерыл немогу найти приеру где бы через EasyTransfer или еще как то я мог управлять моторами и сервами одной ардуины через другую с геймпада по блютус, о как :)
на данный момент все управление идет через телефон по блютусу, на тирекс контролер
в качестве теста, на другой плате использаван вот такой код, управляется с джойсткика 2 сервы:
код нашел в одной из здешних тем.
Если железки подключены к интренету (можно по ЮСБ), то это можно сделать с помощью проекта Blynk. Пример скетча. Геттинг стартет.