Why am I getting this nRF24 error

So I added to my code the ability to read the 2s voltage, but suddenly it stopped working

The previous version: (working)

// Ultima edicao: 25/12/2024

#include <Arduino.h>
#include <SPI.h>
#include <Wire.h>
#include "Adafruit_MCP23X17.h"
#include "U8g2lib.h"
#include "nRF24L01.h"
#include "RF24.h"

#define LCDWidth u8g2.getDisplayWidth()
#define ALIGN_CENTER(t) ((LCDWidth - (u8g2.getUTF8Width(t))) / 2)
#define ALIGN_RIGHT(t) (LCDWidth - u8g2.getUTF8Width(t))
#define ALIGN_LEFT 0

#define SDA1 14
#define SCL1 13

TwoWire I2C_1 = TwoWire(1);
Adafruit_MCP23X17 mcp;

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);  // All Boards without Reset of the Display

RF24 radio(4, 5);

uint8_t joyAX; // Joystick Esquerdo X (0-255) (Midpoint: 119)
uint8_t joyAY; // Joystick Esquerdo Y (0-255) (Midpoint: 119)
uint8_t joyBX; // Joystick Direito X (0-255) (Midpoint: 119)
uint8_t joyBY; // Joystick Direito Y (0-255) (Midpoint: 119)
uint8_t pot1;
uint8_t pot2;
uint8_t pot3;
uint8_t pot4;

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;

// Os 2 Joysticks + 4 Potenciometros
byte joyAXp = 27; 
byte joyAYp = 26; 
byte joyBXp = 25;
byte joyBYp = 33;
byte pot1p = 35;
byte pot2p = 34;
byte pot3p = 2;
byte pot4p = 15;

// No esp
#define Mts1Pin 16
#define Mts2Pin 17
#define Mts3Pin 32

// No MCP
#define BotEsqCimPin 0 // GPA0
#define BotEsqDirPin 1 // GPA1
#define BotEsqBaiPin 2 // GPA2
#define BotEsqEsqPin 3 // GPA3
#define BotDirCimPin 4 // GPA4
#define BotDirDirPin 5 // GPA5
#define BotDirBaiPin 6 // GPA6
#define BotDirEsqPin 7 // GPA7
#define Mts4Pin      8 // GPB0
#define JoyEsqBotao  9 // GPB1
#define JoyDirBotao 10 // GPB2

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

// Pinos dos joysticks
const int joystickPins[numJoysticks] = {joyAXp, joyAYp, joyBXp, joyBYp, pot1p, pot2p, pot3p, pot4p};

struct Joystick {
  int pin;
  int readings[numReadings];
  int readIndex;
  long total;
  int count;
};

Joystick joysticks[numJoysticks];
int getSmoothedJoystickValue(Joystick &joystick) {
  joystick.total -= joystick.readings[joystick.readIndex];
  int newValue = analogRead(joystick.pin);
  joystick.readings[joystick.readIndex] = newValue;
  joystick.total += newValue;
  joystick.readIndex = (joystick.readIndex + 1) % numReadings;
  if (joystick.count < numReadings) {
    joystick.count++;
  }
  return joystick.total / joystick.count;
}

char *rcName = "TESTE";
uint8_t canal = 76;
uint8_t remoteBattery = 30;

void setup(void) {
  
  Serial.begin(115200);
  u8g2.begin();
  
  for (int i = 0; i < numJoysticks; i++) {
    joysticks[i] = {joystickPins[i], {0}, 0, 0, 0};
    pinMode(joysticks[i].pin, INPUT);
  }

  if (radio.isChipConnected())
    Serial.println("\n\nTransmitter NF24 connected to SPI");
  else Serial.println("\n\nNF24 is NOT connected to SPI");

  // Inicialize o segundo barramento I2C
  I2C_1.begin(SDA1, SCL1, 100000); // 100kHz é a frequência do I2C

  // Inicialize o MCP23017 com o barramento I2C1
  if (!mcp.begin_I2C(0x20, &I2C_1)) { // Inicializa com o endereço 0x20
    Serial.println("Erro ao iniciar MCP23017.");
    while (1); // Pare o programa se o MCP23017 não puder ser inicializado
  }

  for (int i = 0; i < 11; i++) {mcp.pinMode(i, INPUT_PULLUP);}

  // Configure o pino 0 como entrada com pull-up interno ativado
  radio.begin();                          // Inicializando o MÓDULO RF24l01 para comunicação.
  radio.setAutoAck(false);                // Desativando pacotes ACK (Pacote de Confirmação de Recebimento de Mensagem)
  radio.setChannel(76);                  // Configurando Módulo para operar no canal número 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
  
  pinMode(Mts1Pin, INPUT);
  pinMode(Mts2Pin, INPUT);
  pinMode(Mts3Pin, INPUT);

}

void loop() 
{

  joyAX = map(getSmoothedJoystickValue(joysticks[0]), 0, 4095, 0, 255);
  joyAY = map(getSmoothedJoystickValue(joysticks[1]), 0, 4095, 0, 255);
  joyBX = map(getSmoothedJoystickValue(joysticks[2]), 0, 4095, 0, 255);
  joyBY = map(getSmoothedJoystickValue(joysticks[3]), 0, 4095, 0, 255);
  pot1 =  map(getSmoothedJoystickValue(joysticks[4]), 0, 4095, 0, 255);
  pot2 =  map(getSmoothedJoystickValue(joysticks[5]), 0, 4095, 0, 255);
  pot3 =  map(getSmoothedJoystickValue(joysticks[6]), 0, 4095, 0, 255);
  pot4 =  map(getSmoothedJoystickValue(joysticks[7]), 0, 4095, 0, 255);
    
  Serial.print("joyAX: ");
  Serial.print(joyAX);
  Serial.print(" joyAY: ");
  Serial.print(joyAY);
  Serial.print(" | ");
  Serial.print("joyBX: ");
  Serial.print(joyBX);
  Serial.print(" joyBY: ");
  Serial.println(joyBY);

  ControleRemoto.JoyEsquerdaX = joyAX;
  ControleRemoto.JoyEsquerdaY = joyAY;
  ControleRemoto.JoyDireitaX = joyBX;
  ControleRemoto.JoyDireitaY = joyBY;

  ControleRemoto.Pot1 = pot1;
  ControleRemoto.Pot2 = pot2;
  ControleRemoto.Pot3 = pot3;
  ControleRemoto.Pot4 = pot4;
  
  ControleRemoto.BotEsqCim = mcp.digitalRead(BotEsqCimPin);
  ControleRemoto.BotEsqDir = mcp.digitalRead(BotEsqDirPin);
  ControleRemoto.BotEsqBai = mcp.digitalRead(BotEsqBaiPin);
  ControleRemoto.BotEsqEsq = mcp.digitalRead(BotEsqEsqPin);
  ControleRemoto.BotDirCim = mcp.digitalRead(BotDirCimPin);
  ControleRemoto.BotDirDir = mcp.digitalRead(BotDirDirPin);
  ControleRemoto.BotDirBai = mcp.digitalRead(BotDirBaiPin);
  ControleRemoto.BotDirEsq = mcp.digitalRead(BotDirEsqPin);

  ControleRemoto.Mts1 = digitalRead(Mts1Pin);
  ControleRemoto.Mts2 = digitalRead(Mts2Pin);
  ControleRemoto.Mts3 = digitalRead(Mts3Pin);
  ControleRemoto.Mts4 = mcp.digitalRead(Mts4Pin);
  
  if (0)
  {
    
    Serial.println("Atualizou");
    u8g2.clearBuffer();  // clear the internal memory
    
    u8g2.setFont(u8g2_font_amstrad_cpc_extended_8u);
    u8g2.setCursor(1, 13);
    u8g2.print(F("CANAL: "));
    u8g2.setCursor(55, 13);
    u8g2.print(canal);

    u8g2.setFont(u8g2_font_t0_11_mr);
    u8g2.setCursor(ALIGN_CENTER(rcName), 30);
    u8g2.print(rcName);

    u8g2.setCursor(97, 11); // 12
    u8g2.print(String(remoteBattery / 10.0, 1) + "v");
    u8g2.setCursor(97, 61);
    // u8g2.print(String(ControleRemoto.rcBattery / 10.0, 1) + "v");

    /* Ícones
    u8g2.drawXBMP(107, 3, 20, 10, batLevel);
    u8g2.drawXBMP(107, 52, 20, 10, RCbatLevel);
    u8g2.drawXBMP(1, 50, 13, 13, configIcon);
    */

    u8g2.drawHLine(0, 15, 128);
    u8g2.drawHLine(0, 47, 128);

    u8g2.sendBuffer();  // transfer internal memory to the display

    //u8g2.setPowerSave(1);
    //delay(5000);
    //u8g2.setPowerSave(0);
    //x += 1;
  }
  
  
  radio.write(&ControleRemoto, sizeof(ControleRemoto));
}

The modified version: (Not working)

// Ultima edicao: 25/12/2024

#include <Arduino.h>
#include <SPI.h>
#include <Wire.h>
#include "Adafruit_MCP23X17.h"
#include "U8g2lib.h"
#include "nRF24L01.h"
#include "RF24.h"

#define LCDWidth u8g2.getDisplayWidth()
#define ALIGN_CENTER(t) ((LCDWidth - (u8g2.getUTF8Width(t))) / 2)
#define ALIGN_RIGHT(t) (LCDWidth - u8g2.getUTF8Width(t))
#define ALIGN_LEFT 0

#define SDA1 14
#define SCL1 13

TwoWire I2C_1 = TwoWire(1);
Adafruit_MCP23X17 mcp;

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);  // All Boards without Reset of the Display

RF24 radio(4, 5);

uint8_t joyAX; // Joystick Esquerdo X (0-255) (Midpoint: 119)
uint8_t joyAY; // Joystick Esquerdo Y (0-255) (Midpoint: 119)
uint8_t joyBX; // Joystick Direito X (0-255) (Midpoint: 119)
uint8_t joyBY; // Joystick Direito Y (0-255) (Midpoint: 119)
uint8_t pot1;
uint8_t pot2;
uint8_t pot3;
uint8_t pot4;

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;

// Os 2 Joysticks + 4 Potenciometros
byte joyAXp = 27; 
byte joyAYp = 26; 
byte joyBXp = 25;
byte joyBYp = 33;
byte pot1p = 35;
byte pot2p = 34;
byte pot3p = 2;
byte pot4p = 15;

// No esp
#define Mts1Pin 16
#define Mts2Pin 17

// No MCP
#define BotEsqCimPin 0 // GPA0
#define BotEsqDirPin 1 // GPA1
#define BotEsqBaiPin 2 // GPA2
#define BotEsqEsqPin 3 // GPA3
#define BotDirCimPin 4 // GPA4
#define BotDirDirPin 5 // GPA5
#define BotDirBaiPin 6 // GPA6
#define BotDirEsqPin 7 // GPA7
#define Mts4Pin      8 // GPB0
#define JoyEsqBotao  9 // GPB1
#define JoyDirBotao 10 // GPB2
#define Mts3Pin     11
 
const int numReadings = 10;  // Número de leituras para calcular a média
const int numJoysticks = 8;  // Número de entradas de joystick

// Pinos dos joysticks
const int joystickPins[numJoysticks] = {joyAXp, joyAYp, joyBXp, joyBYp, pot1p, pot2p, pot3p, pot4p};

struct Joystick {
  int pin;
  int readings[numReadings];
  int readIndex;
  long total;
  int count;
};

Joystick joysticks[numJoysticks];
int getSmoothedJoystickValue(Joystick &joystick) {
  joystick.total -= joystick.readings[joystick.readIndex];
  int newValue = analogRead(joystick.pin);
  joystick.readings[joystick.readIndex] = newValue;
  joystick.total += newValue;
  joystick.readIndex = (joystick.readIndex + 1) % numReadings;
  if (joystick.count < numReadings) {
    joystick.count++;
  }
  return joystick.total / joystick.count;
}

char *rcName = "TESTE";
uint8_t canal = 76;
float Bateria;

unsigned long lastLeituraBateriaMillis = 0;
unsigned long currentMillis = millis();


void setup() {
  Serial.println("oi");
  
  Serial.begin(115200);
  u8g2.begin();
  
  for (int i = 0; i < numJoysticks; i++) {
    joysticks[i] = {joystickPins[i], {0}, 0, 0, 0};
    pinMode(joysticks[i].pin, INPUT);
  }

  if (radio.isChipConnected())
    Serial.println("\n\nTransmitter NF24 connected to SPI");
  else Serial.println("\n\nNF24 is NOT connected to SPI");

  // Inicialize o segundo barramento I2C
  I2C_1.begin(SDA1, SCL1, 100000); // 100kHz é a frequência do I2C

  // Inicialize o MCP23017 com o barramento I2C1
  if (!mcp.begin_I2C(0x20, &I2C_1)) { // Inicializa com o endereço 0x20
    Serial.println("Erro ao iniciar MCP23017.");
    while (1); // Pare o programa se o MCP23017 não puder ser inicializado
  }

  for (int i = 0; i < 11; i++) {mcp.pinMode(i, INPUT_PULLUP);}

  // Configure o pino 0 como entrada com pull-up interno ativado
  radio.begin();                          // Inicializando o MÓDULO RF24l01 para comunicação.
  radio.setAutoAck(false);                // Desativando pacotes ACK (Pacote de Confirmação de Recebimento de Mensagem)
  radio.setChannel(76);                  // Configurando Módulo para operar no canal número 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
  
  pinMode(Mts1Pin, INPUT);
  pinMode(Mts2Pin, INPUT);
  pinMode(Mts3Pin, INPUT);

}

void loop() 
{
  currentMillis = millis();

  if (currentMillis - lastLeituraBateriaMillis >= 5000) {
    Bateria = (analogReadMilliVolts(32) * 11) / 1000.0;
    lastLeituraBateriaMillis = millis();
    Serial.println(Bateria);
    
  }


  joyAX = map(getSmoothedJoystickValue(joysticks[0]), 0, 4095, 0, 255);
  joyAY = map(getSmoothedJoystickValue(joysticks[1]), 0, 4095, 0, 255);
  joyBX = map(getSmoothedJoystickValue(joysticks[2]), 0, 4095, 0, 255);
  joyBY = map(getSmoothedJoystickValue(joysticks[3]), 0, 4095, 0, 255);
  pot1 =  map(getSmoothedJoystickValue(joysticks[4]), 0, 4095, 0, 255);
  pot2 =  map(getSmoothedJoystickValue(joysticks[5]), 0, 4095, 0, 255);
  pot3 =  map(getSmoothedJoystickValue(joysticks[6]), 0, 4095, 0, 255);
  pot4 =  map(getSmoothedJoystickValue(joysticks[7]), 0, 4095, 0, 255);
    
  
  Serial.print("joyAX: ");
  Serial.print(joyAX);
  Serial.print(" joyAY: ");
  Serial.print(joyAY);
  Serial.print(" | ");
  Serial.print("joyBX: ");
  Serial.print(joyBX);
  Serial.print(" joyBY: ");
  Serial.println(joyBY);
  

  ControleRemoto.JoyEsquerdaX = joyAX;
  ControleRemoto.JoyEsquerdaY = joyAY;
  ControleRemoto.JoyDireitaX = joyBX;
  ControleRemoto.JoyDireitaY = joyBY;

  ControleRemoto.Pot1 = pot1;
  ControleRemoto.Pot2 = pot2;
  ControleRemoto.Pot3 = pot3;
  ControleRemoto.Pot4 = pot4;
  
  ControleRemoto.BotEsqCim = mcp.digitalRead(BotEsqCimPin);
  ControleRemoto.BotEsqDir = mcp.digitalRead(BotEsqDirPin);
  ControleRemoto.BotEsqBai = mcp.digitalRead(BotEsqBaiPin);
  ControleRemoto.BotEsqEsq = mcp.digitalRead(BotEsqEsqPin);
  ControleRemoto.BotDirCim = mcp.digitalRead(BotDirCimPin);
  ControleRemoto.BotDirDir = mcp.digitalRead(BotDirDirPin);
  ControleRemoto.BotDirBai = mcp.digitalRead(BotDirBaiPin);
  ControleRemoto.BotDirEsq = mcp.digitalRead(BotDirEsqPin);

  ControleRemoto.Mts1 = digitalRead(Mts1Pin);
  ControleRemoto.Mts2 = digitalRead(Mts2Pin);
  ControleRemoto.Mts3 = mcp.digitalRead(Mts3Pin);
  ControleRemoto.Mts4 = mcp.digitalRead(Mts4Pin);

  // Gonna work on this later
  if (currentMillis - lastLeituraBateriaMillis >= 5000)
  {

    Serial.println("Atualizou");
    u8g2.clearBuffer();  // clear the internal memory
    
    u8g2.setFont(u8g2_font_amstrad_cpc_extended_8u);
    u8g2.setCursor(1, 13);
    u8g2.print(F("CANAL: "));
    u8g2.setCursor(55, 13);
    u8g2.print(canal);

    u8g2.setFont(u8g2_font_t0_11_mr);
    u8g2.setCursor(ALIGN_CENTER(rcName), 30);
    u8g2.print(rcName);

    u8g2.setCursor(97, 11);
    u8g2.print(String(Bateria, 1) + "v");

    if (Bateria <= 6.8) {
      u8g2.setFont(u8g2_font_amstrad_cpc_extended_8u);
      u8g2.setCursor(ALIGN_CENTER("BATERIA FRACA!"), 60);
      u8g2.print("BATERIA FRACA!");
    }
    

    /* Ícones
    u8g2.drawXBMP(107, 3, 20, 10, batLevel);
    u8g2.drawXBMP(107, 52, 20, 10, RCbatLevel);
    u8g2.drawXBMP(1, 50, 13, 13, configIcon);
    */

    u8g2.drawHLine(0, 15, 128);
    u8g2.drawHLine(0, 47, 128);

    u8g2.sendBuffer();  // transfer internal memory to the display

    //u8g2.setPowerSave(1);
    //delay(5000);
    //u8g2.setPowerSave(0);
    //x += 1;
  }
  
  
  radio.write(&ControleRemoto, sizeof(ControleRemoto));
}


The modified version keeps throwing this:

02:48:54.696 -> NF24 is NOT connected to SPI
02:48:56.085 -> 
02:48:56.085 -> 
02:48:56.085 -> NF24 is NOT connected to SPI
02:49:00.354 -> 
02:49:00.354 -> 
02:49:00.354 -> NF24 is NOT connected to SPI
02:49:01.765 -> 
02:49:01.765 -> 
02:49:01.765 -> NF24 is NOT connected to SPI
02:49:03.160 -> 
02:49:03.160 -> 
02:49:03.160 -> NF24 is NOT connected to SPI
02:49:04.542 -> 
02:49:04.542 -> 
02:49:04.542 -> NF24 is NOT connected to SPI
02:49:05.956 -> 
02:49:05.956 -> 
02:49:05.956 -> NF24 is NOT connected to SPI
02:49:07.366 -> 
02:49:07.366 -> 
02:49:07.366 -> NF24 is NOT connected to SPI
  • When I upload the previous version, it works, but when I upload the new version, I keep getting this error

Where are all the differences in the two programs?

Do not use the new version. You are probably connecting voltage to places in a range it should not be. Show your wiring diagram.

If never...

I had a quick look just using fc in windows cmd line. Here's the output from it.
diff.txt (2.2 KB)
I don't have time to look at the diff now, just browsing while I had 5 mins to spare whilst waiting for something to finish cooking.

I think I will start again from the previous version to see what's gonna happen...

Request for Information to Assist with Your Problem:

I find your question interesting, but I have a problem understanding your setup. After reading your description, I still have no idea what your actual configuration looks like. To help you better, please provide the following:

  1. Annotated Schematic: Post a clear, annotated schematic of your setup showing all connections, including power, ground, and any power supplies. I do not work with Fritzing diagrams or unclear pictures. However, a readable photo of a hand-drawn schematic is perfectly fine.
  2. Technical Details: Provide links to the technical information for all hardware components used in your setup. There are many different and sometimes incompatible devices that look similar but behave differently, so it's crucial that we have accurate information. Avoid linking to marketplace sites like Amazon that often lack detailed specifications.
  3. Why This Matters: All you want is to make everything work together correctly, and all we want is to help you achieve that. By providing the correct details, we can offer more targeted and effective assistance.

Helpful Resources:

Please share these details so we can guide you toward the right solution. We're here to help!

Don't ask me how, but I fixed it!
I just re-writted the code but I don't know what was causing the error

Here's the modified code (working now):

// Ultima edicao: 25/12/2024

#include <Arduino.h>
#include <SPI.h>
#include <Wire.h>
#include "Adafruit_MCP23X17.h"
#include "U8g2lib.h"
#include "nRF24L01.h"
#include "RF24.h"

#define LCDWidth u8g2.getDisplayWidth()
#define ALIGN_CENTER(t) ((LCDWidth - (u8g2.getUTF8Width(t))) / 2)
#define ALIGN_RIGHT(t) (LCDWidth - u8g2.getUTF8Width(t))
#define ALIGN_LEFT 0

#define SDA1 14
#define SCL1 13

TwoWire I2C_1 = TwoWire(1);
Adafruit_MCP23X17 mcp;

U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0);  // All Boards without Reset of the Display

RF24 radio(4, 5);

uint8_t joyAX; // Joystick Esquerdo X (0-255) (Midpoint: 119)
uint8_t joyAY; // Joystick Esquerdo Y (0-255) (Midpoint: 119)
uint8_t joyBX; // Joystick Direito X (0-255) (Midpoint: 119)
uint8_t joyBY; // Joystick Direito Y (0-255) (Midpoint: 119)
uint8_t pot1;
uint8_t pot2;
uint8_t pot3;
uint8_t pot4;

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;

// Os 2 Joysticks + 4 Potenciometros
byte joyAXp = 27; 
byte joyAYp = 26; 
byte joyBXp = 25;
byte joyBYp = 33;
byte pot1p = 35;
byte pot2p = 34;
byte pot3p = 2;
byte pot4p = 15;

// No esp
#define Mts1Pin 16
#define Mts2Pin 17

// No MCP
#define BotEsqCimPin 0 // GPA0
#define BotEsqDirPin 1 // GPA1
#define BotEsqBaiPin 2 // GPA2
#define BotEsqEsqPin 3 // GPA3
#define BotDirCimPin 4 // GPA4
#define BotDirDirPin 5 // GPA5
#define BotDirBaiPin 6 // GPA6
#define BotDirEsqPin 7 // GPA7
#define Mts4Pin      8 // GPB0
#define JoyEsqBotao  9 // GPB1
#define JoyDirBotao 10 // GPB2
#define Mts3Pin     11 // GPB3

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

// Pinos dos joysticks
const int joystickPins[numJoysticks] = {joyAXp, joyAYp, joyBXp, joyBYp, pot1p, pot2p, pot3p, pot4p};

struct Joystick {
  int pin;
  int readings[numReadings];
  int readIndex;
  long total;
  int count;
};

Joystick joysticks[numJoysticks];
int getSmoothedJoystickValue(Joystick &joystick) {
  joystick.total -= joystick.readings[joystick.readIndex];
  int newValue = analogRead(joystick.pin);
  joystick.readings[joystick.readIndex] = newValue;
  joystick.total += newValue;
  joystick.readIndex = (joystick.readIndex + 1) % numReadings;
  if (joystick.count < numReadings) {
    joystick.count++;
  }
  return joystick.total / joystick.count;
}

char *rcName = "TESTE";
uint8_t canal = 76;
float Bateria;

unsigned long lastLeituraBateriaMillis = 0;
unsigned long currentMillis = millis();

bool Ligou = true;

void setup(void) {
  
  Serial.begin(115200);
  u8g2.begin();
  
  for (int i = 0; i < numJoysticks; i++) {
    joysticks[i] = {joystickPins[i], {0}, 0, 0, 0};
    pinMode(joysticks[i].pin, INPUT);
  }

  if (radio.isChipConnected())
    Serial.println("\n\nTransmitter NF24 connected to SPI");
  else Serial.println("\n\nNF24 is NOT connected to SPI");

  // Inicialize o segundo barramento I2C
  I2C_1.begin(SDA1, SCL1, 100000); // 100kHz é a frequência do I2C

  // Inicialize o MCP23017 com o barramento I2C1
  if (!mcp.begin_I2C(0x20, &I2C_1)) { // Inicializa com o endereço 0x20
    Serial.println("Erro ao iniciar MCP23017.");
    while (1); // Pare o programa se o MCP23017 não puder ser inicializado
  }

  for (int i = 0; i < 12; i++) {mcp.pinMode(i, INPUT_PULLUP);}

  // Configure o pino 0 como entrada com pull-up interno ativado
  radio.begin();                          // Inicializando o MÓDULO RF24l01 para comunicação.
  radio.setAutoAck(false);                // Desativando pacotes ACK (Pacote de Confirmação de Recebimento de Mensagem)
  radio.setChannel(76);                  // Configurando Módulo para operar no canal número 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
  
  pinMode(Mts1Pin, INPUT);
  pinMode(Mts2Pin, INPUT);

}

void loop() 
{
  currentMillis = millis();

  if ((currentMillis - lastLeituraBateriaMillis >= 5000) || (Ligou)) {
    Bateria = (analogReadMilliVolts(32) * 11) / 1000.0;
    Serial.println(Bateria); 
  }

  
  joyAX = map(getSmoothedJoystickValue(joysticks[0]), 0, 4095, 0, 255);
  joyAY = map(getSmoothedJoystickValue(joysticks[1]), 0, 4095, 0, 255);
  joyBX = map(getSmoothedJoystickValue(joysticks[2]), 0, 4095, 0, 255);
  joyBY = map(getSmoothedJoystickValue(joysticks[3]), 0, 4095, 0, 255);
  pot1 =  map(getSmoothedJoystickValue(joysticks[4]), 0, 4095, 0, 255);
  pot2 =  map(getSmoothedJoystickValue(joysticks[5]), 0, 4095, 0, 255);
  pot3 =  map(getSmoothedJoystickValue(joysticks[6]), 0, 4095, 0, 255);
  pot4 =  map(getSmoothedJoystickValue(joysticks[7]), 0, 4095, 0, 255);
    
  /*
  Serial.print("joyAX: ");
  Serial.print(joyAX);
  Serial.print(" joyAY: ");
  Serial.print(joyAY);
  Serial.print(" | ");
  Serial.print("joyBX: ");
  Serial.print(joyBX);
  Serial.print(" joyBY: ");
  Serial.println(joyBY);
  */

  ControleRemoto.JoyEsquerdaX = joyAX;
  ControleRemoto.JoyEsquerdaY = joyAY;
  ControleRemoto.JoyDireitaX = joyBX;
  ControleRemoto.JoyDireitaY = joyBY;

  ControleRemoto.Pot1 = pot1;
  ControleRemoto.Pot2 = pot2;
  ControleRemoto.Pot3 = pot3;
  ControleRemoto.Pot4 = pot4;
  
  ControleRemoto.BotEsqCim = mcp.digitalRead(BotEsqCimPin);
  ControleRemoto.BotEsqDir = mcp.digitalRead(BotEsqDirPin);
  ControleRemoto.BotEsqBai = mcp.digitalRead(BotEsqBaiPin);
  ControleRemoto.BotEsqEsq = mcp.digitalRead(BotEsqEsqPin);
  ControleRemoto.BotDirCim = mcp.digitalRead(BotDirCimPin);
  ControleRemoto.BotDirDir = mcp.digitalRead(BotDirDirPin);
  ControleRemoto.BotDirBai = mcp.digitalRead(BotDirBaiPin);
  ControleRemoto.BotDirEsq = mcp.digitalRead(BotDirEsqPin);

  ControleRemoto.Mts1 = digitalRead(Mts1Pin);
  ControleRemoto.Mts2 = digitalRead(Mts2Pin);
  ControleRemoto.Mts3 = digitalRead(Mts3Pin);
  ControleRemoto.Mts4 = mcp.digitalRead(Mts4Pin);

  if ((currentMillis - lastLeituraBateriaMillis >= 5000) || (Ligou))
  {
    Ligou = false;
    lastLeituraBateriaMillis = millis();

    Serial.println("Atualizou");
    u8g2.clearBuffer();  // clear the internal memory
    
    u8g2.setFont(u8g2_font_amstrad_cpc_extended_8u);
    u8g2.setCursor(1, 13);
    u8g2.print(F("CANAL: "));
    u8g2.setCursor(55, 13);
    u8g2.print(canal);

    u8g2.setFont(u8g2_font_t0_11_mr);
    u8g2.setCursor(ALIGN_CENTER(rcName), 30);
    u8g2.print(rcName);

    u8g2.setCursor(97, 11); // 12
    u8g2.print(String(Bateria, 2) + "v");
    u8g2.setCursor(97, 61);

    if (Bateria <= 6.8) {
      u8g2.setFont(u8g2_font_amstrad_cpc_extended_8u);
      u8g2.setCursor(ALIGN_CENTER("BATERIA FRACA!"), 60);
      u8g2.print("BATERIA FRACA!");
    }

    /* Ícones
    u8g2.drawXBMP(107, 3, 20, 10, batLevel);
    u8g2.drawXBMP(107, 52, 20, 10, RCbatLevel);
    u8g2.drawXBMP(1, 50, 13, 13, configIcon);
    */

    u8g2.drawHLine(0, 15, 128);
    u8g2.drawHLine(0, 47, 128);

    u8g2.sendBuffer();  // transfer internal memory to the display

    //u8g2.setPowerSave(1);
    //delay(5000);
    //u8g2.setPowerSave(0);
    //x += 1;
  }
  
  radio.write(&ControleRemoto, sizeof(ControleRemoto));
}

Thanks to everyone who was here when I needed.