AttachInterrupt在库中

时间:2014-11-04 01:40:36

标签: arduino

我在创建的库中添加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

1 个答案:

答案 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);
}