NRF24L01 e Arduino uno

Salve ragazzi, qualcuno con piu’ esperienza nel settore sa dirmi come posso editare il seguente sketch per far si che al posto di un contatore io possa inviare un carattere?
sketch trasmettitore;

#include "API.h"
#define CEq       8
// CE_BIT:   Digital Input     Chip Enable Activates RX or TX mode
#define CSNq      9
// CSN BIT:  Digital Input     SPI Chip Select
#define SCKq      10
// SCK BIT:  Digital Input     SPI Clock
#define MOSIq     11
// MOSI BIT: Digital Input     SPI Slave Data Input
#define MISOq     12

struct dataStruct{
   int adcc; 
   unsigned long counter;
}nrf_data;

#define TX_ADR_WIDTH    5   // 5 unsigned chars TX(RX) address width
#define TX_PLOAD_WIDTH  sizeof(nrf_data)  // 32 unsigned chars TX payload

unsigned char TX_ADDRESS[TX_ADR_WIDTH]  = 
{
  0x34,0x43,0x10,0x10,0x01
}; // Define a static TX address

unsigned char rx_buf[TX_PLOAD_WIDTH] = {0}; // initialize value
unsigned char tx_buf[TX_PLOAD_WIDTH] = {0};

void setup() 
{
  pinMode(CEq,  OUTPUT);
  pinMode(SCKq, OUTPUT);
  pinMode(CSNq, OUTPUT);
  pinMode(MOSIq,  OUTPUT);
  pinMode(MISOq, INPUT);
  //pinMode(IRQq, INPUT);
  Serial.begin(115200);
  init_io();                        // Initialize IO port
  unsigned char status=SPI_Read(STATUS);
  Serial.print("status = ");    
  Serial.println(status,HEX);     // There is read the mode’s status register, the default value should be ‘E’
  Serial.println("*******************TX_Mode Start****************************");
  TX_Mode();                       // set TX mode
}
void loop() 
{
  
  for(;;)
  {
 // nrf_data.adcc = analogRead(A1);
  nrf_data.counter++;  
  memcpy(tx_buf, &nrf_data, sizeof(nrf_data)); 
  
    unsigned char status = SPI_Read(STATUS);                  
    if(status&TX_DS||status&MAX_RT)                                          
    {
      SPI_RW_Reg(FLUSH_TX,0);                                  
      SPI_Write_Buf(WR_TX_PLOAD,tx_buf,TX_PLOAD_WIDTH);       
    }
    
    SPI_RW_Reg(WRITE_REG+STATUS,status);                    
   delay(1000);
  }
}


void init_io(void)
{
  //digitalWrite(IRQq, 0);
  digitalWrite(CEq, 0); 
  digitalWrite(CSNq, 1);                
}


unsigned char SPI_RW(unsigned char Byte)
{
  unsigned char i;
  for(i=0;i<8;i++)                      
  {
    if(Byte&0x80)
    {
      digitalWrite(MOSIq, 1);
    }
    else
    {
      digitalWrite(MOSIq, 0);
    }
    digitalWrite(SCKq, 1);
    Byte <<= 1;                       
    if(digitalRead(MISOq) == 1)
    {
      Byte |= 1;                     
    }
    digitalWrite(SCKq, 0);
  }
  return(Byte);                 
}

unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value)
{
  unsigned char status;

  digitalWrite(CSNq, 0);                   
  status = SPI_RW(reg);                   
  SPI_RW(value);                          
  digitalWrite(CSNq, 1);                 

  return(status);                
}

unsigned char SPI_Read(unsigned char reg)
{
  unsigned char reg_val;

  digitalWrite(CSNq, 0);           
  SPI_RW(reg);                   
  reg_val = SPI_RW(0);         
  digitalWrite(CSNq, 1);          
  
  return(reg_val);              
}

unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
{
  unsigned char status,i;

  digitalWrite(CSNq, 0);                
  status = SPI_RW(reg);          

  for(i=0;i<bytes;i++)
  {
    pBuf[i] = SPI_RW(0);   
  }

  digitalWrite(CSNq, 1);                 

  return(status);                  
}

unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
{
  unsigned char status,i;

  digitalWrite(CSNq, 0);                
  status = SPI_RW(reg);           
  for(i=0;i<bytes; i++)             
  {
    SPI_RW(*pBuf++);
  }
  digitalWrite(CSNq, 1);                  
  return(status);                  
}

void TX_Mode(void)
{
  digitalWrite(CEq, 0);

  digitalWrite(CEq, 1);
}

e come editare lo sketch del ricevitore per fargli ricevere lo stesso carattere
sketch ricevitore:

#include "API.h"
#define CEq       8
// CE_BIT:   Digital Input     Chip Enable Activates RX or TX mode
#define CSNq      9
// CSN BIT:  Digital Input     SPI Chip Select
#define SCKq      10
// SCK BIT:  Digital Input     SPI Clock
#define MOSIq     11
// MOSI BIT: Digital Input     SPI Slave Data Input
#define MISOq     12


struct dataStruct{
   int adcc; 
   unsigned long counter;
}nrf_data;


#define TX_ADR_WIDTH    5   // 5 unsigned chars TX(RX) address width
#define TX_PLOAD_WIDTH  sizeof(nrf_data)  // 32 unsigned chars TX payload

unsigned char TX_ADDRESS[TX_ADR_WIDTH]  = 
{
  0x34,0x43,0x10,0x10,0x01
}; // Define a static TX address

unsigned char rx_buf[TX_PLOAD_WIDTH];
unsigned char tx_buf[TX_PLOAD_WIDTH];

void setup() 
{
  pinMode(led,OUTPUT);
  pinMode(CEq,  OUTPUT);
  pinMode(SCKq, OUTPUT);
  pinMode(CSNq, OUTPUT);
  pinMode(MOSIq,  OUTPUT);
  pinMode(MISOq, INPUT);
 // pinMode(IRQq, INPUT);
  Serial.begin(115200);
  SPI_RW_Reg(FLUSH_RX,0); 
  init_io();                        // Initialize IO port
  unsigned char status=SPI_Read(STATUS);
  Serial.print("status = ");
  Serial.println(status,HEX);      // There is read the mode’s status register, the default value should be ‘E’  
  Serial.println("*****************RX_Mode start******************************R");
  RX_Mode();                        // set RX mode
}
void loop() 
{
  for(;;)
  {
    unsigned char status = SPI_Read(STATUS);                        
    if(status&RX_DR)                                                
    {
      SPI_Read_Buf(RD_RX_PLOAD, rx_buf, TX_PLOAD_WIDTH);             
      SPI_RW_Reg(FLUSH_RX,0);                                        
      for(int i=0; i<TX_PLOAD_WIDTH; i++)
      {
          Serial.print(" ");
          Serial.print(rx_buf[i]);                            
      }
      Serial.print(" ");
      memcpy(&nrf_data, rx_buf, sizeof(nrf_data));
         Serial.print("Adc now: ");
         Serial.print(nrf_data.adcc);
      
      Serial.print(" transmission counter: ");
      Serial.println(nrf_data.counter);
      
      delay(900);
      
    }
    
    }
    SPI_RW_Reg(WRITE_REG+STATUS,status);                             
    delay(100);
  }
}

void init_io(void)
{
  //digitalWrite(IRQq, 0);
  digitalWrite(CEq, 0); 
  digitalWrite(CSNq, 1);               
}
unsigned char SPI_RW(unsigned char Byte)
{
  unsigned char i;
  for(i=0;i<8;i++)                     
  {
    if(Byte&0x80)
    {
      digitalWrite(MOSIq, 1);    
    }
    else
    {
      digitalWrite(MOSIq, 0);
    }
    digitalWrite(SCKq, 1);                      
    Byte <<= 1;                        
    if(digitalRead(MISOq) == 1)
    {
      Byte |= 1;                      
    }
    digitalWrite(SCKq, 0);         
  }
  return(Byte);                 
}

unsigned char SPI_RW_Reg(unsigned char reg, unsigned char value)
{
  unsigned char status;

  digitalWrite(CSNq, 0);                   
  status = SPI_RW(reg);                 
  SPI_RW(value);                         
  digitalWrite(CSNq, 1);                 
  return(status);                   
}

unsigned char SPI_Read(unsigned char reg)
{
  unsigned char reg_val;

  digitalWrite(CSNq, 0);          
  SPI_RW(reg);                  
  reg_val = SPI_RW(0);           
  digitalWrite(CSNq, 1);       

  return(reg_val);    }         
unsigned char SPI_Read_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
{
  unsigned char status,i;

  digitalWrite(CSNq, 0);               
  status = SPI_RW(reg);         
  for(i=0;i<bytes;i++)
  {
    pBuf[i] = SPI_RW(0);   
  }

  digitalWrite(CSNq, 1);                  

  return(status);                
}

unsigned char SPI_Write_Buf(unsigned char reg, unsigned char *pBuf, unsigned char bytes)
{
  unsigned char status,i;

  digitalWrite(CSNq, 0);                   
  status = SPI_RW(reg);            
  for(i=0;i<bytes; i++)            
  {
    SPI_RW(*pBuf++);
  }
  digitalWrite(CSNq, 1);                  // Set CSN high again
  return(status);                  // return nRF24L01 status unsigned char
}

Scusatemi per la lunghezza del programma e per la richiesta da me fatta, ma a mio malgrado sconosco la struttura del programma in quanto poco simile agli svariati esempi riguardo i moduli NRF24L01.
Uso qi seguenti sketch perchè non ho riscontrato problemi nel caricarli su degli attiny85.

On the Tx side

struct dataStruct
{
  int adcc;
  char aChar;
} nrf_data;

You will, of course, need code to give the aChar variable a value

Then on the Rx side declare the struct in the same way and the aChar variable will be populated with the char data sent by the Tx. You will, of course, need code to read and interpret the value of the char

Ti segnalo che, nella sezione in lingua Inglese, si può scrivere SOLO in Inglese ... quindi, per favore, la prossima volta presta più attenzione in quale sezione metti i tuoi post; questa volta è stato spostato nella sezione di lingua Italiana ... la prossima volta potrebbe venire direttamente eliminato ::slight_smile:

Guglielmo