Беру два Iskra Neo и два RS-485 Shield Задача: С компьютера передать на ведущий Arduino символ "а", а уже он передает команду на ведомый, который в свою очередь зажигает светодиод. Собираю схему: Подключаю по USB первый Arduino с компьютером как обычно. Загружаю скетч типа: Код (C++): int ledPin13 = 13; int incomingByte; void setup() { Serial.begin(9600); pinMode(ledPin13, OUTPUT); } void loop() { if (Serial.available() > 0) { incomingByte = Serial.read(); if (incomingByte == 'a') { digitalWrite(13, HIGH); } if (incomingByte == 'b') { digitalWrite(13, LOW); } Посылаю с монитора "а" - светодиод загорается, "в" - гаснет. Поскажите примеры подключения двух Arduino при помощи RS-485 Shield. На вики есть пример "Карта активности", но там больше про то как рисовать проемы. Для того чтобы понять, надо для начала просто включить и выключить светодиод. Таких примеров не нашел. Понимаю, что нужно передавать через Serial, но он у меня занят на ведомом. Надо переключить на Serial1. Но как это сделать именно на RS-485 Shield. Или это невозможно и надо все перепаивать? Хорошо, тогда как подключить пины TX и RX к другим контактам управляющей платы и какие это вызовет изменения в программе. Наконец, что должно быть прописано для передачи символа "а" с одной Arduino на удаленную. Уверен что просто, но не найду где почитать. Спасибо.
Может вам отдельные модули RS485 купить, цена им 100 руб за пару. И цеплять их можно на любые Serial хоть аппаратные хоть программные.
Хорошо. Наверное так получится короче. Тогда собираю такую схему: Linux компьютер, к нему подключаю USB-RS485 (куплю). По двум проводам подключаю мои два комплекта Iskra Neo плюс RS-485 Shield Буду пробовать включать и выключать светодиод с компьютера на удаленных устройствах. Подскажите код кто уже сталкивался. Или интересные ссылки. (Если получится запустить, то опубликую тут описание рабочего варианта и примеры кодов) Ролик "Проводное соединение Arduino при помощи RS485" посмотрел". Спасибо. Там наглядно показано как TX и RX менять. Но если управлять напрямую с компьютера, то это станет не так важно. Хотя хотелось бы все-таки узнать про RS-485 Shield поподробнее. Иначе получается микросхема за 20 рублей намного эффективнее, раз все равно паять.
Принцип работы такой же как обычный UART, то есть в IDE все через класс Serial. Если устройств более двух, то чуть сложнее, надо их согласовывать чтобы не галдели хором. Что до шилда, то он удобен только своим размером и креплением, больше преимуществ нет. Хорошо для прототипирования. А доя готового устройства можно вообще взять голые MAX485(7), припаять к ним нужные резисторы и все будет замечательно работать за копейки.
Неважно. В наличии два устройства. Для начала зажигать светодиод на одном. Пока не могу управлять с компа на первой паре Iskra Neo плюс RS-485 Shield просто мигаю 13 светодиодом и посылаю по Serial символ. Пытаюсь отловить его на втором устройстве. То есть сводим задачу к более простому варианту. Есть пара Iskra Neo плюс RS-485 Shield Раз в две секунды посылаем в Serial символ "A", через две секунды "B". Соединяем со второй парой Iskra Neo плюс RS-485 Shield двумя проводами. Вторая пара принимает символ А - зажигает 13 светодиод. Получает В гасит.
Вы не поняли, я уточнил в предыдущем ответе. Мигать светодиодом получается. Вопрос как это передать на удаленную Arduino, чтобы светодиод мигал по команде первого
На одном Serial.write() когда надо, на другом можно или постоянно опрашивать в ожидании или сделать по прерыванию через Serial.event().
Что-то пока не работает. Пробую такой вариант. Может где ошибка. Ведущее: Код (C++): int EN = 2; void setup() { // initialize digital pin 13 as an output. pinMode(13, OUTPUT); pinMode(EN, OUTPUT ); Serial.begin (9600); } // the loop function runs over and over again forever void loop() { digitalWrite(EN, HIGH ); // enable send digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level) Serial.print ( 'A' ); delay(2000); // wait for a second digitalWrite(13, LOW); // turn the LED off by making the voltage LOW Serial.print ( 'B' ); delay(2000); // wait for a second } Ведомое Код (C++): #define LED_PIN_YELLOW 13 void setup() { // открываем последовательный порт на пинах 1 и 0 // к которому подключён модуль RS-485 Serial.begin(9600); // 5 пин в режим выхода pinMode(LED_PIN_YELLOW, OUTPUT); } void loop() { // если появились данные с модуля RS-485 if (Serial.available() > 0) { // считываем char c = Serial.read(); // если символ равен 'A' if (c == 'A') { // зажигаем светодиод digitalWrite(LED_PIN_YELLOW, HIGH); } else if (c == 'B') { // если символ равен 'B' // гасим светодиод digitalWrite(LED_PIN_YELLOW, LOW); } } }
Попробуйте вместо Serial.print использовать Serial.write. На первый взгляд все правильно, может связи нет? А и Б не перепутали?
Не помогло. Перепроверил. Перепроверил еще раз. Прозвонил, менял местами. Там на плате два переключателя еще есть. Но методом научного тыка проверил во всех положениях. Светодиод на второй плате не мигает. Есть кто на форуме, кто удачно связывал через RS-485 Shield ?
Короче разобрался. Ошибки в коде никакой нет. Есть особенность платы Iskra Neo . В лоб с RS-485 Shield она работать не будет. Надо подключаться по другому и обходить программно. Удачно соединилась с Arduino Leonardo То же самое при работе с протоколом i2c.