Проблема nRF24L01

Я пытаюсь закодировать простую программу передатчик - приемник с помощью nRF24L01

Очень простой код. Компилирует. Но когда я пытаюсь протестировать его с помощью последовательного монитора. Но только первый символ выводится на экран только один раз.

#include <SPI.h>
#include <nRF24L01.h>
#include <RF24.h>

#define CE_PIN 9
#define CSN_PIN 10


const uint64_t pipe = 0xE8E8F0F0E1LL;

RF24 radio(CE_PIN, CSN_PIN);

int smth[1]; // данные передатчика
int x=0; // копия данных приемника
char rec[1]; //данные приемника

int ledPin = 3; // выберите контакт для светодиода
int inPin = 7; // выберите входной контакт (для кнопки)
int val = 0; // переменная для считывания состояния контакта


void setup() {
  Serial.begin(9600);
  pinMode(ledPin, OUTPUT);  // объявить СВЕТОДИОД в качестве выходного
  pinMode(inPin, INPUT);    // объявить кнопку в качестве ввода

  radio.begin();
  radio.openWritingPipe(pipe);  //первоначально передатчик
}

void loop(){
  val = digitalRead(inPin);  // считанное входное значение
  if (val==HIGH) {         // check if the input is HIGH (button released)
    digitalWrite(ledPin, HIGH);  // turn LED OFF
    Serial.println('1');
    smth[0] = '1';
    radio.write(smth, sizeof(smth));
  } else {
    digitalWrite(ledPin, LOW);  // turn LED ON
    Serial.println('0');
    smth[0] = '0';
    radio.write(smth, sizeof(smth));
  }
}

Последовательный монитор :

0


Вместо того, чтобы печатать нули в течение бесконечного времени, пока я не изменю режим переключателя, даже если я изменю режим переключателя с низкого на высокий, на экране ничего не будет напечатано.

Я использую библиотеку, например http://playground.arduino.cc/InterfacingWithHardware/Nrf24L01

Какая-нибудь помощь?

, 👍1

Обсуждение

Какой библиотекой вы пользуетесь?, @Avamander

Попробуйте изменить "int smth[1]" на `байт smth[1]"., @Gerben

Достаточно припаять конденсаторы к выводам питания NRF24L01. 100uF., @Avamander

Я запустил ваш код на своем arduino pro mini / nRF24L01 с библиотекой "RF24 by TMRh20" и получил непрерывный поток нулей на своем мониторе., @PyNZ


3 ответа


Лучший ответ:

0

Быстрый просмотр заголовочных файлов библиотеки показывает, что вам следует вызвать функцию radio.stopListening() перед вызовом функции radio.write (), чтобы модуль переключился в режим передачи. Это может быть то, что блокирует радио.напишите в блоке "еще". Я также рекомендую вам сначала попробовать массив байтов, чтобы все работало, просто на случай, если проблема в интерах.

,

0

Завершая ответ TisteAndii, я предлагаю взглянуть на init. Согласно списку классов RF24, кажется, что radio.begin(); и radio.openWritingPipe(труба); являются функцией "void". Я лично использую NRFLite от Дейва Парсона, и его библиотека отправляет возвращаемое значение для его функции _radio.init. Это интересно, потому что во многих библиотеках есть "функция отправки", которая не возвращается, пока получатель не ответит. Поэтому, если вы включаете свой nRF и отправляете данные, когда приемник выключен, вы блокируетесь. С помощью теста в init вы можете проверить это и выполнить цикл, пока приемник не будет доступен.

Примечание: Я позволяю себе ответить, но это не лучший ответ. Как указано в комментарии, функция инициализации не сообщает, доступен ли приемник, но только если подключен nRF (ваш nRF, а не другой).

,

Да, есть небольшой смысл в том, чтобы не делать что-то вслепую. Но вы неправильно это сформулировали. То, что возвращает функция Дейва Парсона, не имеет ничего общего со статусом другого конца, скорее, это просто указывает на успех в общении с локальным чипом путем считывания конфигурации - это ничего не говорит о том, включен ли удаленный конец или нет, как вы, похоже, полагаете. С помощью обычного RF24 вы можете легко считывать статус для проверки проводки, также он не блокируется вечно, а только на заданное количество выходов на пенсию и только в том режиме, в котором он ожидает подтверждения., @Chris Stratton

Согласен! Я полагаю, это зависит от библиотеки? В других случаях, если у вас есть способ отправить и проверить результат, пожалуйста, сообщите, так как по этому поводу возникает много вопросов, и, похоже, результаты никогда не бывают такими, как ожидалось., @Peter


0

Я запустил ваш код на своем arduino pro mini / nRF24L01 с библиотекой "RF24 by TMRh20" и получил непрерывный поток нулей на своем мониторе.

,