неразрешенный перегруженный тип функции для Wire.onReceive

Я пытаюсь сделать из моего Arduino раб-I2C, и я не могу пройти через функцию Wire.onReceive. Вот мой код. В документации говорится просто добавить функцию, которая имеет стиль void myHandler (int bytes), но я не могу понять, почему моя функция readPI не отвечает этим требованиям.

     #include "piCom.h"
    #include "WireAddresses.h"
    #include <Wire.h>

    pi::pi(){
       Wire.begin(NB_INFO); // is 0x04
       Wire.onReceive( readPI );
       //Wire.onRequest(sendPI);
    }

    void pi::readPI(int byteCount){
       while( Wire.available() ){

             ref_IMU = Wire.read();

       }//end while

    }//end readPI

    void pi::sendPI(){

       Wire.write(1);
       //use to send pressure info to pi

    }//end sendPI


    //double pi::getref_IMU(){return ref_IMU;}

, то вот ошибка

 piCom.cpp: In constructor 'pi::pi()':
piCom.cpp:7: error: no matching function for call to'TwoWire::onReceive(<unresolved overloaded function type>)'
 Wire.onReceive( readPI );
                        ^

no matching function for call to 'TwoWire::onReceive(<unresolved overloaded function type>)'

Любая помощь очень ценится.

2 голоса | спросил Ximidar 8 AM000000110000002931 2015, 11:08:29

1 ответ


2
    void pi::sendPI(){

Это функция класса (метод), которая имеет неявный этот указатель. Вы не можете использовать его как статический ISR.

В общем случае классы не могут реализовать ISR по этой причине. Есть несколько обходных решений, один из которых заключается в том, чтобы сделать его статическим функцией класса. Однако тогда это повлияет на весь класс, а не только на один экземпляр.

ответил Nick Gammon 8 PM000000120000001231 2015, 12:00:12

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132