Кто портит байты?
- Войдите на сайт для отправки комментариев
Прошу помощи местных владельцев хрустальных шаров, а то мой не работает.
Есть код, который собирает данные и отправляет их по радио. Прошит в Uno.
Есть код, который всё это принимает и отображает на LCD 20x4. Прошит в Nano.
В паре они работают как задумано.
Второй код переделал для отображения полученного на OLDE 128x64. Прошит в Mega, потому что даже в Uno оперативной памяти не хватает.
Так вот в первом поле структуры, которое outtemp, принимается какая-то хрень.
На передающей стороне:
Outtemp: 29.81 Intemp: 30.30 Inpres: 747.63 Hum: 28.60 Sended!
На принимающей стороне первое поле равно 8.02. При этом включенная в тоже время Nano принимает 29.81 и его же выводит.
Отключение Nano на работу Mega не влияет, даже если всё погасить и включить только Uno и Mega.
Может какую-то тонкость не знаю?
По радио.. маяк?
тонкость скорее всего в размере пакетов и такой библиотечке как progmem.
Чем поможет хранение переменных во флеше?
float - 4 байта. 4*4=16. Всё равно меньше 32 байт получается.
Уде пробовал передатчики местами менять. Хрень вылезает сразу после получения пакета, т.е. точно не глюк дисплейных либ.
Угу это глюк между progmem и радио. Атмега2560 не использует progmem, ей свой памяти хватает. Мы вроде это решили просто используя int заместо float ибо лень было ковырять библиотеки.
Тогда остаётся одно из:
1) Забить на OLED-дисплей
2) Найти другую либу для дисплея, которая требует меньше памяти, чтобы в UNO влезало. Adafruit формирует массив в памяти борды и загружает его в дисплей.
3) Мутить костыль для передачи float как int, домножая на 100 на "сервере" и деля на 100 на "клиенте".
Ну мы сделали третье и забили.
У меня тут бредовая мысла возникла. Если добавить в начало структуры еще одно поле и писать в него константу, то по идее тоже должно прокатить.