Go Down

Topic: Problemi NRF24L01 (Read 87 times) previous topic - next topic

Angelo13

Jun 23, 2019, 05:06 pm Last Edit: Jun 23, 2019, 05:13 pm by Angelo13
Salve :D

In passato avevo avuto un problema con la libreria RF24 che son riuscito a risolvere (grazie)... Adesso ho altri problemi. Sto creando una libreria (personale) per l'antenna NRF24L01 e sto avendo dei problemi. Questo è il codice della libreria

Code: [Select]

/*Questo è il file UtNRF24L01.h

#ifndef UtNRF24L01_h
#define UtNRF24L01_h

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

class UtNRF24L01
{
    private:
    RF24 * radio;
    bool _listener;
       
    public:
    UtNRF24L01(const bool listener, const int pinCE, const int pinCSN, const byte address[], const char PALevel);
    void UtNRF24L01::read(int* data);
    void UtNRF24L01::write(int* data);
};

#endif



Code: [Select]

/*Questo è il file UtNRF24L01.cpp

#include <Arduino.h>
#include "UtNRF24L01.h"
#include <SPI.h>
#include "RF24.h"
 
UtNRF24L01::UtNRF24L01(const bool listener, const int pinCE, const int pinCSN, const byte address[], const char PALevel)
{
    _listener = listener;
    radio = new RF24(pinCE, pinCSN);
 
    radio->begin();
 
    //Set antenna's power
    switch(PALevel)
    {
        case 'm':
            radio->setPALevel(RF24_PA_MIN);
            break;
        case 'l':
            radio->setPALevel(RF24_PA_LOW);
            break;
        case 'H':
            radio->setPALevel(RF24_PA_HIGH);
            break;
        case 'M':
            radio->setPALevel(RF24_PA_MAX);
            break;
    }
    //The radio will listen or write
    if (_listener)
    {
        radio->openReadingPipe(0, address);
        radio->startListening();
    }
    else
    {
        radio->openWritingPipe(address);
        radio->stopListening();
    }
};
 
void UtNRF24L01::read(int* data)
{
    if (_listener && radio->available())
    {
        radio->read(&data, sizeof(data));
    }
}
 
void UtNRF24L01::write(int* data)
{
    if (!_listener)
    {
        radio->write(&data, sizeof(data));
    }
}


Il codice arduino è questo:

Code: [Select]

#include <UtNRF24L01.h>

//Radio Car pins
const bool listener = true;
const int pinCE = 8;
const int pinCSN = 9;
const byte address[6] = "00001";
const char PALevel = 'm';

UtNRF24L01 radioCar = UtNRF24L01(listener, pinCE, pinCSN, address, PALevel);

void setup() {
  Serial.begin(115200);
  Serial.print("Questa riga come tutti le altre righe dopo non viene mai eseguita");
}

void loop() {
  Serial.print("Anche questo mai eseguito")
  delay(100);
}


In pratica arduino "Crasha" e non succede mai niente.. nessun serial print.
Il problema c'è (ho testato) quando nel file UtNRF24L01.cpp faccio qualsiasi cosa con la variabile radio.. (tranne per la dichiarazione... se lascio solo quella funziona). In pratica c'è quando faccio radio.begin, radio.setPaLevel...
So che molto probabilmente non sono stato chiaro, fate domande in caso..

Please aiutatemi :(

gpb01

#1
Jun 23, 2019, 05:27 pm Last Edit: Jun 23, 2019, 05:28 pm by gpb01
In pratica arduino "Crasha" e non succede mai niente.. nessun serial print.
Su Arduino, se si esclude proprio l'errore di logica del programma, due cose possono facimente accadere ...

1. per un eccesso di assorbimento sul''alimentazione essa cala sotto il livello minimo impostato per il BOD e quindi Arduno fa "reset" e riparte da capo.

2. per un errore di programma si sovrascrive qualche area di SRAM e quindi il programma poi fa quello che capita.

Cerca quindi intato di capire in quale dei due casi sei e poi inserisci una serie di Serial.print() nel programma per capire in quali punti passa.

Guglielmo
Search is Your friend ... or I am Your enemy !

Angelo13

#2
Jun 23, 2019, 06:02 pm Last Edit: Jun 23, 2019, 06:09 pm by Angelo13
Mi scuso già da adesso perchè non ho provato a vedere quello che mi hai scritto e nonostante questo rispondo.. ma mi sembra strano. E' possibile che arduino muoia se chiamo semplicemente una funzione (arduino si blocca quando chiamo una qualsiasi funzione nella libreria UtNRF24L01 della radio...)? Comunque adesso provo a vedere, ti ringrazio :D

Angelo13

Ah comunque mi son dimenticato di dire nel post principale che l'antenna funziona perfettamente con un esempio della libreria... E comunque fa cose più "complicate" di quello che faccio io (che si blocca semplicemente con una funzione)

Angelo13

Comunque son riuscito a risolvere mettendo la dichiarazione della radio nel setup, e dichiarandola come puntatore... grazie comunque :D

Go Up