Arduino 在图书馆中附加中断
我在创建的库中添加attachInterrupt时遇到问题。我做了很多研究,发现这是一个常见的错误,但我不太理解我找到的答案 所讨论的错误是:Arduino 在图书馆中附加中断,arduino,Arduino,我在创建的库中添加attachInterrupt时遇到问题。我做了很多研究,发现这是一个常见的错误,但我不太理解我找到的答案 所讨论的错误是: sketch_nov04a.ino: In function 'void setup()': sketch_nov04a:10: error: argument of type 'void (Teste::)()' does not match 'void (*)()' 我的图书馆如下: 睾丸 我的实现 这个问题的解决方案可以在这里找到->这里有两个问
sketch_nov04a.ino: In function 'void setup()':
sketch_nov04a:10: error: argument of type 'void (Teste::)()' does not match 'void (*)()'
我的图书馆如下:
睾丸
我的实现
这个问题的解决方案可以在这里找到->这里有两个问题: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);
}
需要说明你找到的答案和你不理解的地方。你有多少编写库的经验?看起来您没有构造函数,也没有调用对象。错误是因为windClicks在代码中的任何位置都不存在。通常,您会有一个全局变量,可以通过将指针传递到库中来操作该变量。然后从中断调用库中的一个方法。看起来OP并不打算使用对象。该方法被声明为静态的。如果OP在定义中不使用static,编译器可能会抱怨。否则,库看起来很好。只是尝试检查他的意图,我不知道他在哪里/如何尝试提取该变量,这正是编译器感到不安的地方。他还需要在attachinterrupt之外声明该方法。我想知道他需要多少帮助来摆弄它。这可能仍然行不通。他的图书馆需要重写。
#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);
}
#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);
}