我在创建的库中添加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);
}
可以在此处找到此问题的解决方案 - &gt; https://arduino.stackexchange.com/a/4865/3837
答案 0 :(得分: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);
}