LoRa RA-02 sx1278
- Войдите на сайт для отправки комментариев
Ср, 01/07/2020 - 11:39
Добрый день.
У кого есть опыт работы с модулями LoRa sx1278?
На TX части при создании пакета для отправки ...
LoRa.beginPacket();
LoRa.print(a);
LoRa.print(b);
LoRa.print(c);
LoRa.endPacket();
есть 3 переменных a,b,c , при значении которых на RX части должны включится 3 реле.
Проблема в том,что на RX части мы получаем строка-текст где написаны значения 3-х переменных из TX...
String LoRaData;
int packetSize = LoRa.parsePacket();
if (packetSize)
{
Serial.print("Received packet '");
while (LoRa.available())
{
LoRaData = LoRa.readString();
Serial.print(LoRaData);
}
}
В итоге получаем...
Received packet abc
Никак не получается привязывать значения a,b и c на каких либо переменных на RX части и при значении последных включить/отключить 3 реле.
Не работал с лорой, но чисто житейски, так сказать, а если разбивать переменные на отдельные пакеты?
Или, если нужно именно одним пакетом, упаковывать все в один байт
как устанавливать нужные биты и как считывать нужные биты в байте - см. битовые операции
Пробовал отправить 3 пакета. На RX получаю только последный пакет
LoRa.beginPacket();
LoRa.print(c);
Тогда паковать в байт и отправлять одним числом, а в приемной части разбирать на биты
Если скажем
a=25, b=30, c=35
то на RX получаем не число 253035 а текст 253035
Зачем вам для включения реле число 25?
Смотрите. Вся информация в цифровом мире передается в виде байтов. Каждый байт состоит из восьми бит. Каждый бит может принимать два состояния - 0 и 1. Т.е., например, число 170 в двоичном виде отображается так - B10101010.
Далее. По странному, но счастливому совпадению в C++ булевы константы имеют следующие значение - false == 0, true == 1. Это вам ничего не напоминает? Правильно, один байт может содержать восемь состояний, т.е. для вашего случая в одном байте можно закодировать состояние целых восьми реле. Т.е. для передачи команды вам достаточно одного числа, а не трех, как вы делаете сейчас.
Более того. По не менее странному, но и не менее счастливому совпадению значения логических уровней так же имеют следующие значения - LOW == 0, HIGH == 1. Видите, как все прекрасно совпадает? ))
Иными словами, вот так примерно вы кодируете нужные вам биты:
а вот так разбираете полученное число и управляете своими реле
Как конвертировать в число строку, полученную из RX, уж сами погуглите ))
Дело в том, что значения a b и c на TX части не просто числа.Это значения температуры влажности и давления из соответствующих датчиков.То есть они все время меняются. И при, скажем, температуре 25 градусов надо на RX части включить реле.При влажности 30% на RX части надо отключить реле.То же самое о давлении.То есть надо все три числа получить на RX части так,как они есть.Так и получается, но в виде текста.
Разбить строку на три части и конвертировать каждую их них в число - разве это сложно?
Я думал об этом. А если первое число трехзначное,, второе число двухзначное а третье число опять трехзначное.Как делать тогда?
на пример
105 48 760 (10548760)
Думайте еще. Ваша задача - организовать передачу данных, значит нужно продумать формат представления этих данных. Например, вы можете сразу на передающей стороне формировать строку нужной длины - "0012", "0125", "2548", "0005". Тогда и на приемной стороне проблем с разбивкой строки не будет
Если надо пакетом, то проще структуру сделать. Навскидку:
функции не работают.
Sender
Receiver
как написано - так и работает. Вы совсем не читаете. что вам советуют? - вам же написали, что печатать подряд несколько цифр бессмысленно - они будут путаться, что у вас и наблюдается.
вам надо разработать свой протокол, который четко отделял бы одну цифру от другой. Например можете вставить между цифрами какой-нить знак, скажем, "|". Тогда при отсылке трех единиц у вас будет не 111, а "1|1|1". потом "2|2|2" и так далее до "39|39|39"
Но лучше, конечно, передавать в двоичном виде, как советует DIYMan
Да я могу разделить цифры.Это не проблема. Могу делать так, чтоб показывал ...
Received packet Temperature - 105 C; Hummidity - 48%; Pressure - 760mmHg
проблема не в этом.проблема в том,что я хочу привязывать 105 к переменному,скажем, t и написать
if (t <= 80)
{
digitalwrite(pin5, HIGH);
}
Я не хочу,просто на мониторе посмотреть значения a,b,c.
Я знаю что мне надо.А как делать не знаю.
если вы можете получить отдельно a b c - что мешает написать
и тому подобное?
И непонятно, нафига вы полтора десятка сообщений обсуждали передачу символов по Лора, если проблема совсем не в этом?
В RX части нету a b c, потому что пакет получается целиком и имя пакета LoRaData.
Если написать if(a<100) {} и так далее, то это как написать if(n<100) {}. переменная a не существует так же как не существует переменная n.То есть то что передается от TX, на RX получается в виде текста и имя этого текста LoRaData. В RX части нету a b c, есть их значения в виде текста.
Пздц.
В RX части нету a b c, потому что пакет получается целиком и имя пакета LoRaData.
вы же только что написали, что можете разделить a b и c отдельно? - так разделите сначала, а потому будем обсуждать дальше
Если написать if(a<100) {} и так далее, то это как написать if(n<100) {}. переменная a не существует так же как не существует переменная n.
что за бред? вы за два года занятий ардуино не научились описывать переменные?
Принять строку, распарсить ее, присвоить переменным a, b, c соответствующие значения и работать уже с ними. Если нужно - конвертировать строки в числа. В чем проблема-то?
ЗЫ: вопреки мнению чайников, компьютер - крайне тупая железка, которая никогда не делает то, что от него хотят. Он всегда делает то, что ему приказывают. А МК в сравнении с компьютером - и вовсе инфузория бессловесная. Это я к чему? Не ждите, что он выдаст вам нужные вам данные сам - он думать не умеет. Думать за него должны вы
Проблема в том, что я не могу делать это.Все говорят "надо делать это, надо делать то".Я знаю что надо делать.
А как делать? Кто нибудь скажет?
По-моему это уже троллинг
Да причем тут описание переменных. Если я напишу..
int a;
int b;
int c;
все равно это не те a b c что передались от TX.
Принять строку, распарсить ее, присвоить переменным a, b, c соответствующие значения и работать уже с ними. Если нужно - конвертировать строки в числа. В чем проблема-то?
Уважаемые господа. Проблема в знании. Я не знаю как делать.Если кто нибудь знает, подскажите пожалуйста.
Строка у вас уже есть. Далее:
с++ разбить строку по разделителю
с++ конвертировать string в int
.
Строка у вас уже есть. Далее:
с++ разбить строку по разделителю
с++ конвертировать string в int
Ссылки не работают
Уважаемые господа. Проблема в знании. Я не знаю как делать.Если кто нибудь знает, подскажите пожалуйста.
еще раз - вы написали, что знаете, как разделить вывод a b c отдельно. Если да - пожалуйста, выложите код. как вы это деоаете
Так скопируйте эти строки и забейте их в поисковую строку. Хоть Яндекса, хоть Гугла
Сурен, вы два года назад уже спрашивали почти то же самое - и я вам тогда отвечал. Что, неужели за 2 года вы ничему не научились ?
http://arduino.ru/forum/programmirovanie/kak-peredat-znachenie-ne-tekst-cherez-433mhz-moduli-dlya-arduino
Уважаемые господа. Проблема в знании. Я не знаю как делать.Если кто нибудь знает, подскажите пожалуйста.
с запросами "я не знаю как сделать. сделайте за меня" - в платный раздел.
Уважаемые господа. Проблема в знании. Я не знаю как делать.Если кто нибудь знает, подскажите пожалуйста.
еще раз - вы написали, что знаете, как разделить вывод a b c отдельно. Если да - пожалуйста, выложите код. как вы это деоаете
Если в TX части написать
то на RX части получим на Serial monitor
LoRa Receiver
А если в передающей части написать
То в принимающей вы получите строку "a|b|c". Дальше разбиваете строку на части по разделителю "|", полученные части конвертируете в числа и присваиваете их нужным вам переменным
Уважаемые господа. Проблема в знании. Я не знаю как делать.Если кто нибудь знает, подскажите пожалуйста.
с запросами "я не знаю как сделать. сделайте за меня" - в платный раздел.
Я не сказал делайте за меня,я сказал подскажите.А если, ко всем уважением, Вам жалко делится знаниями,то это уже другой вопрос.
Сурен, вы два года назад уже спрашивали почти то же самое - и я вам тогда отвечал. Что, неужели за 2 года вы ничему не научились ?
http://arduino.ru/forum/programmirovanie/kak-peredat-znachenie-ne-tekst-cherez-433mhz-moduli-dlya-arduino
Это было не LoRa. тот вопрос решился.Спасибо Вам.
Я не сказал делайте за меня,я сказал подскажите.А если, ко всем уважением, Вам жалко делится знаниями,то это уже другой вопрос.
вам уже столько подсказали - и через парсинг, и через биты. и через структуру... Проблема в том, что с вами разговор, как с глухим - вы ничего из этих слов не понимаете. Это уже не "подскажите", а "сделайте за меня"
Никто за вас не станет писать код, прошивать его в две лоры и проверять за вас. Советов вам здесь уже надавали достаточно. Вы ждете, когда вам дадут именно код?
Это было не LoRa. тот вопрос решился.Спасибо Вам.
это просто смешно, ваш нынешний вопрос не имеет никакого отношения к Лоре. Вы не знаете элементарных вещей - как получить из Монитора строчку и разбить ее на части.
при чем тут лора вообще...
Вы ждете, когда вам дадут именно код?
конечно.
Два года назад было тоже самое - "вопрос решился", когда ТС получил готовый кусок кода. И, естесственно, абсолютно ничего не понял и ничему не научился.
Я на этом сваливаю из темы. Советов, что тут уже надавали - хватитт на три программы
В этот раз ему не повезло ))
Спасибо всем.