Модуль nRF24L01
- Войдите на сайт для отправки комментариев
Пнд, 30/04/2018 - 21:18
#include <SPI.h>
#include "nRF24L01.h"
#include "RF24.h"
RF24 radio(9,10);
const uint8_t num_channels = 128;
uint8_t values[num_channels];
void setup(void)
{
Serial.begin(9600);
printf_begin();
radio.begin();
radio.setAutoAck(false);
radio.startListening();
radio.printDetails();
delay(5000);
radio.stopListening();
int i = 0;
while ( i < num_channels ) {
printf("%x",i>>4);
++i;
}
printf("\n\r");
i = 0;
while ( i < num_channels ) {
printf("%x",i&0xf);
++i;
}
printf("\n\r");
}
const int num_reps = 100;
void loop(void)
{
memset(values,0,sizeof(values));
int rep_counter = num_reps;
while (rep_counter--) {
int i = num_channels;
while (i--) {
radio.setChannel(i);
radio.startListening();
delayMicroseconds(128);
radio.stopListening();
if ( radio.testCarrier() )
++values[i];
}
}
int i = 0;
while ( i < num_channels ) {
printf("%x",min(0xf,values[i]&0xf));
++i;
}
printf("\n\r");
}
int serial_putc( char c, FILE * ) {
Serial.write( c );
return c;
}
void printf_begin(void) {
fdevopen( &serial_putc, 0 );
}
Ув. программисты,
Выше код для радиомодуля nRF24L01 для прослушки всех 127 доступных каналов связи. Далее в com-порт под каждый канал выводятся либо нули, либо цифры (шумы).
Мне нужно выводить дополнитульную строку (например на lcd дисплей) с количеством "чистых" каналов связи, т.е. там, где только нули, но не могу понять, значение каких именно переменных выводятся в com-порт и как с ними дальше работать, чтобы реализовать задумку.
Прошу Вашей помощи.
По задумке автора сего кода, размер массива values[] соответствует числу частотных каналов NRF24L01, т.е. 128. Цикл со строки 42 по строку 49 перебирает все каналы задом наперед и где видит несущую, увеличивает на 1 номер соответствующего элемента в массиве. Алгоритм содержит ошибку, т.к. несущая в канале 0 никогда не проверяется, хотя это вполне себе законный канал. В остальном, все должно работать.
Цикл, о котором я вел речь -- вложенный. Он сто раз прокручивается внутри другого цикла. Таким образом, когда выполнение скетча достигает 51-ой строки, массив values[] содержит информацию о том, сколько раз на каждом канале была обнаружена несущая за сто прогонов. Так, например, если values[5] содержит значение равное 100, то это говорит о том, что на пятом канале постоянно ведется передача информации. Для values[76], равного, скажем, 10-и, можно сказать, что на 76 канале передача ведется изредка. Если values[102] содержит ноль, то зто означает, что 102 канал никем не был занят за все время тестирования.