Передача трех переменных по NRF24l01
- Войдите на сайт для отправки комментариев
Сб, 06/02/2016 - 18:16
Задача такая. Нужно передать три переменные для управления мотором. То есть bool вперед, назад и byte скорость.
Вот фрагмент кода. Что я делаю не так?
Передатчик
msg[0] = fwd; msg[1] = bwd; msg[2] = spd; radio.write(&msg, sizeof(msg) );
Приемник
if(radio.available()){ radio.read(&msg, sizeof(msg)); msg[0]= fwd; msg[1]=bwd; msg[2]=spd; }
Связь между модулями налажена. Одна переменная скорости без массива передается
наверно нужно обьявить массив
Все не так просто. Само собой и массив объявлен и переменные имеют значения, но нет.
Этот модуль только массивы передает?
Все не так просто. Само собой и массив объявлен и переменные имеют значения, но нет.
Этот модуль только массивы передает?
ему без разницы что в трубе передавать
и перед msg уберите указатель "&"
выложите скетч полностью
Указатель убирал. Не помогает. Скетч длинный, так как много строк для дисплея и прочего ненужного кода
Вот код приемника. Работает. Передает переменную скорости, но массив из трех не передает и не принимает
И еще важный вопрос. При обрыве связи остается последнее значение переменной, а надо, чтобы все обнулялось. Как поступить?
я брал код отсюда, все прекрасно работает
http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
и сделал для себя функции приема и передачи
Каким образом работает 72 строка если она объявлена как Булева?
отключает 71 , когда что-то примет
Она все равно объявлена как булева. Компилятор выдает ошибку, когда видит эту строку
какая версия ide?
у меня 1.6.5 и 1.6.7 все нормально компилит
попробуйте заменить на boolean
Да тоже 1.67. А какие библиотеки подключены?
https://github.com/TMRh20/RF24
вот что у меня
https://yadi.sk/d/0xaVPXp_oRAXm
ага, проблема в том что обновили библиотеку до версии 1.1.5
вот переделаный скетч
Да я все тоже самое и делаю. Завтра приду, еще попробую. А как все таки обнулять переменную при обрыве связи?
тут надо знать что вы хотите, если передатчик все время передает то через флаг, как у меня flag_sw, если что то другое то надо знать принцип работы
Да, но если связь пропадет, флаг так и останется 1
у меня строки 43-49 этим занимаются
я передаю пароль pass, так как это кусок умного дома, каждый датчик имеет свой пароль, а центральная часть их опрашивает
В общем ничего не понимаю. Какие бы библиотеки я не подключал и что бы не делал, строка done = radio.read( msg, sizeof(msg) );
не работает. Пишет:
я вам дал ссылку, вдумайтесь
http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo
Я не нашел там ответов на свои вопросы :(
Я не нашел там ответов на свои вопросы :(
ни о чем не говорит?
Говорит, но не работает. Эта строка не является подтверждением соединения
а вы добавьте вместо нее flag_sw = false;
Есть и флаг. Проблема в том, что подтверждение работает только в момент приема сообщения. То есть на дисплее надписи моргают.
Я в замешательстве. И по поводу обнуления переменных при пропадании связи я тоже ничего не могу выяснить.
Не хочу кидать весь код по причине его длинны
Есть еще вот такая команда radio.writeAckPayload, но и с ней ничего не получается
можно сделать задержку через millis, т.е. пока есть 1 сбрасывать значения, если нет 1 например 100 мс дать 0
Наверное это вариант. А нет случаем готового кода?
blink without delay из примеров IDE
Я бы сделал структуру и дал полям осмысленные названия.
Поподробнее...
Что такое осмысленные названия?
После всех эксперементов обмена массивами не получилось. Только прием и передача в одну сторону. Вот коды
Передатчик
Приемник
Не используй sizeof(msg), sizeof(param). msg и param указатели. sizeof возвращает размер этих указателей, а это 2 или 4, в зависимости от контроллера.
а что использовать вместо них? Почему во всех примерах так?
Ну вот так например:
И как-то так писать:
Ну и sizeof вернет размер структуры, а не указателя.
Интересное предложение, но вряд ли это поможет.
Проблема в отсутствии приемопередачи, а не в структуре
если проблему еще не решили, честно сказать не понял
https://yadi.sk/d/CXjuENmaEEwun
там либа и примеры, либу надо ставить "мою"
архив RF24
А где там пример его как приемопередатчика?
у тебя же вроде передатчик и приемник? или двухсторонняя связь нужна?
пример rx_test и tx_test
Именно двухсторонняя. Проблема в том, что они работают как приемник и передатчик, а вот в обратную сторону не хотят
тогда я тебе не помогу. не разбирался особо с этим вопросом
Да вот я и пытаюсь.
я знаю про автоответ, но там всего 1 байт можно вроде отправить. хотя смотря что отправлять обратно. по идее и в 1 байте можно уместить управление впред назад и управление скоростью
payload вроде любую можно сделать в пределах rx-буфера.
В принципе одного байта хватит. Мне надо отправить единицу состояния соединения и две единицы предела(левый, правый).
Можно еще float из трех знаков.
Только вот логику работы оправки обратно я так и не понял
Получилось запустить, но только удалось загрузить скетч "передатчик" на ардуино nano, а на "приемник" выдает ошибка (выделил жир. шрифтом). Подскажите пожалуйста как исправить?
Код передатчика "приемник"
#include <Servo.h> //the library which helps us to control the servo motor
вставьте код по правилам форума и выложите сообщение об ошибке