2014-11-04 18 views
0

我在添加attachInterrupt在我創建的庫中時遇到問題。我研究了很多,我注意到這是一個常見的錯誤,但不太明白我找到的答案。庫中的AttachInterrupt

有問題的錯誤是這樣的:

sketch_nov04a.ino: In function 'void setup()': 
sketch_nov04a:10: error: argument of type 'void (Teste::)()' does not match 'void (*)()' 

我的圖書館如下:

Teste.h

#ifndef TESTE_H 
#define TESTE_H 
#include <Arduino.h> 

class Teste 
{ 
public: 
    volatile long lastWindIRQ; 
    volatile byte windClicks; 

    void wspeedIRQ(); 
}; 
#endif 

Teste.cpp

#include "Teste.h" 

void Teste::wspeedIRQ() 
{ 
    if (millis() - this.lastWindIRQ > 10) 
    { 
    this.lastWindIRQ = millis(); 
    this.windClicks++; 
    } 
} 

我實現

#include <Teste.h> 

Teste teste; 

void setup() 
{ 
    Serial.begin(9600); 
    pinMode(2, INPUT); 
    digitalWrite(2, HIGH); 
    attachInterrupt(0, teste.wspeedIRQ, FALLING); 
} 

void loop() 
{ 
    Serial.println(teste.windClicks); 
    delay(3000); 
} 

解決這一問題可以在這裏找到 - >https://arduino.stackexchange.com/a/4865/3837

+0

需要國家你找到問題的答案,你不明白。 – 2014-11-04 01:45:42

+0

你有多少經驗寫圖書館?看起來你沒有構造函數,也沒有調用該對象。錯誤是因爲您的代碼中不存在「windClicks」。通常你會有一個全局變量,你可以通過將指針傳入你的庫來進行操作。然後從中斷調用庫中的方法。 – djUniversal 2014-11-04 17:30:37

+0

@djUniversal它看起來不像OP打算使用一個對象。該方法被聲明爲「靜態」。 (如果OP不在定義中使用'static',編譯器可能會抱怨。)否則,庫看起來很好。 – UncleO 2014-11-04 23:55:20

回答

0

這裏有兩個問題:一個ISR不能帶任何參數;並且您正在使用尚未聲明的變量。

沒有保證,這將工作,但你可以嘗試

#include <Teste.h> 

volatile long lastWindIRQ; 
volatile byte windClicks = 0; 

void myISR() 
{ 
    Teste::wspeedIRQ(&lastWindIRQ, &windClicks); 
} 

void setup() 
{ 
    Serial.begin(9600); 
    pinMode(2, INPUT); 
    digitalWrite(2, HIGH); 
    attachInterrupt(0, myISR, FALLING); 
} 

void loop() 
{ 
    Serial.println(windClicks); 
    delay(3000); 
} 
+0

這仍然可能不會工作。他的圖書館需要重新編寫。 – djUniversal 2014-11-04 22:53:05