J'utilise l'IDE Arduino et la bibliothèque réseau arduino pour créer un mot LoRa.Fonction de rappel C++ vers la classe
J'ai créé une classe qui devrait gérer toutes les fonctions liées à LoRa. Dans cette classe, je dois gérer un rappel si je reçois un message de liaison descendante. La bibliothèque ttn possède la fonction onMessage que je veux configurer dans ma fonction init et analyser une autre fonction, qui est un membre de la classe, appelée message. Je reçois l'erreur "utilisation invalide de la fonction membre non statique".
// File: LoRa.cpp
#include "Arduino.h"
#include "LoRa.h"
#include <TheThingsNetwork.h>
TheThingsNetwork ttn(loraSerial,debugSerial,freqPlan);
LoRa::LoRa(){
}
void LoRa::init(){
// Set the callback
ttn.onMessage(this->message);
}
// Other functions
void LoRa::message(const uint8_t *payload, size_t size, port_t port)
{
// Stuff to do when reciving a downlink
}
et le fichier d'en-tête
// File: LoRa.h
#ifndef LoRa_h
#define LoRa_h
#include "Arduino.h"
#include <TheThingsNetwork.h>
// Define serial interface for communication with LoRa module
#define loraSerial Serial1
#define debugSerial Serial
// define the frequency plan - EU or US. (TTN_FP_EU868 or TTN_FP_US915)
#define freqPlan TTN_FP_EU868
class LoRa{
// const vars
public:
LoRa();
void init();
// other functions
void message(const uint8_t *payload, size_t size, port_t port);
private:
// Private functions
};
#endif
J'ai essayé:
ttn.onMessage(this->message);
ttn.onMessage(LoRa::message);
ttn.onMessage(message);
Cependant, aucun d'entre eux travaillaient comme je l'avais prévu.
Une fonction membre non statique nécessite un * objet * à appeler. Si vous n'avez pas d'objet, vous ne pouvez pas utiliser de fonctions membres non statiques. Une fois que vous avez un objet, je vous suggère de regarder dans ['std :: function'] (http://en.cppreference.com/w/cpp/utility/functional/function) et [' std :: bind'] (http://en.cppreference.com/w/cpp/utility/functional/bind). –