Проблема 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
Какая-нибудь помощь?
@Omar Hussein, 👍1
Обсуждение3 ответа
Лучший ответ:
Быстрый просмотр заголовочных файлов библиотеки показывает, что вам следует вызвать функцию radio.stopListening()
перед вызовом функции radio.write ()
, чтобы модуль переключился в режим передачи. Это может быть то, что блокирует радио.напишите
в блоке "еще". Я также рекомендую вам сначала попробовать массив байтов, чтобы все работало, просто на случай, если проблема в интерах.
Завершая ответ TisteAndii, я предлагаю взглянуть на init. Согласно списку классов RF24, кажется, что radio.begin(); и radio.openWritingPipe(труба); являются функцией "void". Я лично использую NRFLite от Дейва Парсона, и его библиотека отправляет возвращаемое значение для его функции _radio.init. Это интересно, потому что во многих библиотеках есть "функция отправки", которая не возвращается, пока получатель не ответит. Поэтому, если вы включаете свой nRF и отправляете данные, когда приемник выключен, вы блокируетесь. С помощью теста в init вы можете проверить это и выполнить цикл, пока приемник не будет доступен.
Примечание: Я позволяю себе ответить, но это не лучший ответ. Как указано в комментарии, функция инициализации не сообщает, доступен ли приемник, но только если подключен nRF (ваш nRF, а не другой).
Да, есть небольшой смысл в том, чтобы не делать что-то вслепую. Но вы неправильно это сформулировали. То, что возвращает функция Дейва Парсона, не имеет ничего общего со статусом другого конца, скорее, это просто указывает на успех в общении с локальным чипом путем считывания конфигурации - это ничего не говорит о том, включен ли удаленный конец или нет, как вы, похоже, полагаете. С помощью обычного RF24 вы можете легко считывать статус для проверки проводки, также он не блокируется вечно, а только на заданное количество выходов на пенсию и только в том режиме, в котором он ожидает подтверждения., @Chris Stratton
Согласен! Я полагаю, это зависит от библиотеки? В других случаях, если у вас есть способ отправить и проверить результат, пожалуйста, сообщите, так как по этому поводу возникает много вопросов, и, похоже, результаты никогда не бывают такими, как ожидалось., @Peter
Я запустил ваш код на своем arduino pro mini / nRF24L01 с библиотекой "RF24 by TMRh20" и получил непрерывный поток нулей на своем мониторе.
- вопрос по трубке nRF24L01
- Использование функции уровня сигнала модуля nRF24L01
- Как автоматически сбросить nrf24l01+ с кодом?
- Не получаем данные от NRF24L01
- Как отправить данные датчика с Arduino через NRF24L01 на Raspberry Pi
- Модуль nRF24L01 с использованием библиотеки Mirf работал, а затем остановился
- Модуль Bluetooth против беспроводного модуля Arduino
- nRF24L01 + потеря пакетов, вызванная считыванием Arduino и связью с датчиками
Какой библиотекой вы пользуетесь?, @Avamander
Попробуйте изменить "int smth[1]" на `байт smth[1]"., @Gerben
Достаточно припаять конденсаторы к выводам питания NRF24L01. 100uF., @Avamander
Я запустил ваш код на своем arduino pro mini / nRF24L01 с библиотекой "RF24 by TMRh20" и получил непрерывный поток нулей на своем мониторе., @PyNZ