Передача данных по RS485 с Уно на Нано.

Тема в разделе "Arduino & Shields", создана пользователем SDV, 12 июн 2018.

  1. SDV

    SDV Нерд

    Помогите пожалуйста разобраться с проектом. Осваиваю передачу данных по RS485, ни как не могу победить их. Имеется следующая схема (во вложении) Уно является передатчиком, Нано приемником. Какие-то данные передаются, но не те что нужно, какая-то белиберда. Подскажите пожалуйста куда дальше рыть, что я сделал не так?

    Скетч для Уно:
    Код (C++):
    #include <SoftwareSerial.h>

    SoftwareSerial RS485 (7, 6);

    #define DIR 13

    void setup(){
      Serial.begin (9600);
      RS485.begin (4800);

      pinMode (DIR, OUTPUT);
      digitalWrite (DIR, LOW);
    }

    void loop(){
      digitalWrite(DIR, HIGH);
      RS485.println(millis());
      digitalWrite(DIR, LOW);
      delay (1000);
      }
    Скетч для Нано:
    Код (C++):
    #define DIR 8

    void setup(){
      Serial.begin (4800);
      pinMode (DIR, OUTPUT);
      digitalWrite (DIR, LOW);
    }

    void loop(){
      if (Serial.available()) {
        Serial.write(Serial.read());
      }
    }
     

    Вложения:

    Последнее редактирование: 12 июн 2018
  2. Daniil

    Daniil Гуру

    почитайте про rs485.
    rs485 в вашей системе полудуплексный, т.е. в один момент происходит или только передача или только приём.
    В rs485 передача происходит сразу по 2ум проводам.
    + на нано вы не управляете выводом приема/отправки.

    Как я понял, вы сделали эхо. Уно отправляет, нано принимает, потом на оборот и в конце уно отправляет на пк.
    должно быть:
    1. уно передача - нано прием (пин Dir)
    2. уно передаёт - нано ждёт последний символ
    3. уно закончило - нано приняло последний символ
    4. уно приём - нано передача (пин Dir)
    5. уно ждёт последний символ - нано передаёт
    6. уно приняло последний символ - нано закончило
    7. уно передаёт на пк - нано ждёт
    8. goto п.1

    "последний символ" это специальный символ, заранее известный, а не с бухты барахты, для человека понятный, последний символ)

    пункты с 5 по 7 можно изменить, чтобы по приёму уно, уно сразу же отправляло символ на пк.

    тут, похожая проблема, сегодня же) там я показал как принимать данные.
    И учтите, что кто-то должен быть slave, а кто-то master, чтобы не было одновременной передачи туда-сюда.

    Схему не смотрел, только код.
     
  3. SDV

    SDV Нерд

    Не могу понять… на Нано не получится реализовать нормальный прием данных по RS485?
     
  4. Daniil

    Daniil Гуру

    Почему вы так решили? Что не можете понять? Я не экстрасенс.
     
  5. SDV

    SDV Нерд

    Да хз… Из всех коментов помощи, я не смог понять, что мне нужно сделать, что бы Нано начало принимать корректные значения.
     
  6. Daniil

    Daniil Гуру

    В комментах вам отвечают не то, что вам нужно, потому что вы не правильно задаёте вопрос. См. ссылку в моей подписи.
    А то с таким отношением и желание отвечать пропадает.
     
  7. parovoZZ

    parovoZZ Гуру

    Рано, значит, взялся. НЕ понимаешь ты ничего в интерфейсах. Отладь программу сперва на UART интерфейсе, а уже потом перелезай на RS ...