Variabili String non fanno funzionare RF24

Facendo delle prove con la libreria RF24, ho riscontrato questo:
Se all'interno del codice aggiungo una variabile di tipo "String", la trasmissione non va a buon fine anche senza utilizzare la variabile.
Vi posto il codice (che è semplicemente l'esempio contenuto all'interno della libreria).

Se tolgo il commento e quindi inserisco la variabile "prova" in output ottengo:

4F4F4F4F40404040404040404040404040404041414141414141414141414141414344454648494A4B4C4E4F5F...Failed
5F5F5F5F50505050505050505050505050505051515151515151515151515151515354555658595A5B5C5E5F6F...Failed
6F6F6F6F60606060606060606060606060606061616161616161616161616161616364656668696A6B6C6E6F7F...Failed

Mentre semplicemente commentandola ottengo:

FFFFFFF000...OK.
0000000000...OK.
00000000000...OK.

Secondo voi come mai si comporta così?
Grazie.

PS: questo il codice :

    /*
    * Arduino Wireless Communication Tutorial
    *     Example 1 - Transmitter Code
    *                
    * by Dejan Nedelkovski, www.HowToMechatronics.com
    * 
    * Library: TMRh20/RF24, https://github.com/tmrh20/RF24/
    * https://howtomechatronics.com/tutorials/arduino/arduino-wireless-communication-nrf24l01-tutorial/
    * 
    */
    #include <SPI.h>
    #include <nRF24L01.h>
    #include <RF24.h>
    RF24 radio(9, 10); // CE, CSN
    const byte address[6] = "00001";
	
	int x = 0 ;
	
    void setup() {
      radio.begin();
      radio.openWritingPipe(address);
      radio.setPALevel(RF24_PA_MIN);
      radio.stopListening();

      Serial.begin(9600);
      Serial.println("Startup RF24_TX competed.");
      
    }
    void loop() {
		//String prova="AAA"; //se commento questa riga, funziona!
		char text[20] = "AAA" ; 
		radio.write(&text, sizeof(text));
		delay(1000);
    }

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

Scusate, provvedo.

Beh intanto gli oggetti della classe "String" non vanno di fatto mai usati perché la gestione delle stringhe "ad alto livello" funziona su un PC ma su piccoli MCU no perché la continua allocazione e rilascio di stringhe non è ottimizzata da nessun garbage collector.
Nel tuo caso in particolare poi, tu crei una stringa nuova dentro al loop() ossia ad ogni iterazione ne viene creata una, usata, e poi rilasciata, e questo genera una frammentazione della memoria molto pericolosa per il corretto funzionamento.

Quindi cerca di NON usare mai "String" ma solo "char*", ed in particolare nel tuo caso proverei anche ad evitare di creare un buffer (la variabile "prova") nel loop, meglio definirla globale (fuori dal loop) come buffer e usare sempre quella, ossia una cosa del tipo:

...
const byte address[6] = "00001";

char buffer[20] = "AAA" ;  // Buffer per la radio.write()
	
int x = 0 ;
	
void setup() {
  radio.begin();
  radio.openWritingPipe(address);
  radio.setPALevel(RF24_PA_MIN);
  radio.stopListening();

  Serial.begin(9600);
  Serial.println("Startup RF24_TX competed.");
      
}

void loop() {
  ... in qualche modo imposto la stringa nel buffer
  radio.write(&buffer, sizeof(buffer));
  // Azzero la stringa buffer
  buffer[0] = 0;
  delay(1000);
}
...