Определение отключения передатчика NRF24L01 или отсутствия данных с передатчика.
- Войдите на сайт для отправки комментариев
Чт, 28/07/2022 - 21:34
Здравствуйте!
Передатчик и приемник собраны на NRF24L01 + Arduino.
Есть следующий код
void loop() { byte pipeNo; if ( radio.available(&pipeNo)) { radio.read( &recieved_data, sizeof(recieved_data)); motorR.setSpeed(recieved_data[0]); motorL.setSpeed(recieved_data[1]); Serial.println(F("Данные есть")); } else { Serial.println(F("Данных нет")); motorR.setMode(STOP); motorL.setMode(STOP); } }
Мне необходимо остановить двигатели когда или если передатчик отключен, в коде выше двигатели всегда остановлены, если сделать так:
void loop() { byte pipeNo; if ( radio.available(&pipeNo)) { radio.read( &recieved_data, sizeof(recieved_data)); motorR.setSpeed(recieved_data[0]); motorL.setSpeed(recieved_data[1]); Serial.println(F("Данные есть")); } else { Serial.println(F("Данных нет")); } }
то двигатели работают даже после отключение передатчика
Подскажите пожалуйста, как определить, что передатчик отключен, или как сделать остановку двигателя если передатчик отключился или с него нет данных?
Заранее спасибо!
если сделать так:
то двигатели работают даже после отключение передатчика
А покажите-ка команду, которая, по Вашему мнению, должна остановить двигатель.
Подскажите пожалуйста, как определить, что передатчик отключен,
Ситуации "передатчик отключен" и "передатчик включен, но ничего не передает" различить никак невозможно.
Т.е. факт "передатчик включен" можно определить только в том случае, если передатчик что-то передает. Из этого и нужно исходить, проектируя обмен информацией с учтройством, к которому подключен передатчик.
или как сделать остановку двигателя если передатчик отключился или с него нет данных?
Заранее спасибо!
Остановка двигателя делается командой двигателю и никак не связана с работой передатчика.
Приветствую, andriano!
По поводу команды двигателям, все верно, я ее убрал, и двигатели не остановятся, это я сделал ошибку.
Дело в том, что
верно 1 из 4, то есть в порт прилетает 1 раз Данные есть и 3 раза Данных нет. Соответственно двигатели постоянно отключены.
Если сделать так то все начинает работать и при отключении передатчика двигатели останавливаются, но думаю, что это не верно
Есть более правильной способ, предполагаю, что необходимо измерять время до потери сигнала, но не могу сообразить как это сделать.
Да - время.
Для измерения времени специально существуют функции millis() и micros().
Да - время.
Для измерения времени специально существуют функции millis() и micros().
сигнал может пропадать периодически, появление сигнала должно сбрасывать таймер, рекомендуют это время устанавливать на 2 секунды
рекомендуют это время устанавливать на 2 секунды
Рекомендовать одно значение времени для любых задач, все равно, что рекомендовать один размер обуви для всех людей.
рекомендуют это время устанавливать на 2 секунды
Рекомендовать одно значение времени для любых задач, все равно, что рекомендовать один размер обуви для всех людей.
как в китае было )))
Правильно ли я понимаю, что должно быть примерно так?
Важно поменять работу не только приемника, но и передатчика. Чтобы ваш код работал, передатчик должен отправлять новый пакет каждые 100-200 мс, даже если оператор не дает никаких команд.
Правильно ли я понимаю, что должно быть примерно так?
Пока в этой теме нет самого главного, алгоритма работы передатчика, т. е. телега стоит впереди лошади.
Пока в этой теме нет самого главного, алгоритма работы передатчика, т. е. телега стоит впереди лошади.
Не совсем так.
Алгоритм работы передатчика должен быть таким, который позволяет на стороне приемника детектировать обрыв связи. А потому алгоритмы для приемника и передатчика должны разрабатываться параллельно.