Переключение каналов NRF24l01
У меня есть радиомодуль NRF24L01. В описании указано, что он может работать в частотном диапазоне ISM 2,400...2,525 ГГц. Шаг канала составляет 1 МГц, и всего имеется 125 каналов.
Номер канала можно установить с помощью радио.setChannel (0x125); Максимальное число предположительно равно 125. Однако я исследовал спектр сигнала в Sdrsharp с помощью радиотюнера, и оказалось, что частота на максимальном канале очень низкая.
Я начал увеличивать число и добрался до 180 radio.setChannel (125); частота была 2525 МГц, как указано. Получается, что количество каналов радиомодуля не 125, а 180? Я определил число 180 экспериментально. В литературе говорится, что он имеет 125 каналов шириной 1 МГц. Самое интересное, что Arduino IDE не выдает ошибок при вводе большого количества каналов. Скажите мне, как вы можете ускорить процесс переключения каналов, чтобы понять, как они переключаются. Чтобы вручную перепрошивать его в течение длительного времени при смене каждого канала.
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9, 10); // использовать 9 × 10
byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"};
byte counter = 1;
void setup() {
Serial.begin(9600);
radio.begin(); //активировать модуль
radio.setAutoAck(0); //режим подтверждения, 1 вкл. 0 выкл
radio.setRetries(0, 15); //(время между попытками связаться, количество попыток)
radio.setPayloadSize(32); //размер пакета, в байтах
radio.openWritingPipe(address[0]); //у нас канал 0, мы открываем канал передачи данных
radio.setChannel(125); //выбираем канал (в котором нет шума!) 0...125
radio.setPALevel (RF24_PA_MIN); // уровень мощности передатчика. Чтобы выбрать RF24_PA_MIN, RF24_PA_LOW, RF24_PA_HIGH, RF24_PA_MAX
radio.setDataRate (RF24_2MBPS); //обменный курс. Чтобы выбрать RF24_2 МБИТ/с, RF24_1 МБИТ/с, RF24_250 КБИТ/с
radio.powerUp(); //начало
radio.stopListening(); // не слушайте радиопередачи, мы являемся передатчиком
}
void loop(void) {
while (1)
{
radio.write(&counter, 1);
//Serial.println(счетчик);
}
}
Можно ли последовательно переключать номер канала radio.setChannel (0x180) в пустом цикле? Спасибо!
Я попытался сделать это:
void loop (void) {
for (int n = 0; n <126; n ++)
{
radio.setChannel (n); // выберите канал (в котором нет шума!) 0 ... 125
radio.write (& counter, 1);
delay (1000);
}
}
Однако radio.write (& counter, 1) должен работать отдельно от любых циклов, чтобы избежать задержек. В противном случае он не будет работать корректно.
@Антон, 👍1
Обсуждение1 ответ
Вы путаетесь с числовыми базами. Число с префиксом 0x
является шестнадцатеричным. Это база 16, а не база 10.
0x125 на самом деле равно 293. Если вы попытаетесь втиснуть 293 в 8-битный регистр, он сократится до 37.
Канал 125 равен 0x7D в шестнадцатеричном формате.
Я не могу сразу вспомнить, насколько велик регистр для номера канала, но будет достаточно 7 или 8 бит (вероятно, фактически используется только 7 бит), поэтому наибольший номер канала, который вы могли бы ввести, будет 127, что равно 0x7F, после чего он снова начнется с канала 0 для 128 или 0x80.
Спасибо, но как вы можете автоматически переключать каналы по порядку?, @Антон
В том виде, в каком вы уже есть, но вам может потребоваться отключить питание перед переключением каналов., @Majenko
Можно ли удалить префикс 0x и ввести номер канала от 0 до 125 в виде десятичного числа? В конце концов, это гораздо понятнее и удобнее., @Антон
Конечно. Это просто человеческое представление числа. Вы могли бы даже зайти так далеко, чтобы использовать от 0 до 0175 и использовать восьмеричное число, если хотите. Это просто цифры., @Majenko
В конечном счете, от вас зависит следовать правилам и положениям, установленным агентством по регулированию беспроводного спектра вашей страны. Если вы находитесь в радиочастотном диапазоне, имеете соответствующую лицензию и законную власть, с вами все в порядке. Судя по вашему сообщению, вы можете сделать это с помощью Sdrsharp., @Gil
- Я не могу правильно получить строку, которую я отправил через nrf
- Состояние цифрового вывода Arduino не передается через NRF24L01, тогда как состояние аналогового вывода передается, почему?
- Ошибка: значение void не проигнорировано, как должно быть = radio.read(&Irms, sizeof(float));
- C++ против языка Arduino?
- avrdude ser_open() can't set com-state
- Как читать и записывать EEPROM в ESP8266
- Float печатается только 2 десятичных знака после запятой
- устаревшее преобразование из строковой константы в 'char*'
181 != 0x181 - изучите свои основы., @Majenko
setChannel ожидает однобайтовое значение, поэтому ваше
0x180
будет усечено до0x80
(что равно 128 в десятичной системе счисления). Затем библиотека [понижает это значение до 125, потому что это слишком высокое значение] (https://github.com/nRF24/RF24/blob/master/RF24.cpp#L448 )., @Gerben