Обмен данными между ардуино
- Войдите на сайт для отправки комментариев
Втр, 16/10/2018 - 12:17
Здравствуйте, подскажите как правильно организовать обменданными в плане вывода данных на второй плате, то есть есть две платы соединенные TX->RX RX->TX GND-GND первая плата отсылает данные вторая получает, но как сделать что бы на второй данные были в таком же виде, что и на первой?
вот код платы которая отсылает
float temp1 = 22.50; float tempratura = 35.60; float set = 40.00; float temp4 = 56.10; void setup() { Serial2.begin(115200); } void loop() { Serial2.print(temp1); Serial2.print(","); Serial2.print(tempratura); Serial2.print(","); Serial2.print(set); Serial2.print(","); Serial2.print(temp4); delay(5000); }
Вот примерный код второй платы которая получает
float temp1 = 0; float tempratura = 0; float set = 0; float temp4 = 0; void setup() { Serial.begin(115200); } void loop() { if(Serial.available()) { temp1 = Serial.read(); Serial.println(temp1); } }
Но как сделать что бы переданные данные temp1 tempratura set temp4 были тикие же как и посланные??
Но как сделать что бы переданные данные temp1 tempratura set temp4 были тикие же как и посланные??
надо разобрать принятое, и распихать по переменным.
подскажите наглядно на примере как это сделать? в таком виде как сейчас данные приходят в обще не в том виде что посланы
"Serial.ParseFloat() примеры" > Google
Если у Вас на исходной плате данные во внутреннем представлении (числа в переменных) и на принимающей плате они должны оказаться тоже во внутреннем представлении, то зачем Вы пре передаче передаёте их как текст? Вот зачем? Чтобы огрести проблем с их распаковкой? Просто передавайте как есть и всё - тогда ничего не надо будет преобразовывать от слова вообще.
подскажите наглядно на примере как это сделать? в таком виде как сейчас данные приходят в обще не в том виде что посланы
Как раз таки они приходят именно в том виде, как посланы. :)
Просто вы их посылаете криво :) - криво они и приходят.
Самый "прямой" способ пересылки. ИМХО - это создать с одной стороны структуру из трех (или сколько там у вас) флоатов, скопировать в нее значения и отправить в Сериал. А на другой ардуине принимать из Сериала именно структуру - тогда вообще ничего распаковывать не нужно будет.
подскажите наглядно на примере как это сделать? в таком виде как сейчас данные приходят в обще не в том виде что посланы
Как раз таки они приходят именно в том виде, как посланы. :)
Просто вы их посылаете криво :) - криво они и приходят.
Самый "прямой" способ пересылки. ИМХО - это создать с одной стороны структуру из трех (или сколько там у вас) флоатов, скопировать в нее значения и отправить в Сериал. А на другой ардуине принимать из Сериала именно структуру - тогда вообще ничего распаковывать не нужно будет.
Покажите наглядно как это правильно сделать плиз
Покажите наглядно как это правильно сделать плиз
Блин, ну я же написал - посылайте как есть безо всякого преобразования в текст.
В моём примере структура сделана для удобства, можно и без неё. И серисал у меня один, потому я просто проверяю правильнсоть (зная, что передавал) и мигаю светодиодом, что мол "всё окей"
Передатчик
Приёмник
Нормально мигает раз в секунду, значит всё принимает правильно.
А синхронизация, а CRC... Он же щас это на газовый котел прикрутит...
А синхронизация, а CRC... Он же щас это на газовый котел прикрутит...
Ну, значить, пополнит нашу колонию на Марсе.
Покажите наглядно как это правильно сделать плиз
Блин, ну я же написал - посылайте как есть безо всякого преобразования в текст.
В моём примере структура сделана для удобства, можно и без неё. И серисал у меня один, потому я просто проверяю правильнсоть (зная, что передавал) и мигаю светодиодом, что мол "всё окей"
Нормально мигает раз в секунду, значит всё принимает правильно.
Проробовал как вы показали в результате Serial.println(package.tempratura); в место 2 печатает 262147
вот код обоих плат
приемник
А что именно у Вас подключено к Serial приемника?
И еще: какие именно модели Ардуино Вы используете в качестве передатчика и приемника?
А что именно у Вас подключено к Serial приемника?
И еще: какие именно модели Ардуино Вы используете в качестве передатчика и приемника?
передатчик Mega приемник NodeMCU к котрой по tx-rx подключена мега и по usb к ПК для монтора порта
Проробовал как вы показали в результате Serial.println(package.tempratura); в место 2 печатает 262147
Ну, мой-то пример у Вас заработал?
А Ваш - так пишите нормально. Вы в приёмнике используете один и тот же Serial и для приёма с другой ардуины, и для монитора порта.
Так чего ж Вы хотите, если передаете одно, а принять пытаетесь совсем другое?
В языке Си не стандартизована длина типа int, соответственно, на разных платформах он может иметь различную длину.
Выведите каждым из контроллеров на печать величину sizeof(int) и подумайте над результатом.
передатчик Mega приемник NodeMCU
Одна 8-миразрядная, а другая 32-х? Замечательно! Тогда переделайте структуру, чтобы поля были одного размрера.
Но моё замечание о том, что на сериале сидят и монитор и передача тоже никто не отменяет.
Так чего ж Вы хотите, если передаете одно, а принять пытаетесь совсем другое?
В языке Си не стандартизована длина типа int, соответственно, на разных платформах он может иметь различную длину.
Выведите каждым из контроллеров на печать величину sizeof(int) и подумайте над результатом.
по этому я и прошу помочь сделать передачу данных ((
Проробовал как вы показали в результате Serial.println(package.tempratura); в место 2 печатает 262147
Ну, мой-то пример у Вас заработал?
А Ваш - так пишите нормально. Вы в приёмнике используете один и тот же Serial и для приёма с другой ардуины, и для монитора порта.
Проробовал как вы показали в результате Serial.println(package.tempratura); в место 2 печатает 262147
по этому я и прошу помочь сделать передачу данных ((
В каком виде помочь? Вам тут столько советов накидали, даже примеры кода дали. Попробуйте хоть чуть-чуть разобраться в них. Или вы ждете. что вам вашу передачу от начала и до конца кто-то напишет?
Даже если и найдется такой доброжелатель - дальше-то что? будет у вас связь между ардуинами, а остальной код кто писать будет. если вы в простейших вещах не разбираетесь?
по этому я и прошу помочь сделать передачу данных ((
Даже если и найдется такой доброжелатель - дальше-то что? будет у вас связь между ардуинами, а остальной код кто писать будет. если вы в простейших вещах не разбираетесь?
остальной код уже есть и давно работает, просто вышел из сторя шилд w5100 на котором был вебсервер с данными и которы по lan был подключен к роутеру который в свою очеред по wifi подключался к домашней сети. Вот в наличии имеется платка NodeMCU V3 вот и решил сделать без всяких роутеров и w5100, а разу она подключается к домашней сети, поднял вебсервер перенес страничку, а вот данные с меги не получается передать (((
остальной код уже есть и давно работает, просто вышел из сторя шилд w5100 на котором был вебсервер с данными и которы по lan был подключен к роутеру который в свою очеред по wifi подключался к домашней сети. Вот в наличии имеется платка NodeMCU V3 вот и решил сделать без всяких роутеров и w5100, а разу она подключается к домашней сети, поднял вебсервер перенес страничку, а вот данные с меги не получается передать (((
ну ежели все перечисленное вы осилили - то вам не составит труда разобраться, как передать три числа по Сериал. информации в предыдущих сообщения более чем достаточно.
Ну или ждите "доброжелателя".
по этому я и прошу помочь сделать передачу данных ((
Какой именно помощи Вы ждёте?
Вы просили "показать наглядно", Вам дали нормально работающий на двух одинаковых ардуинах код.
А когда выяснилось, что у Вас оказывается не две ардуины, а ардуина и NodeMCU, Вам сразу два человека написали, что делать, чтобы код заработал и в этом случае
Так чего ж Вы хотите, если передаете одно, а принять пытаетесь совсем другое?
В языке Си не стандартизована длина типа int, соответственно, на разных платформах он может иметь различную длину.
Выведите каждым из контроллеров на печать величину sizeof(int) и подумайте над результатом.
Одна 8-миразрядная, а другая 32-х? Замечательно! Тогда переделайте структуру, чтобы поля были одного размрера. Но моё замечание о том, что на сериале сидят и монитор и передача тоже никто не отменяет.
Какой ещё помощи Вам надо? Что ещё можно для Вас сделать?
Какой ещё помощи Вам надо? Что ещё можно для Вас сделать?
просто рабочий пример, передачи данных, как переделать структуру что бы поля были одинаковые?
Я Вам дал рабочий пример. Не я виноват в том, что Вы не написали, что у Вас разные контроллеры. Написали бы, пример был бы под них. Писать для Вас ещё один пример мне уже лень, извините. Ответить на Ваш вопрос могу
Передавать точно также (для альтернативно одарённых - точно также) как и в моём примере. Просто описать структуры так, чтобы все поля в них были одинаковго размера (и убедиться в этом - как убедиться Вам Andriano написал).
Мужик, кончай тупить. Возьми тот пример: на стороне NODE ничего не меняй, а на стророне ардуины замени все int на long и будет тебе щастье. И, да, почитай чёнить про программирование, чтобы клоуном-то не быть.
Мужик, кончай тупить. Возьми тот пример: на стороне NODE ничего не меняй, а на стророне ардуины замени все int на long и будет тебе щастье. И, да, почитай чёнить про программирование, чтобы клоуном-то не быть.
Спасибо, вроде что то начало получатся только в этом случае передаются целы числа как быть если нужно передать например 22.56
Спасибо, вроде что то начало получатся только в этом случае передаются целы числа как быть если нужно передать например 22.56
решение "влоб" для тех, кто не хочет копать теорию - перед передачей домножить на 100, после - разделить.
Госспадя, откуда вы такие беретесь, с ниточкоймежду ушей.
Ты моё сообщение до конца прочитал? Там был ответ на этот вопрос
Вот так и быть. А ты думал как-то по-другому?
Ты просил пример - тебе дали. Работает? Работает! Теперь тебе на float надо? А потом на String? Пример есть - делай по образу и подобию. Должен же ты хоть что-то сам сделать.
Как-то слова о поднятом сервере и перенесенной страничке воспринимаюца теперь с изрядной долей недоверия.
Или для web-пограммистов это намайна?
Ты просил пример - тебе дали. Работает? Работает! Теперь тебе на float надо? А потом на String? Пример есть - делай по образу и подобию. Должен же ты хоть что-то сам сделать.
Да во float все норм стало.
Или для web-пограммистов это намайна?
Деда, поверь личному опыту: там творится кромешный пи@дец: амбиций - на зарплату в сотню тысяч, знаний - нихера. Начинаешь спрашивать про обычные приёмы, типа декомпозиции - в ответ выпученные глазки и вопрос "а что это?". Там в пустоголовках одни фреймворки, теорию учить не нать. Ремесло, хуле.