0

Arduino IDE と Things Network arduino ライブラリを使用して LoRa モートを作成しています。

LoRa 関連のすべての機能を処理するクラスを作成しました。このクラスでは、ダウンリンク メッセージを受信した場合にコールバックを処理する必要があります。ttn ライブラリには onMessage 関数があり、これを init 関数に設定し、メッセージと呼ばれるクラス メンバーである別の関数を解析します。「非静的メンバー関数の無効な使用」というエラーが表示されます。

// 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
}

およびヘッダーファイル

// 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

私が試してみました:

ttn.onMessage(this->message);
ttn.onMessage(LoRa::message);
ttn.onMessage(message);

しかし、どれも私が期待したようには機能しませんでした。

4

3 に答える 3

0

メッセージ関数をクラス外の通常の関数にすることで問題を解決しました。それが良い習慣かどうかはわかりませんが、うまくいきます。

// File: LoRa.cpp
#include "Arduino.h"
#include "LoRa.h"
#include <TheThingsNetwork.h>

TheThingsNetwork ttn(loraSerial,debugSerial,freqPlan);

void message(const uint8_t *payload, size_t size, port_t port)
{
  // Stuff to do when reciving a downlink
}

LoRa::LoRa(){ 
}

void LoRa::init(){
  // Set the callback
  ttn.onMessage(message);
}
于 2017-06-06T09:04:39.537 に答える