Нужна помощь с передачей пакетов через модули Lora

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
Нужна помощь с передачей пакетов через модули Lora.

Используется вот эта библиотека:

Вот пример кода отправителя:

Я взял потенциометр - то есть, значения 0-1023 и присвоил их в переменную int val

Из примера я убрал hello и counter и подставил туда val.
LoRa.beginPacket();
LoRa.print("hello "); <--- тип char либо же string...
LoRa.print(counter); <--- тип int
LoRa.endPacket();

Вот код приёмника:

Меня смущает вот этот участок кода:
Serial.print((char)LoRa.read());

То есть в оригинальном примере отправитель передает строку + int и всё нормально читается.
Если же я пытаюсь отправить свой int, то ничего не читается - на стороне приёмника отображается лишь 495148 вместо 512 (среднее значение потенциометра).

У меня есть предположение, что Lora передаёт только символы, которые могут друг за другом складываться в строку. Но не может передавать другие типы данных

В программировании не силён. Может кто-нибудь помочь?
Спасибо.
 

b707_2

★★✩✩✩✩✩
22 Июл 2020
182
51
Если же я пытаюсь отправить свой int, то ничего не читается - на стороне приёмника отображается лишь 495148 вместо 512 (среднее значение потенциометра).
уточните - именно ничего не читается? - или "hello" все же выводится?
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@b707_2, Спасибо, что ответили.

Нет, базовый код работает нормально как и должен. В оригинале отправитель посылает hello + увеличивающийся counter.
И приёмник нормально его принимает.

Проблема в том, что я не могу вместо hello и counter подставить значение типа int - на выходе получается набор цифр. А в программировании я не силён.

Создал другую тему на форуме - у меня есть предположение, что Lora может слать только строки, либо char.
Сегодня ночью проверял - если передавать не тип Int, а именно String с нужными мне цифрами, то получается всё нормально - на выходе тоже имею String с теми же цифрами.

Сейчас возникла идея
(я в программировании вообще не силён, только вот начал осваиваться пару месяцев назад, когда купил свою первую ардуино)
идея кормить модулю String, а на стороне приёмника преобразовывать его в Int. Сейчас над будет проверить - может и сработает.
 

b707_2

★★✩✩✩✩✩
22 Июл 2020
182
51
Проблема в том, что я не могу вместо hello и counter подставить значение типа int - на выходе получается набор цифр.
передаете цифры. получаете цифры. что не так?
у меня есть предположение, что Lora может слать только строки, либо char.
предположение неверное

У вас, кроме программирования - проблема с правильным описанием задачи. Попытайтесь четко написать. что вы посылаете. и что получаете в ответ. Причем начать лучше не с данных с потенциометра, а с константных значений. Попробуйте отправить что-нибудь типа "hello ". потом число 512. и скопируйте в сообщение вывод, полученный на приемнике.
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@b707_2,

В идеальном варианте мне надо передавать отдельный int на передатчик от потенциометра и получать int на приёмнике. А ещё лучше - передавать массив int.
 

b707_2

★★✩✩✩✩✩
22 Июл 2020
182
51
@derungebundener, если вы хотите чтобы вам подсказали, в чем проблема - проделайте то, что я написал выше и выложите результат
 

derungebundener

✩✩✩✩✩✩✩
18 Июл 2020
117
3
@b707_2,

Усё, я решил проблему своим способом, прямо как Менделеев - увидел решение проблемы, пока спал, точнее, полудремал. Ввиду отсутствия знаний по программированию использовал вот такие костыли:

От потенциометров у нас есть два значения. От 0 до 1023.
То есть, мы имеем либо 0 - то бишь один символ, либо 1023 - 4 символ. Это для меня оказалось неудобным.

Поэтому через функцию map я ужал эти значения в предел от 100 до 999 - то есть у нас всегда будет только 3 символа.
Можно, конечно, вообще ужать до 10-99 и получить два символа - возможно далее так и сделаю.

Далее передаём эти переменные на Лору:

Lora.print (знач ААА)
Lora.print (двоеточие как разделитель) хотя можно и без него вообще будет обойтись - ничего лишний символ передавать.
Lora.print (знач БББ)


На приёмнике мы получаем строку:
ААА:БББ

После этого я добавил ещё две строки и рассовал в них куски строки:
String1 = String.substring (0, 3)
String2 = String.substring (4) - если будет больше переменных, то тупо подстраиваем диапазон вырезания...

Далее преобразовываем в int

int1 - String1.toInt();
int2 = String2.toInt();

Ну и далее через map приводим диапазон 100-999 в 0-180 и подаём на сервоприводы.

Всё работает нормально за исключением того, что usb + блока питания (либо стабилизатора на 3,3, который кормят лору) не хватает по току - ардуинки виснут при активном кручении потенциометров.


Всё, тему можно закрывать, вопрос исчерпан. Не знаю, как тут призвать модератора.

Далее попробую скормить таким образом аж 6 переменных - 4 от потенциометров + 2 значения координат от GPS.
 

b707_2

★★✩✩✩✩✩
22 Июл 2020
182
51
....вопрос исчерпан. Не знаю, как тут призвать модератора.
Посмотрите вверх - над каждой темой приклеено обьяснение:

У вопроса можно выбрать ответ юзера в качестве лучшего ответа, и статус темы автоматически сменится на РЕШЕНО. Если ваш вопрос был решён - просьба пометить ответ, тем самым показав остальным, что он не актуален!