Модуль nRF24L01

BigMeister
Offline
Зарегистрирован: 11.02.2018
#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-порт и как с ними дальше работать, чтобы реализовать задумку. 

Прошу Вашей помощи.

a5021
Offline
Зарегистрирован: 07.07.2013

По задумке автора сего кода, размер массива values[] соответствует числу частотных каналов NRF24L01, т.е. 128. Цикл со строки 42 по строку 49 перебирает все каналы задом наперед и где видит несущую, увеличивает на 1 номер соответствующего элемента в массиве. Алгоритм содержит ошибку, т.к. несущая в канале 0 никогда не проверяется, хотя это вполне себе законный канал. В остальном, все должно работать.

Цикл, о котором я вел речь -- вложенный. Он сто раз прокручивается внутри другого цикла. Таким образом, когда выполнение скетча достигает 51-ой строки, массив values[] содержит информацию о том, сколько раз на каждом канале была обнаружена несущая за сто прогонов. Так, например, если values[5] содержит значение равное 100, то это говорит о том, что на пятом канале постоянно ведется передача информации. Для values[76], равного, скажем, 10-и, можно сказать, что на 76 канале передача ведется изредка. Если values[102] содержит ноль, то зто означает, что 102 канал никем не был занят за все время тестирования.