@alex99505

Как организовать быструю передачу данных между двумя ардуино?

Есть две Arduino Mega. На одной есть энкодер (все на пульте - может быть проводным), на другой мотор. И нужно передавать данные на сколько градусов повернуть мотор.

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

По проводам (сериал порт) - если быстро крутнуть ручку энкодера, то идет сбой данных (передавал массивом).

Что еще можно попробовать или может я допускаю ошибки в своих решениях?
  • Вопрос задан
  • 853 просмотра
Пригласить эксперта
Ответы на вопрос 4
@n12eq3
SPI двунаправленный. Очень быстрый, синхронизация автоматическая, потерь "по умолчанию" нет, есть в atmegaXXX.
Обмен побайтно или посылками с подтверждением или без.
Ответ написан
Комментировать
AndyKorg
@AndyKorg
Кнопконажиматель и припоерасплавлятель
Судя по тому что используется радиоканал - расстояние между устройствами большое. А значит проблема может быть не в быстродействии, а в "затяжке" фронтов на длинных линиях. Может стоит попробовать поставить "усилители" сигнала.
Ответ написан
@rmsun
А нужно ли крутить ручку быстро?!.

Почему-то мне кажется, что скорости должно хватать в данном случае.
Скажите, пжл, что такое "сбой данных" и какой массив передаётся -- откуда он берётся и пр.
Попробуйте (на всякий случай) увеличить скорость передачи (передатчик и приёмник должны работать на одинаковой скорости!).
Уберите из программы все ненужные, отладочные Serial.print/write.
Оставьте в программе только энкодер и передачу/приём.
Не работает?
Надо выяснить где ломается.
Проверяйте по отдельности -- энкодер, канал передачи данных, программу (может, её стоит проверить в первую очередь).
Энкодер. На одной Ардуине, без передачи на другую -- только энкодер и ардуиновский монитор. Считывайте -- и в монитор. Поверните энкодер максимально точно на 90 гр, на 180. Известно же что он должен отдать при таком повороте -- смотрите в мониторе что получается.
Канал передачи. Создайте программно на одной ардуине данные, которые должны передаваться. Проверьте в мониторе, что они генерируются правильно. Вот их и передавайте на вторую плату.
Если по отдельности всё работает -- смотрите программу.
Ответ написан
@Hoksmur
Предложу ещё вариант:
Сделать простой протокол (если именно для беспроводки).
1) передачу пакета вести до тех пор, пока не будет получено подтверждение. Пакеты со сквозной нумерацией. Подтверждать не команду, а получение пакета с номером N
2) передавать не что делать, а в каком положении должен находится двигатель
Или
2.1) На сколько повернут его с последнего подтверждённого пакета
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы