Модуль nRF24L01 с использованием библиотеки Mirf работал, а затем остановился
У меня есть два модуля nRF24L01, они оба подключены к сенсорному экрану, который имеет специальные порты для этого типа модуля на Arduino Unos.
У меня есть этот код на Arduino, который посылает сигнал:
#include <MirfHardwareSpiDriver.h>
#include <MirfSpiDriver.h>
#include <Mirf.h>
#include <nRF24L01.h>
#include <SPI.h>
#include <Wire.h>
//0 = стоп, 1 = влево, 2 = вправо, 3 = вперед, 4 = назад
long command;
long last_command;
long Joystick_1_X;
long Joystick_1_Y;
long Joystick_1;
void setup() {
// поместите сюда код установки для однократного запуска:
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setTADDR((byte *)"serv1");
Mirf.payload = sizeof(long);
Mirf.config();
Serial.begin(115200);
}
void loop() {
Joystick_1_X = analogRead(A0);
Joystick_1_Y = analogRead(A1);
if(Joystick_1_X < 450){
command = 1;
}else if(Joystick_1_X > 600){
command = 2;
}else if(Joystick_1_Y > 600){
command = 3;
}else if(Joystick_1_Y < 400){
command = 4;
}else{
command = 0;
}
if(command == last_command){
}else{
Mirf.send((byte *)&command);
last_command = command;
}
}
и этот код на Arduino, который получает
#include "SPI.h"
#include "Mirf.h"
#include "nRF24L01.h"
#include "MirfHardwareSpiDriver.h"
int TN1= 3;
int TN2 = 4;
int ENA = 9;
int TN4 = 5;
int TN3 = 6;
int ENB = 10;
long data;
void setup() {
pinMode(TN1, OUTPUT);
pinMode(TN2, OUTPUT);
pinMode(TN3, OUTPUT);
pinMode(TN4, OUTPUT);
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
Mirf.spi = &MirfHardwareSpi;
Mirf.init();
Mirf.setRADDR((byte *)"serv1");
Mirf.payload = sizeof(long);
Mirf.config();
Serial.begin(115200);
Serial.print("begin");
}
void loop() {
// поместите сюда ваш основной код для многократного запуска:
receiveCommand();
if(data == 1){
left();
}else if(data == 2){
right();
}else if(data == 3){
forward();
}else if(data == 4){
backwards();
}else if(data == 0){
stop_rover();
}
}
void receiveCommand(){
if(!Mirf.isSending() && Mirf.dataReady()){
Mirf.getData((byte *)&data);
Mirf.rxFifoEmpty();
Serial.print(data);
}else{
Serial.println("No data to be recieved");
}
}
void forward(){
digitalWrite(ENB, HIGH);
digitalWrite(ENA, HIGH);
digitalWrite(TN4, HIGH);
digitalWrite(TN3, LOW);
digitalWrite(TN1, HIGH);
digitalWrite(TN2, LOW);
}
void backwards(){
digitalWrite(ENB, HIGH);
digitalWrite(ENA, HIGH);
digitalWrite(TN4, LOW);
digitalWrite(TN3, HIGH);
digitalWrite(TN1, LOW);
digitalWrite(TN2, HIGH);
}
void left(){
digitalWrite(ENA, HIGH);
digitalWrite(TN1, HIGH);
digitalWrite(TN2, LOW);
}
void right(){
digitalWrite(ENB, HIGH);
digitalWrite(TN4, HIGH);
digitalWrite(TN3, LOW);
}
void stop_rover(){
digitalWrite(ENB, LOW);
digitalWrite(ENA, LOW);
digitalWrite(TN4, LOW);
digitalWrite(TN3, LOW);
digitalWrite(TN1, LOW);
digitalWrite(TN2, LOW);
}
Это работало, и ровер крутил колеса, когда пульт дистанционного управления передал сигнал, но затем он просто остановился. На сенсорном шилде написано, что они подключены к порту 3V, я пробовал использовать библиотеку RF24, и это тоже не сработало.
Мы будем очень признательны за любую помощь.
@Richard Beattie, 👍2
Обсуждение1 ответ
Лучший ответ:
▲ 1
Используя библиотеку MIRF, которую я получил здесь, и затем используя этот код для отправки
Mirf.send((byte *)&command);
while(Mirf.isSending()){
}
и этот код для получения
if(!Mirf.isSending() && Mirf.dataReady()){
Mirf.getData((byte *)&data);
Mirf.rxFifoEmpty();
else(){
}
Мне удалось заставить его работать
,
@Richard Beattie
Смотрите также:
- Как использовать SPI на Arduino?
- Библиотека DHT.h не импортируется
- Светодиоды: разница между общим анодом и общим катодом
- вопрос по трубке nRF24L01
- Как повторить кусок кода
- Почему эта программа на C++ не может прочитать Serial.write() моего arduino?
- Использование функции уровня сигнала модуля nRF24L01
- Как изменить переменную при нажатии кнопки, подключенной к контакту 2
Не могли бы вы попробовать встроенные проверки самопроверки, которые поставляются с библиотекой RF24, поддерживаемой TMRh20? Все ли они работают нормально?, @Avamander
Я загрузил файл GettingStarted.ino на два Arduino, передающий узел распечатал это Теперь отправка Отправлено 18204112, получен ответ 0, задержка приема-передачи 18204112 микросекунд Отправка Отправлено 28434792, получен ответ 0, двусторонняя задержка 28434792 мкс и принимающий узел распечатал этот отправленный ответ 251854848 Отправлен ответ 0, @Richard Beattie
Что-то не так. Проверьте проводку и, если можете, припаяйте электролитические колпачки к контактам GND и 3,3 В радиомодуля., @Avamander
Нет проводки, nRF24L01 подключен к датчику, который находится на ардуино, я разместил изображение экрана датчика с nRF24L01 выше., @Richard Beattie
Правильно ли определены выводы в скетче? Не могли бы вы припаять колпачки к контактам питания радиомодуля?, @Avamander
Я попытался изменить определенные контакты на что-то другое, но я продолжаю получать сообщение «Теперь отправка». неуспешный Отправлено 3496020, получен ответ 0, задержка приема-передачи 3496020 микросекунд. И у меня нет шапки, @Richard Beattie
Что говорит другой узел? Кроме того, пожалуйста, купите несколько конденсаторов и припаяйте их, это может решить вашу проблему., @Avamander
Перепаял конденсаторы, но все равно приходит Отправлено 28434792, Получил ответ 0,, @Richard Beattie
Что говорит второй узел? Вы проверили, правильно ли определены ваши контакты CS и CE?, @Avamander
Принимающий узел пишет «Отправленный ответ 1795», «Отправленный ответ 0», «Отправленный ответ 259», «Отправленный ответ 0», и когда я поменял местами определенные контакты CS и CE, узел написал «Теперь отправка». неуспешный Ошибка, время ответа истекло., @Richard Beattie
Попробуйте пример с именем Transfer. Задержка в оба конца и отправленные ответы странные, хотя контакты правильные, и вы припаяли конденсаторы на модулях NRF24L01+. Странный., @Avamander
Я не думаю, что это сработало, принимающий узел написал это Rate: 365,92 Количество полезной нагрузки: 11435 Рейтинг: 16,54 Количество полезной нагрузки: 517 Ставка: 0.00 Количество полезной нагрузки: 0 Ставка: 0.00 Количество полезной нагрузки: 0 Ставка: 0.00 Количество полезной нагрузки: 0 Скорость: 0,00, и передающий узел написал это Инициирование базовой передачи данных Передача завершена со скоростью 219,18 КБ/с. 0 из 10000 пакетов не удалось отправить Запуск базовой передачи данных Передача завершена со скоростью 219,18 КБ/с. 0 из 10000 пакетов не удалось отправить, @Richard Beattie
Также они оба написали в начале это также в начале они оба сказали это STATUS = 0x00 RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=0 TX_FULL=0 RX_ADDR_P0-1 = 0x0000000000 0x0000000000 RX_ADDR_P2-5 = 0x00 0x00 0x00 0x00 TX_ADDR = 0x0000000000 RX_PW_P0-6 = 0x00 0x00 0x00 0x00 0x00 0x00 EN_AA = 0x00 EN_RXADDR = 0x00 RF_CH = 0x00 RF_SETUP = 0x00 КОНФИГ = 0x00 ДИНПД/ФУНКЦИЯ = 0x00 0x00 Скорость передачи данных = 1 Мбит/с Модель = nRF24L01 Длина CRC = отключено Мощность PA = PA_MIN, @Richard Beattie
Если верно, что вы правильно определили выводы CS и CE, ваши модули nrf24l01+ неисправны., @Avamander