2017-10-13 7 views
0

Arduino 와이어 라이브러리에서 주어진 예제를 가져 와서 쓰고있는 프로그램에 적용하려고합니다.Arduino의 Wire.onReceive() 함수

이것은 내 코드입니다. Comm.NDP[] 문은이 파일에 저장되지 않은 다른 클래스 인스턴스이므로 무시할 수 있다고 생각합니다.

** 
* I2C.cpp handles sending of event messages 
* between the LORA and MEGA via I2C protocol. 
*/ 

#include "I2C.h" 
#include "DATA.h" 
#include "Globals.h" 
#include <Wire.h> 
#include <Arduino.h> 

/** 
* Constructor used to reference all other variables & functions. 
*/ 
I2C::I2C() { 
} 

/** 
* Assigns the proper address to the current micro controller. 
*/ 
void I2C::initialize() { 
    //Sets the address for the current micro controller. 
    // Mega - 0 
    // LoRa - 1 
    Wire.begin(0); 
    Wire.setClock(8000000); 
    //Registers recieveEvent as a interrupt. 
    Wire.onReceive(receiveEvent); // register event 
} 

/** 
* Receives byte over I2C Connection. 
*/ 
static void receiveEvent(int howmany) { 
    //Iterator used below. 
    int i = 0; 
    for(i=0;i<120;i++) { 
    Comm.NDP[i] = ' '; 
    } 
    //Resets iterator. 
    i = 0; 
    //Checks to see if serial port is empty. 
    while (1 < Wire.available()) { 
    //Reads in single character from serial port. 
    char character = Wire.read(); 
    NDP[i] = character; 
    i++; 
    } 
    Serial.println(Comm.NDP); 
} 

아두 이노의 Wire.h 라이브러리

#include <Wire.h> 

void setup() { 
    Wire.begin(8); // join i2c bus with address #8 
    Wire.onReceive(receiveEvent); // register event 
    Serial.begin(9600); // start serial for output 
} 

void loop() { 
    delay(100); 
} 

// function that executes whenever data is received from master 
// this function is registered as an event, see setup() 
void receiveEvent(int howMany) { 
    while (1 < Wire.available()) { // loop through all but the last 
    char c = Wire.read(); // receive byte as a character 
    Serial.print(c); // print the character 
    } 
    int x = Wire.read(); // receive byte as an integer 
    Serial.println(x); // print the integer 
} 

나는 아두 이노 IDE에서이 오류를 얻고에서 예제 코드. 비 정적 멤버 함수

답변

0

먼저 사용하기 전에 receiveEvent의 선언을 놓치고의

error: invalid use of non-static member function

Wire.onReceive(receiveEvent); // register event 

         ^

종료 상태 1 잘못된 사용. begin 전에 정의를 이동하거나 거기에 추가하십시오 :

void receiveEvent(int howMany);