Помогите с Serial
- Войдите на сайт для отправки комментариев
Пнд, 03/04/2017 - 12:58
//////Код ведомой ардуины//////// #include <SoftwareSerial.h> SoftwareSerial mySerial(6, 7); // RX, TX void setup () {Serial.begin(57600); mySerial.begin(4800); } void loop() { int t=// тут информация с датчика температуры int h=// тут информация с датчика влажности mySerial.write(t); mySerial.write(h); } ///////Код ведущей ардуины///////// #include <SoftwareSerial.h> SoftwareSerial mySerial(6, 7); // RX, TX void setup () {Serial.begin(57600); mySerial.begin(4800); } void loop() { if(mySerial.available()) { Serial.println( mySerial.print(h)); Serial.println( mySerial.print(t)); }
Здравствуйте, имеются 2 ардуины, соеденены между собой по SoftSerial, так вот, мне необходимо с одной ардуины передать температуру и влажность на другую ардуину чтобы та вывела информацию на LCD дисплей. Я не пойму как мне передать сигнал температуры и влажности с одной платы на другую. Код набросал такой, но передачи нет.
мошт, передача и есть, только вы не читаете на ведущей ардуине СофтСериал, а пишете в него зачем-то. Куда-то надо вставить read(); :)
точно,не указал, в 25 строке у меня есть data=mySerial.read();
Но как мне из data выделить конкретно температуру и влажность., а то в Serial.print в COM порту поочередно выводятся данные о температуре и влажности, а мне надо на LCD выводить отдельно температуру, и отдельно влажность. Я так понимаю надо побитово считывать информацию с data.
Перед температурой пиши символ"Т" при чтени по нему определяй и его убирай. ил можеш писать влажность с % если есть символ проценты то ето влажность и выводи с этим символом
Ничего не понял) Можно поконкретней с примером?)
типа так mySerial.write("T",t);
а при чтении Serial.print(T);
бред получается) не работает
Ничего не понял) Можно поконкретней с примером?)
типа так mySerial.write("T",t);
а при чтении Serial.print(T);
бред получается) не работает
Выбросьте всю траву и не курите её больше, глядишь, перестанете бредить и всё начнёт получаться.
Почитайте про параметр функции write и напишите нормально.
Отправляется строка вида ^1:текст выводится в 1 строку если 2 выводится во вторую строку. куски кода надергал с разных мест дооформить
мне нужно выводить данные с датчиков, а они постоянно обновляются, поэтому if s==чему ио тут не подходит.
У меня эта конструкция работает как дисплей покупателя выводя даные с весов с интервалом в пол секунды. передовай информацию с датчиков с нужным тебе интервалом и выводи. Врят ли у тебя температура и влажность меняются очень быстро и нужно менять показания чаще чем раз в надсать секунд.
Так я бы вывел, но только не получается.
Попробовал так, опять не работает.
gzp13
а Вы бы не потрудились выкладывать именно те коды, котрые запускаете, а не какой-то бред?
В том коде. что Вы называете "ведущей" в строке 30 используется переменная data, которая нигде не описана. Этот код не может компилироваться! В том же самом коде Вы печатаете t но ничего её не присваиваете.
Напишите нормально что Вы хотите делать (словами) и потом (только потом) чётко слово в слово переписывайте в виде программы.
это код приемной ардуины
Т.е. мой совет сначала написать словами послан "на"? Ну, тогда продолжайте своё творчество, удачи. Вы, например, знаете какого типа параметр должет быть у функции write? Вы ей в 16 и 17 строках пихаете float, это правильно? Она его нормально переваривает?
Нда, оригинально тут помогают.Видимо такие же специалисты как и я.
Врайт зачем юхаете это бинарные данные вам надо Принт
Вам правельно написали напишите словами что хотите потом это переводим в команды. сразу в командах у вас както совсем плохо получается
как вариант тупо соедините 4 проводами и передовайте температуру и влажность на разные порты
Инт А=0; флоат В=0;
Если А!=В Тогда
Принт ("О блин в програмировании ноль не равен нулю);
Объясняю, на одну ардуину через модуль NRF24L01 поступают данные о температуре и влажности.Эта ардуина через uart подсоединена к другой ардуине(сделал так потому что не хватает пинов).Далее ардуина на которую приходят данные о температуре и влажности должна через uart отправить эти данные на другую ардуину, которая подключена к дисплею.Так вот, я не понимаю как мне конкретно отправлять температуру и влажность, чтобы я на приемной ардуине мог опознать что это температура и отправить ее куда надо, а это влажность.Например вот на молулях на 433Мгц все поеятно, указываю в передающей ардуине данные, соответственно в приемной тоже, и все, отправил ткмпературу, на приемнике принял. А вот через serial не получается, как ухазать что мне нужна температура и влажность?
Используй принт. при передаче и передовай сразу два значения.
Т-температура
В-влажность
Передаем Т*1000+В;
При приеме разбирай.
А можно поконкретней?) с примером.
Типа так
С передающей Serial.print(t), Serial.print(h)
А как я на приемной ардуине пойму где эти сигналы?
Serial.Print(1000+T)
Serial.Print(H)
На приемной стороне читаеш значение Если меньше или равно 100 (влажность небывает больше 100) то это влажность. если больше то отнимаеш 1000 и получаеш свою температуру
Нда, оригинально тут помогают.
Вам невозможно помочь. Вам говоришь "сделай это" - Вы плюёте, не делаете и требуете пример (то бишь готовый код).
Вы, похоже, не понимаете разницы между помочь и сделать за Вас.
Видимо такие же специалисты как и я.
Да, Господь с Вами! Нам до Вас - как эйтимеге до интель ксеона
Я добрый с утра. Хорошо день начался, вчера сделал прекрасное песто, обнаружив в Ашане зеленый базилик. ;)
Так что объясню. Только на словах, без кода, ессно. Код - стоит денег.
Если ТС нихера не поймет, вероятность чего 99%, то это его траблы.
------------------------------
1. Метод write(), класса Print, от которого унаследован и сериал и софт-сериал, подразумевает аргумент типа uint8_t ож же byte, он же unsigned char, и НИКАКОГО ДРУГОГО.
2. Сериал, что хард, что софт, передает данные посимвольно и собирать их в кучу нужно посимвольно.
3. класс сериал, и софт тоже, унаследован от Stream, который содержит методы для приема чисел. Чтобы не ипать моск, собирая числа посимвольно.
Возможно некоторые из них, которые все равно уже скомпилированы в Вашу прогррамму и размер ее не увеличат, будут полезны. Поглядите на parseInt и parseFloat.
Подниму тему, если позволите.
С записью в Serial строк все понятно, Serial.Print. А чтение у нас возможно только по байту, или сразу некий пакет целиком считать тоже есть варианты? В доке вижу только read, который читает побайтно. Не то, чтобы это было проблемой, но вдруг есть варианты? :)
И может есть готовые библиотеки протоколов передачи данных пакетами через uart, чтобы велосипед не изобретать? Гугл навскидку не помог.
Варианты, конечно, есть.
Вот только "волшебных" среди них нет. (Ардуино не знает, что такое "пакет целиком")
Подниму тему, если позволите.
С записью в Serial строк все понятно, Serial.Print. А чтение у нас возможно только по байту, или сразу некий пакет целиком считать тоже есть варианты? В доке вижу только read, который читает побайтно. Не то, чтобы это было проблемой, но вдруг есть варианты? :)
Есть Serial.readbytes(), по идее он должен быть описан в той же доке, где и все остальные методы класса сериал.
признак начала пачки-счетчик пачки-длина пачки-сам пейлоад-контрольная сумма-признак конца пачки.
gzp13
Почему Вы используете RX TX 6 и 7 пин? Если у Вас УНО или НАНО 2(RX) и 3(TX), если будете использовать пины 0 и 1 , то при компиляции скеча их нужно разрывать.
Отправить данные t и h с одной ардуино на другую, считайте данные с датчика, заполните массив