Библиотека Arduino RF24 Задержка после функции записи не приводит к доступности байтов
Речь идет о библиотеке RF24, которую вы можете найти здесь. http://maniacbug.github.io/RF24/index.html
Я передаю данные от одного Arduino к другому с помощью радиостанций NRF24L01. Когда я использую функцию записи на передатчике arduino (джойстик-это массив) и после этого ставлю задержку выше 10, доступная функция возвращает false.
Передатчик
radio.write( joystick, sizeof(joystick) );
delay(20);
Приемник
if(!available())
print('No data'); // delay > 10 --> Данные не будут напечатаны
Почему он работает с задержкой 10, но не выше? Имеет ли это какое-то отношение к тайм-аутам, которые упоминаются в документах библиотеки?: http://maniacbug.github.io/RF24/classRF24.html#a4cd4c198a47704db20b6b5cf0731cd58
Спасибо вам за ваши ответы.
@mathnow, 👍1
Обсуждение5 ответов
Пожалуйста, прочтите это: Arduino NRF24L01+ arduino к проблеме передачи netmf
Хотя вы не используете NETMF, @PhilVallone успешно использует библиотеку и чип вместе, указывает, что образцы не являются асинхронными, и обращается к тайм-ауту. ОП для этого вопроса использует delay(1000), и ответ не был принят.
Я не верю, что есть какая-либо польза от прерываний или потоков, что делает это в основном неуместным. У вас есть доказательства обратного?, @Chris Stratton
Ответы должны иметь какое - то отношение к проблеме, а случайные несвязанные предложения-нет., @Chris Stratton
И какие ошибки загрузчика, по вашему мнению, могут быть *релевантными*? Понимаете ли вы, насколько самодостаточен код, о котором идет речь? Это бесполезно, это неосведомленное хватание за соломинку., @Chris Stratton
Пожалуйста, потратьте некоторое время, чтобы действительно прочитать код, связанный с вопросом..., @Chris Stratton
С вашим отзывом я вернулся назад и жду ответа ОП., @Jon
Попробуйте обновить свою библиотеку до новой вилки TMRh20. Это значительно улучшает старую версию maniacbug (возможно, также исправляет ошибку). tmrh20.github.io/RF24
Стоит также отметить, что после того, как вы прочитаете сообщение, оно будет выводить "нет данных" до тех пор, пока вы не получите новое сообщение.
У меня была такая же проблема. Мое решение таково:
Первый make .stopListening()
затем .write(&data, sizeof(data))
а за командой записи
стоит .startListening()
.
Теперь вы можете откладывать на более длительное время.
Добро пожаловать в Arduino SE! Мне трудно понять, что вы имеете в виду. Команда stopListening()
кажется полезной, хотя не могли бы вы объяснить, как поможет .write(&data, sizeof(data))
? Спасибо!, @Anonymous Penguin
В моей ситуации проблема заключалась в том, что передатчик не продолжал передачу после задержки. Мне удалось решить эту проблему с помощью отключения питания (http://maniacbug.github.io/RF24/classRF24.html#aa0a51923a09ba4f3478aba9be0f8a6a1) и включение питания (http://maniacbug.github.io/RF24/classRF24.html#a5cdaf47aa0edd6dca1b9a8bb7972a1a3) функции. Вот фрагмент моего кода. "Радиоткс" - это название, присвоенное моему передатчику.
//стандартная настройка кода для arduino uno board examples
radioTx.begin();
radioTx.setChannel(108);
radioTx.openWritingPipe(pipe);
}
void loop() {
int dist_cm = sonar.ping_cm();
Serial.println(dist_cm);
radioTx.write(&dist_cm,sizeof(dist_cm));
radioTx.powerDown();
delay(5000);
radioTx.powerUp();
}
Попробуйте использовать
unsigned long t = millis();
while(millis() - t < DELAY);
вместо "delay(DELAY)"
- вопрос по трубке nRF24L01
- Как подключить NodeMCU к NRF24L01
- Переключение каналов NRF24l01
- Использование функции уровня сигнала модуля nRF24L01
- Как автоматически сбросить nrf24l01+ с кодом?
- NRF24L01+ PA не работает с Arduino Mega (работает с Nano)
- Пустое значение не игнорируется, как должно быть.
- Не получаем данные от NRF24L01
Разве вы не проверяете неоднократно, чтобы увидеть, станут ли данные доступными позже? Если вы не используете прерывание от радиоприемника к процессору, вам это понадобится., @Chris Stratton
Я проверяю неоднократно в смысле стандартного цикла. Я думаю, что Arduino печатает огромное количество "Нет данных" из-за задержки. Когда задержка заканчивается, одна строка становится другой, а затем снова огромное количество строк "Нет данных". Я прокручивал Последовательный монитор, но это было не так. Или, может быть, я прокручивал недостаточно долго? Было бы интересно, сколько миллисекунд требуется для завершения небольшого цикла...Но я думаю, что это просто лучше, когда я использую: while(!radio.available ()) {}, так что только что-то происходит, когда есть полезная нагрузка. Я попробую это сделать сегодня., @mathnow
Да, обычно не полезно повторно регистрировать, что данные *недоступны*, но если вам действительно интересно, вы можете подсчитать количество циклов до тех пор, пока данные не будут получены, и распечатать их вместе с данными., @Chris Stratton
Отлично, это отличная идея. Да, мне это очень любопытно. Я поделюсь результатом после того, как попробую., @mathnow
Я считаю, что утверждение if без скобок довольно рискованно, так как его труднее читать, чем скобки. Очевидно, здесь есть еще код; можете ли вы добавить его, чтобы мы могли увидеть, есть ли еще одна проблема? Мне нравится, что вы попытались сделать его меньше, но не могли бы вы включить пример с достаточным количеством для компиляции? Спасибо! (Кстати, что это за переменная джойстика? Класс?), @Anonymous Penguin
Спасибо за комментарий. джойстик-это массив, и я скопировал учебник отсюда: http://arduino-info.wikispaces.com/Nrf24L01-2.4GHz-HowTo Просто прокрутите вниз или найдите на сайте "ПРИМЕР СКЕТЧЕЙ ARDUINO". Все, что я сделал, это повесил задержку после радио.напишите в примере YD_nRF24L01_Transmit_JoyStick, как вы можете видеть в моем первоначальном вопросе. Я с нетерпением жду вашей попытки :-), @mathnow
Это ведь фрагмент текста, не так ли?
print('No data');
не будет печатать "No data", потому что вы используете неправильные кавычки. Трудно ответить на такие вопросы без публикации фактического кода., @Nick GammonУ меня такая же проблема, и я поместил эту проблему в трекер проблем Github. надеюсь, что придет ответ: https://github.com/maniacbug/RF24/issues/68, @Greccofly
@Greccofly Ответа не будет, потому что эта библиотека была заброшена. Пожалуйста, используйте https://github.com/TMRh20/RF24 библиотека. Он также должен быть доступен во встроенном менеджере библиотек, так что вам не придется беспокоиться о его обновлении., @Avamander