Добрый день уважаемые Ардуиншики, Нужна помощь. Вот уже как 4 месяца бьюсь с интерфейсом RS 485. Не могу заставить работать всю эту канитель. Идея проста 1 Мастер контроллер и 4 слейва. Мастер опрашивает каждый слейв, и если на одном из слейвов срабатывает датчик температуры, то мастер контролер отдает инструкции на включение одного из светодиодов того же слейва где сработал датчик температуры. Если есть хоть какие то простые скетчи по передачи данных по RS 485 то прошу мне в этом помочь. На этой фотке изображен Мастер контроллер и два слейва, а так слевов будет 4. Датчики температуры на фото не стал соединять, но имейте в виду что один из пинов в слейве датчик температуры, а остальные две светодиоды. И посмотрите пожалуйста правильно ли я все соеденил)))
Соединение это х... Главное организовать протокол. Без организации простого протокола ничего не получится. Хотя бы организуй как с DS18B20.
Ну вот именно мне и нужен протокол обмена данными. А то что ты мне написал про датчик температуру он мне пока неинтересен.
протокол передачи данных — набор соглашений интерфейса логического уровня, которые определяют обмен данными между различными программами.
По подключению, сложно сказать по фото, мне не все было видно. Для начала подключите 2 устройства, по данной схеме, мастер и слейв. Для 3-х и более, данные модули нужно "допилить", почитайте тут - http://forum.amperka.ru/threads/Стабильность-сети-rs485.8502/. Затем определитесь как Вы хотите передавать данные, по какому-то протоколу, к примеру Modbus RTU\ASCII или просто отправлять массив с данными между Arduino. Сам протокол Modbus RTU, вещь хорошая, но для такой задачи он немного избыточен. Мне кажется, Вам проще и быстрее сделать передачу массивов данных между Arduino. Вот не плохой пример - http://wiki.amperka.ru/projects:activitymap. Если захотите Modbus RTU, есть не плохая библиотека - https://habrahabr.ru/post/249043/, в качестве слейва сам использую, в качестве мастера не проверял. У нее есть небольшие ограничения, но судя по задачи они Вас не коснутся. UPD. Конечно у Modbus RTU есть свои не оспоримые плюсы в плане надежности, проверке целостности передаваемых данных. Исходил из того, что проект хоббиный, поэтому советовал простую передачу массивами.
Доброго времени суток. Пытаюсь разобраться с RS485 на простом примере. Почему-то не получается, подскажите пожалуйста, где и что я сделал не так? Схема во вложении. Скетч на ардуино нано: Код (C++): [code] #include <SoftwareSerial.h> SoftwareSerial RS485 (0, 1); #define DIR 10 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++): [code] #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(){ if (RS485.available()){ Serial.write(RS485.read()); } }
@SDV, а зачем вы на Nano инициализируете SoftwareSerial на тех же пинах на которых работает железный Serial? При этом железный Serial инициализируется, но не используется. Код (C++): #define DIR 10 void setup(){ Serial.begin (4800); pinMode (DIR, OUTPUT); digitalWrite (DIR, LOW); } void loop(){ digitalWrite(DIR, HIGH); Serial.println(millis()); digitalWrite(DIR, LOW); delay (1000); }
НЕ понял, хочешь преобразователь портов что ле? Вот для леонардо. Набросал за 30 секунд. Лично проверено. Код (C++): #include <SoftwareSerial.h> void setup() { Serial.begin(9600); while (!Serial) { } Serial1.begin(9600); Serial.println("Goodnight moon!"); } void loop() { if (Serial1.available()) { Serial.write(Serial1.read()) Serial.println(Serial.read()); } if (Serial.available()) { Serial1.write(Serial.read()); } }
Залил Ваш скетч, теперь Уно начала принимать сигнал, но не корректный, не миллисекунды как нужно, а букву «я» =)) каждую итерацию приема данных… Попробовал поменять местами передатчик и приемник. Передатчиком сделал Уно, приемником Нано, опять ни чего не получается… Помогите пожалуйста разобраться со скетчами…
Попробовал поменять местами передатчик и приемник. Передатчиком сделал Уно, приемником Нано. В мониторе порта на Нано какая-то белиберда... Куда дальше рыть? Скетч для Нано Код (C++): #define DIR 8 void setup(){ Serial.begin (4800); pinMode (DIR, OUTPUT); digitalWrite (DIR, LOW); } void loop(){ if (Serial.available()) { Serial.write(Serial.read()); // digitalWrite(DIR, LOW); // delay (1000); } } Скетч для Уно Код (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(){ // if (RS485.available()){ // Serial.write(RS485.read()); digitalWrite(DIR, HIGH); RS485.println(millis()); digitalWrite(DIR, LOW); delay (1000); }