Arduino上的Wire.onReceive()函数

Arduino上的Wire.onReceive()函数

问题描述:

我正在尝试Arduino Wire库给出的这个例子中的内容,并将其应用到我正在编写的程序中。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 
} 

我正在从Arduino的IDE此错误的示例代码。

error: invalid use of non-static member function

Wire.onReceive(receiveEvent); // register event 

         ^

退出状态1 无效使用非静态成员函数

你错过的receiveEvent声明第一次使用前的。要么移动它的定义之前begin或添加在那里:

void receiveEvent(int howMany);