Есть такая задача. На Arduino вычисляем некий аналоговый параметр, масштабируем его в диапазон [0, 255] и выводим на PWM-выход. Считываем этот параметр на другом Arduino и хотим получить его значение, считывание предполагается через аналоговый вход. Значение параметра постоянно в течение долгого времени. Вопрос: нужно ли ставить фильтр низких частот между PWM-выходом первого Arduino и аналоговым входом второго для получения стабильного сигнала на входе? Если нужно, то просьба привести схему фильтра и параметры элементов этой схемы. Заранее спасибо.
Дмитрий прав. Разумнее использовать I²C коммуникацию между Arduino и перегонять сигнал без потери информации по проводам условно бесконечной длины. Алсо, PWM ≠ Аналог. PWM — это 0 и 5 В туда-сюда, туда-сюда быстро-быстро; а аналог — это 2.3 В, 3.2 В и т.п. Поэтому передавая сигнал через PWM, принять его в лоб через аналоговый вход не выйдет.
I2C - это хорошо, но может ли это соединение изменять направление передачи данных без ресета? Насколько я понял из примеров использования, режимы Master и Slave устанавливаются функцией Wire.begin() однократно, и дальше одна из Ардуин работает только на передачу данных, а другая только на приём. Мне же надо передавать числовые параметры в обе стороны. Интерфейс Serial, как я понимаю, позволяет передавать данные туда-обратно, но он не поможет, потому что на Arduino Uno всего один serial-порт и через него я обмениваюсь данными с компьютером.
Практически уверен, что двусторонняя комуникация через I²C вполне возможна. Есть обсуждение на официальном форуме и ещё пост в блоге. А про Serial всё не совсем так. На Arduino Uno действительно один аппаратный serial-интерфейс. Но с помощью библиотеки SoftwareSerial, ставшей стандартной с версии Arduino IDE 1.0, можно наплодить сразу пачку дополнительных программных serial-портов. Я не говорю о SPI-комуникации… В общем, возможностей куча. Дерзайте!
NewSoftSerial library. Вот эта библиотека, решает вашу проблему... Я пробовал она работает. Делает ещё один Serial port на двух цифровых выходах. Давайте подробнее расписывать вашу задачу. Первое, что нужно понять, это расстояние между Ардуинами. Дальше какого рода данные, как много, как часто ? Просто есть ещё одно решение, на которое многие не обращают внимание. Правда решение не бесплатное, на IO Shield'ах есть замечательный интерфейс 485. Промышленный интерфейс, передназначеный для систем сбора информации. Правда, поскольку я всё время забываю купить второй IO Shield, ещё не попробовал в действии...
Спасибо, буду пытаться научить I2C интерфейс передавать данные туда-обратно, а если не получится, использую SoftwareSerial. Вообще, задача - это учебный проект по автоматизированному тестированию встроенного ПО. Предполагалось, что есть некое ПО, получающее данные с пары аналоговых датчиков, считающее на их основе несколько выходных числовых параметров и выдающее их на выход, всё это с частотой 10 Гц. Для целей тестирования предполагалось с помощью второй Ардуины эмулировать входные аналоговые сигналы на первую. Ну а раз это невозможно, придётся поменять концепцию и пересылать входы-выходы в цифре через какой-нибудь интерфейс.
Да на самом деле, это всё вполне возможно, чуть аналоговой объвязки и будет Ардуина выдавать аналоговый сигнал, и PWM тут не при чём, просто задачу надо описывать в первом посте Самый частый пример из моей практики, звонит друг и спрашивает, как пользоваться такой-то функцией к примеру Фотошопа? Я всегда прошу начать фразу с: Я Хочу ! И дальше выясняется, что делается, это совершенно другим способом, возможно даже не в Фотошопе... А мы тут все увидели в вопросе полько знакомое и родное PWM, и нас унесло от темы, первая мысль, зачем поротить PWM фильтром? А как оказалось фильтр нужен, а PWM нет