Quantcast
Channel: Arduino Forum - Latest topics
Viewing all articles
Browse latest Browse all 15427

[SOLVED] nRF24L01 aren't talking to eachother

$
0
0

I have 2 nRF24L01, one in an Arduino Nano and the other in an ESP32. i can't make them talk to eachother.

Transceiver code:

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

RF24 radio(4, 5);

const int joyAXp = 27; // Pino Joystick A - X
const int joyAYp = 26; // Pino Joystick A - Y
const int phP1 = 32; // Pino PonteH 1
const int phP2 = 35; // Pino PonteH 2

int MidpointEsqX = 119;
int MidpointEsqY = 119;
int MidpointDirX = 119;
int MidpointDirY = 119;
int Tolerance = 0;

int joyAX = 0; // Joystick Esquerdo X (0-255) (Midpoint: 119)
int joyAY = 0; // Joystick Esquerdo Y (0-255) (Midpoint: 119)

struct MeuControleRemoto {
  boolean BotEsqCim = 0;
  boolean BotEsqEsq = 0;
  boolean BotEsqDir = 0;
  boolean BotEsqBai = 0;
  boolean BotDirCim = 0;
  boolean BotDirEsq = 0;
  boolean BotDirDir = 0;
  boolean BotDirBai = 0;
  boolean Mts1 = 0;
  boolean Mts2 = 0;
  boolean Mts3 = 0;
  boolean Mts4 = 0;
  byte Pot1 = 0;
  byte Pot2 = 0;
  byte Pot3 = 0;
  byte Pot4 = 0;
  byte JoyDireitaX = 127;
  byte JoyDireitaY = 127;
  byte JoyEsquerdaX = 127;
  byte JoyEsquerdaY = 127;
};

MeuControleRemoto ControleRemoto;

const int numReadings = 10;  // Número de leituras para calcular a média

// Função para calcular a média de 10 leituras do joystick para uma leitura mais limpa:
int getSmoothedJoystickValue(int pin) {
  static int readingsX[numReadings] = {0};  // Array para armazenar as leituras do eixo X
  static int readingsY[numReadings] = {0};  // Array para armazenar as leituras do eixo Y
  static int indexX = 0;                    // Índice da leitura atual para o eixo X
  static int indexY = 0;                    // Índice da leitura atual para o eixo Y
  static long totalX = 0;                   // Soma das leituras do eixo X
  static long totalY = 0;                   // Soma das leituras do eixo Y
  static int countX = 0;                    // Contador de leituras para o eixo X
  static int countY = 0;                    // Contador de leituras para o eixo Y

  // Variáveis para armazenar a média
  int average = 0;

  // Subtrai a leitura mais antiga do total
  if (pin == joyAXp) {
    totalX -= readingsX[indexX];
    // Lê o novo valor do joystick
    int newValue = analogRead(pin);
    // Armazena o novo valor no array
    readingsX[indexX] = newValue;
    // Adiciona o novo valor ao total
    totalX += newValue;
    // Incrementa o índice da leitura atual
    indexX = (indexX + 1) % numReadings;
    // Incrementa o contador de leituras até atingir o número desejado
    if (countX < numReadings) {
      countX++;
    }
    // Calcula a média
    average = totalX / countX;
  } else if (pin == joyAYp) {
    totalY -= readingsY[indexY];
    // Lê o novo valor do joystick
    int newValue = analogRead(pin);
    // Armazena o novo valor no array
    readingsY[indexY] = newValue;
    // Adiciona o novo valor ao total
    totalY += newValue;
    // Incrementa o índice da leitura atual
    indexY = (indexY + 1) % numReadings;
    // Incrementa o contador de leituras até atingir o número desejado
    if (countY < numReadings) {
      countY++;
    }
    // Calcula a média
    average = totalY / countY;
  }

  return average;
}

void setup() {
  Serial.begin(115200);
  pinMode(joyAXp, INPUT);
  pinMode(joyAYp, INPUT);
  pinMode(phP1, OUTPUT);
  pinMode(phP2, OUTPUT);

  radio.begin();                          //Inicialidando o MÓDULO RF24l01 para comunicação.
  radio.setAutoAck(false);                // Desativando pacotes ACK (Pacote de Confirmação de Recebimento de Mensagem)
  radio.setChannel(100);                  // Configurando Módulo para operar no canal numéro 1 (você pode escolher um canal de 0 a 127) (Canal Padrão é o 76)
  radio.setDataRate(RF24_250KBPS);        // Configurando Módulo para operar em uma taxa de 250kbps (Menor taxa de dados possível para um maior alcance do rádio)
  radio.setPALevel(RF24_PA_HIGH);         // Configurando Módulo para transmitir em potência máxima
  radio.powerUp();                        // Ativando Módulo, caso entre em estado de baixo consumo.
  radio.openWritingPipe(0xE8E8F0F0E1LL);  // Abrindo o meio de comunicação entre transmissor e receptor e configurando endereço de comunicação(0xE8E8F0F0E1LL)
  radio.stopListening();                  // Interrompendo mecanismos de recepção "escuta" do Módulo
}

void loop() {
  delay(20);
  
  joyAX = map(getSmoothedJoystickValue(joyAXp), 0,4095, 0, 255);
  joyAY = map(getSmoothedJoystickValue(joyAYp), 0,4095, 0, 255);

  if ((joyAX != ControleRemoto.JoyEsquerdaX) || (joyAY != ControleRemoto.JoyEsquerdaY)) {
    
    if ((joyAX > (MidpointEsqX + Tolerance)) || ((joyAX < (MidpointEsqX - Tolerance)))) {
      
      ControleRemoto.JoyEsquerdaX = joyAX;

    }
    
    if ((joyAY > (MidpointEsqY + Tolerance)) || ((joyAY < (MidpointEsqY - Tolerance)))) {
      
      ControleRemoto.JoyEsquerdaY = joyAY;

    }

    /*
    Serial.print("joyAX: ");
    Serial.print(joyAX);
    Serial.print(" joyAY: ");
    Serial.println(joyAY);
    */
  }

  for (int i = 0; i < 5; i++) {
    //Serial.println(ControleRemoto.JoyEsquerdaX);
    radio.write(&ControleRemoto, sizeof(ControleRemoto));
  }

}

Receiver code:

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

struct MeuControleRemoto {
  boolean BotEsqCim = 0;
  boolean BotEsqEsq = 0;
  boolean BotEsqDir = 0;
  boolean BotEsqBai = 0;
  boolean BotDirCim = 0;
  boolean BotDirEsq = 0;
  boolean BotDirDir = 0;
  boolean BotDirBai = 0;
  boolean Mts1 = 0;
  boolean Mts2 = 0;
  boolean Mts3 = 0;
  boolean Mts4 = 0;
  byte Pot1 = 0;
  byte Pot2 = 0;
  byte Pot3 = 0;
  byte Pot4 = 0;
  byte JoyDireitaX = 127;
  byte JoyDireitaY = 127;
  byte JoyEsquerdaX = 127;
  byte JoyEsquerdaY = 127;
};

MeuControleRemoto ControleRemoto;
Servo servo;
RF24 radio(7, 8);

int LastServoPos = 90;

void setup() {
  radio.begin();                             //Inicialisando o MÓDULO RF24l01 para comunicação.
  radio.setAutoAck(false);                   // Desativando pacotes ACK (Pacote de Confirmação de Recebimento de Mensagem)
  radio.setChannel(100);                     // Configurando canal de transmissão do rádio (você pode escolher um canal de 0 a 127)
  radio.setDataRate(RF24_250KBPS);           // Configurando Módulo para operar em uma taxa de 250kbps (Menor taxa de dados possível para um maior alcance do rádio)
  radio.setPALevel(RF24_PA_HIGH);            // Configurando Módulo para transmitir em potência máxima (a título de conhecimento, pois aqui o rádio está configurado apenas como receptor)
  radio.powerUp();                           // Ativando Módulo, caso entre em estado de baixo consumo.
  radio.startListening();                    //Inicializando o MÓDULO para 'escutar' as requisições enviadas pelo transmissor.
  radio.openReadingPipe(1, 0xE8E8F0F0E1LL);  // Abrindo o meio de comunicação entre transmissor e receptor, também configurando endereço de comunicação(0xE8E8F0F0E1LL)
  Serial.begin(9600);
  servo.attach(9);
}

void loop() {
  delay(20);

  Serial.println("1");

  if (radio.available()) {  //verificando se há dados enviados pelo tranmissor.
    Serial.println("2");
    radio.read(&ControleRemoto, sizeof(ControleRemoto));  // Recebendo dados enviado pelo transmissor
  
    if (ControleRemoto.JoyEsquerdaX != LastServoPos) {
      Serial.println(ControleRemoto.JoyEsquerdaX);
      servo.write(map(ControleRemoto.JoyEsquerdaX, 0,255, 10,170));
      LastServoPos = map(ControleRemoto.JoyEsquerdaX, 0,255, 10,170);
    }

  }

}

  • I've already checked the connections on both nRF24.
  • I'm powering the boards using my laptop.
  • Both nRF24 are being powered by the boards' 3v3 ports.
  • Also both nRF24 are working.

I know they are working because I loaded the scanner program into the receiver and when i turned the transceiver, the receiver showed a lot of interference on the serial

They don't have a capacitor yet. Which one should i use: 10uf, 15uf, 47uf, or 100uf?

3 posts - 2 participants

Read full topic


Viewing all articles
Browse latest Browse all 15427

Trending Articles