Передача данных между ардуино

Тема в разделе "Arduino & Shields", создана пользователем TiMoN816, 14 июн 2021.

  1. TiMoN816

    TiMoN816 Нерд

    Всем привет! В написании кода не силен, но понимание есть. В общем смысл такой, имеется 2 шт Arduino Nano(Nano1 и Nano2), Nano1 подключена к автомобилю и считывает коды в шине AVC-Lan.
    Примеры кодов AVC-Lan:

    < b 240 1FF 0B4331F10134FFFFFFFF0080
    < b 110 FFF 0712016000050005
    < d 178 110 0B0001121228295768603A27
    < d 110 178 040012588F
    < d 178 110 0E0058129F00000000000000000000

    Nano2 контакты RX и GND подключены к контактам TX и GND Nano1. Nano1 считывает коды и выводит их в Serial. Когда считываю полученные данные из Nano1 с помощью Nano2 в монитор выводятся либо "??????", либо просто набор символов. Подскажите пожалуйста, в чем может быть причина или может есть какой-то пример кода для чтения данных между Arduino?
    Код Nano2 для приема данных:

    Код (C++):
    #include <SoftwareSerial.h>

    SoftwareSerial NANO(0, 1);        // 0 - RX Nano2
    void setup() {
      Serial.begin(9600);               // Скорость обмена данными с компьютером
     
      NANO.begin(250000);               // Скорость обмена данными с Nano1
      Serial.println("Read:");
     
    }

    void loop() {
      if (NANO.available()){ // Ожидаем прихода данных от Nano1
      Serial.write(NANO.read()); // …и выводим их в Serial
      }
    }
     
  2. b707

    b707 Гуру

    Код просто огонь :)
    Первое -На Нано пины 0 и 1 и порт Serial - это одно и тоже, к ним нельзя подключить два разных источника. Выберите для Софтсериала какие-то другие пины, кроме 0 и 1.
    Второе - Софтсериал поддерживаетскорость не выше 38400, а вы ему назначаете 250000
     
  3. TiMoN816

    TiMoN816 Нерд

    1) Пины сменил на 2 и 3.
    2) В этом и проблема, при скорости 9600 передача данных идет отлично, потерь нет, вот скорость 250000 на Nano1 изменить никак нельзя! Только с такой скорость адекватно читается шина в авто.
     
  4. b707

    b707 Гуру

    поменяйте шины местами, вторую нану подключите черех СофтСериал, а к авто подключите аппаратный порт на пинах 0 и 1
     
  5. TiMoN816

    TiMoN816 Нерд

    Пробовал менять, разницы нет никакой. Только на низкой скорости обе нано общаются нормально, но тогда с авто считываются одни ошибки.
    Подскажите пожалуйста, возможно ли как-то взять за константу данные "< d 178 110 0B0001121228295768603A27" и сравнивать их с тем, что выводится в serial? То есть, у нас есть такая строка и как только такая же появится в мониторе мы допустим зажигаем диод. Извиняюсь за глупые вопросы, в написании кода совсем новичок...
     
  6. b707

    b707 Гуру

    Чтобы сравнивать, их надо сначала прочитать без ошибок.
    если из линии с авто читаются одни ошибки, как пишете - то сравнивай-не сравнивай, результата не будет.
     
  7. b707

    b707 Гуру

    новичок - значит надо учиться. Пока не начнете понимать код - ничего путного не выйдет. другого пути нет.
     
  8. parovoZZ

    parovoZZ Гуру

    встать на шину логическим анализатором и всё станет ясно - что передаётся и с какой скоростью
     
  9. Ariadna-on-Line

    Ariadna-on-Line Гуру

    А если сделать буфер данных, - быстро принимать массив данных с авто в буфер , и неспешно передавать его на другую ардуину. Ведь впихнуть невпихуемое в скорость действительно невозможно. А так хоть что-то.
     
    arkadyf нравится это.
  10. b707

    b707 Гуру

    согласен, хотя это зависит от того, в чем у ТС ошибка.
    Если в том. что данных, принятых на скорости 250К слишком много для передачи на 9600 - то вы правы.
    А если у него сам прием на 250К идет с ошибками - никакой буфер не поможет
     
    arkadyf нравится это.
  11. Ariadna-on-Line

    Ariadna-on-Line Гуру

    ТС не написал, откуда он знает что там скорость 250кбпс. Может тоже пальцем в жнебо !?
     
  12. parovoZZ

    parovoZZ Гуру

    ну если стоит задача принять на 250кБод и отдать на 250кБод, то надо брать МК с двумя аппаратными USART. А так вы пытаетесь решить задачу на неподходящем оборудовании. Зачем?
     
    Igor68 нравится это.
  13. TiMoN816

    TiMoN816 Нерд

    ТС Toyota Harrier. Считывается шина AVC-Lan на скорости 250к без ошибок, только такой, ни меньше, ни больше.
     
  14. b707

    b707 Гуру

    как вы установили, что считывается без ошибок?
     
  15. TiMoN816

    TiMoN816 Нерд

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

    b707 Гуру

    почему бы у них не спросить про ваши проблемы?
    Если они "скетч и схему разработали", значит сумели прочитать поток одной ардуиной и передать на другую
     
  17. TiMoN816

    TiMoN816 Нерд

    Они только считывали и этой же ардуиной передавали его обратно для активации в мозгах тс отсутствующего устройства. К сожаление ветка на том форуме давно мертва. В принципе начал изучать написание кода, думаю пока отложу это дело и буду учиться, чтобы не задавать глупые вопросы. Огромное всем спасибо, что откликнулись. Есть ответы, которые очень пригодятся.
     
  18. TiMoN816

    TiMoN816 Нерд

    Если я правильно понял, можно использовать ардуино мега, т.к. там 4 uart. Получается через один порт читать с авто на одной скорости, а через второй передавать на другой скорости?
     
  19. b707

    b707 Гуру

    может и получится на разных скоростях, только непонятно зачем. смысл меги именно в том, чтобы оба канала на одной скорости могли работать.
    А на разных у вас уже есть... Нано...
     
  20. TiMoN816

    TiMoN816 Нерд

    Все, понял, извиняюсь, опять сказал глупость... Но увы, скорость чтения с авто изменить нельзя, а 2 ардуино на такой огромной скорости не могут общаться между собой. Буду изучать и потом что-то думать.