Официальный сайт компании Arduino по адресу arduino.cc
Отправка в разные порты SoftwareSerial
- Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Пт, 09/08/2019 - 02:38
Доброго дня. Задача состоит в том, чтоб отправлять из терминала в ардуино команды, а сама ардуино понимала на какой порт слать. Вот к примеру из терминала отправляю команду "port_0001:AT"
#include <SoftwareSerial.h> SoftwareSerial port_0001(10, 11); // TX, RX SoftwareSerial port_0002(12, 13); // TX, RX void setup() { Serial.begin(9600); port_0001.begin(9600); port_0002.begin(9600); } void loop() { while (Serial.available() > 0){ char recieved = Serial.read(); //получаю данные из терминала, в моем случае это "port_0001:AT" String strData = String(recieved); //перевожу в string if (strData.indexOf("port_0001") > -1){ //ищу "port_0001" port_0001.write(recieved); //если нахожу, то передаю в ардуино (надо будет еще отсечь данные до двоеточия) } if (strData.indexOf("port_0002") > -1){ port_0002.write(recieved); } } }
Подскажите пожалуйста, может есть готовые решения и я изобретаю велосипед?
C char recieved намаился, он в потоке постоянно меняется, а за пределами while пустой.
Из Serial читается один символ, а не строка ...
tryinfinity - хоть это и не совсем по теме вопроса - но имейте в виду, что два СофтСериала одновременно использованы быть не могут, так что даже после того, как вы разберетесь с приемом - вышеприведенный код работать не будет
C char recieved намаился, он в потоке постоянно меняется, а за пределами while пустой.
еще бы! - он за пределами while вообще не существует...
вам прочитать что-нибудь про области видимсоти переменных
tryinfinity - хоть это и не совсем по теме вопроса - но имейте в виду, что два СофтСериала одновременно использованы быть не могут, так что даже после того, как вы разберетесь с приемом - вышеприведенный код работать не будет
Т.е. не получится отправить из терминала сначала на первый СофтСериал, получить ответ, а потом тоже самое на второй?
А как быть тогда, если мне нужно общаться с несколькими девайсами?
Т.е. не получится отправить из терминала сначала на первый СофтСериал, получить ответ, а потом тоже самое на второй?
А как быть тогда, если мне нужно общаться с несколькими девайсами?
Нет, в теории работать с двумя софтсериалами возможно, но при смене нужно их переключать методом listen() и одновременно принимать данные может только один порт. На практике, по отзывам, даже это работает с некоторыми глюками.
Если нужно общаться несколькими девайсами, самое простое - взять контроллер с несколькими Сериалами - Ардуино Мега или СТМ32
Нет, в теории работать с двумя софтсериалами возможно, но при смене нужно их переключать методом listen() и одновременно принимать данные может только один порт. На практике, по отзывам, даже это работает с некоторыми глюками.
Если нужно общаться несколькими девайсами, самое простое - взять контроллер с несколькими Сериалами - Ардуино Мега или СТМ32
Вот блин, на Меге всего 4 сериала, а мне надо много. Если купить на каждый девайс UART, то на компе нужно кучу USB.
С многими устройствами общаются по шине. 485 или i2c или ещё что нибудь.
Вот блин, на Меге всего 4 сериала, а мне надо много. Если купить на каждый девайс UART, то на компе нужно кучу USB.
в смысле USB Hub,11 Ports маловато или дороговато будет? так это просто пример...
и не пробовал цеплять много ардуинок на хабы - может и заглючит... тут реальнее использовать другие интерфейсы, как уже написали выше.
Спасибо что вовремя меня остановили, а то бы потратил кучу времени и денег)
Если не сложно, дайте пожалуйста пример железки, чтоб подключить к ней много девайсов с обменом через RX TX.
Если не сложно, дайте пожалуйста пример железки, чтоб подключить к ней много девайсов с обменом через RX TX.
много - это сколько?
Если не сложно, дайте пожалуйста пример железки, чтоб подключить к ней много девайсов с обменом через RX TX.
много - это сколько?
32
Если не сложно, дайте пожалуйста пример железки, чтоб подключить к ней много девайсов с обменом через RX TX.
много - это сколько?
32
Может расскажете, что это такое будет? Что-то я очень сомневаюсь. что какая-то ардуинка сможет потянуть такое хотя бы по производительности и обьему памяти...
Вы не обижайтесь, но по некоторым смешным ошибкам в коде в первом сообщении - мне кажется что в программировании вы новичок. Новичкам, знаете ли, свойственно сразу замахиваться на мега-проекты - это обычно происходит от непонимания обьема работы и ограничений ардуины...
Может расскажете, что это такое будет? Что-то я очень сомневаюсь. что какая-то ардуинка сможет потянуть такое хотя бы по производительности и обьему памяти...
Вы не обижайтесь, но по некоторым смешным ошибкам в коде в первом сообщении - мне кажется что в программировании вы новичок. Новичкам, знаете ли, свойственно сразу замахиваться на мега-проекты - это обычно происходит от непонимания обьема работы и ограничений ардуины...
Т.к. тема пошла по другому направлению, возможно ли перейти на личное общение. На данном форуме такой опции нет, поэтому прошу оставить контакт для связи, либо написать мне на tryinfinity@gmail.com
Разумеется за индивидуальные консультации с меня причитается.
ОФФТОП
Вы не обижайтесь, но по некоторым смешным ошибкам в коде в первом сообщении - мне кажется что в программировании вы новичок. Новичкам, знаете ли, свойственно сразу замахиваться на мега-проекты - это обычно происходит от непонимания обьема работы и ограничений ардуины...
Это вы ошибаетесь! "Дайте мне точку опоры и ARDUINO сервомашинкой перевернет весь мир" , заметьте я о времени выполнения ничего не сказал :))) А ресурса МК хватит - если не бракованый ;).
На берите в гугле RS485 и почитайте описание. Скорее всего он Вам подойдёт. Для него USB адаптер стоит 50 руб и для каждой ардуины адаптер Rx Tx 40 руб. На пару проводов можно повесить до 32 устройств на 1200 метров. Да ещё общение можно устроить по протоколу MODBUS ( за ним тоже в гугль).
Спасибо за рекомендацию, но я не пойму пока что общей схемы работы по RS485 :)
Ясное видение есть как это сделать через 32 адаптера USB - TTL PL2303, скрутить 32 USB порта (4*4*2), ну и обращаться к каждому из них терминалом через COM порт. Но настараживает гирлянда из USB-HUB (хотя к ней можно подвести отдельно питание).
Ваша рекомендация оптимальней? Если да, то начну копать в этом направлении.
на самом деле еще можно на каждом девайсе поставить WiFi модуль типа ESP-01 - он как раз подключается по RX TX, а дальше рулить всеми девайсами через сеть. У каждого будет свой адрес и проводов не надо. В принципе тут можно и не 32. а много больше устройств завести. если они разом в эфир срать не станут...
Я не знаю Вашей задачи. Рекомендовать что то не могу. Что бы что то рекомендовать, надо знать как минимум какая зависимость устройств друг от друга. Команды дает только компьютер или какая нибудь ардуинв может влюбой момент времени потребовать внимание к себе? Расстояние на котором находятся ардуины? Как часто происходит обмен? Нужна ли система реального времени или можно подождать несколько сотен милисекунд до выполнения команды? Есть ешё вопросы по питанию этой гирлянды - земля будет общая или у каждой ардуины своя?
на самом деле еще можно на каждом девайсе поставить WiFi модуль типа ESP-01 - он как раз подключается по RX TX, а дальше рулить всеми девайсами через сеть. У каждого будет свой адрес и проводов не надо. В принципе тут можно и не 32. а много больше устройств завести. если они разом в эфир срать не станут...
Очень интересный вариант. Если я правильно понял, то я WiFi модуль по RX TX подключаю к своему девайсу и управляю им через IP адрес GET/POST запросом? Ардуина нужна будет только чтоб указать сетевые настройки WiFi модулю.
Очень интересный вариант. Если я правильно понял, то я WiFi модуль по RX TX подключаю к своему девайсу и управляю им через IP адрес GET/POST запросом? Ардуина нужна будет только чтоб указать сетевые настройки WiFi модулю.
этот модуль содержит свой контроллер, который может программироваться в Ардуино ИДЕ сам по себе, без ардуин