Attiny85+NRF24L01

Ciao a tutti, sto provando a trasmettere un messaggio da un attin85 ad una Arduino UNO tramite nrf24l01 e lib Mirf. più avanti proverò un Attin84 perchè vorrei inviare il messaggio all'attivazione di un pulsante. Sto invece provando a modificare la ricezione. Adesso, quando alimento la UNO(quindi ricevitore), l'nrf si mette in ricezione e ogni volta che l'attiny invia la UNO riceve. ho provato a modificare lo sketch mettendo un "if (Mirf.getData(rxData)) { fa qualcosa} " ma mi dice che non è possibile convertire Mirf.Nrf24l::getData(((byte*)(& rxData))) to bool.
questo è il codice per la ricevente che mi da l'errore, senza l' "if" va tutto benissimo.

#include <SPI.h>
#include <Mirf_nRF24L01.h>
#include <Mirf.h>
#include <MirfHardwareSpiDriver.h>
//#include <SPI85.h>

#define MIRF_PAYLOAD 32
byte rxData[MIRF_PAYLOAD + 1];



void setup() {
  memset(rxData,0,sizeof(rxData));
  Serial.begin(9600);
  
  Serial.println("Stato : ricezione");
  Mirf.cePin=9;
  Mirf.csnPin=10;
  
  Mirf.spi=&MirfHardwareSpi;
  Mirf.init();
  Mirf.payload=MIRF_PAYLOAD;
  Mirf.channel=10;
  Mirf.config();
}
  void loop() {
    Mirf.setRADDR((byte*)"serv1");
    memset(rxData,0,sizeof(rxData));
    
     if (Mirf.getData(rxData)){
    Serial.println((const char*)rxData);
    }
 
    delay(1000);
    
  }

Forse devo prima fargli ricevere il messaggio e poi dirgli cosa fare?
probabilmente mi sto perdendo in un bicchier d'acqua ma non ne vengo fuori... :drooling_face:
grazie

Prima di tutto chiediti ...
... cosa ritorna il metodo che chiami "Mirf.getData(rxData)" ???

Dopo di che aggiusterai l' IF in funzione del tipo di dato che ti ritorna ...
... o, se non ne ritorna (ad esempio se fosse void) ... cambiare l'IF verificando un'altro metodo (... dataReady() ???) ... :wink:

Guglielmo

Ciao, intanto grazie per la risposta. Non te la prendere ma sono più ferrato nella parte hardware!! nella programmazione ho ancora parecchie lacune che sto cercando di colmare!! :roll_eyes:(lavoro permettendo..) .
quindi, Mirf.getData(rxData); mi ritorna cio che l'nrf ha ricevuto,giusto? quindi dopo aver ricevto posso dare un if? oppure devo convertire il bool ?

Mmm ... posso darti un consiglio ... prendi un bel testo di C e passa un po' di tempo a studiare il linguaggio :wink:

Comincia da QUI ... poi prenditi un buon libro di C e prosegui con lo studio ...

Se leggo la giusta libreria, il metodo che stai chiamando è :

void getData(uint8_t * data);

che, come vedi, NON ritorna nulla (void), ma legge dei dati e li va a depositare a partire dall'indirizzo che gli hai dato (quindi gli devi passare un pointer ad un buffer).

Quella che ti dice SE ci sono dati da leggere è un'altra :

bool dataReady();

.... che effettivamente ritorna un boolean (true/false).

Però ripeto ... non è una libreria facile facile e ... uno studio del C/C++ prima dell'uso sarebbe altamente consigliabile ... :roll_eyes:

Guglielmo

ok grazie, ci lavorerò sopra.

Ottimo, funziona!! studierò lo stesso (come già sto cercando di fare!!) ma il to sggerimento mi ha messo sulla strada giusta! grazie!!

 void loop() {
    Mirf.setRADDR((byte*)"serv1");
    memset(rxData,0,sizeof(rxData));
    if (Mirf.dataReady()){
    contatore++;
     Mirf.getData(rxData);
    Serial.println((const char*)rxData);
    Serial.print("contatore = ");
    Serial.println(contatore);
    }
    else {
      Serial.println("non pronto a ricevere");
    }
 
    delay(1000);
    
  }

come inizio per la compresione va bene. ottimo, ancora grazie!! :smiley:

magnetron:
... studierò lo stesso (come già sto cercando di fare!!) ma il to sggerimento mi ha messo sulla strada giusta! grazie!! ...

Figurati, sono contento che vada, ma mi raccomando, dedica del tempo anche al C/C++ ... che è importante per andare avanti :wink:

Guglielmo

P.S. : Dai un occhiata QUI (... puoi scaricarlo tranquillamente, il sito NON è pirata e lo prevede gratuito per solo uso PERSONALE)

Grande!!grazie, questo è molto interessante!