Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 在图书馆中附加中断_Arduino - Fatal编程技术网

Arduino 在图书馆中附加中断

Arduino 在图书馆中附加中断,arduino,Arduino,我在创建的库中添加attachInterrupt时遇到问题。我做了很多研究,发现这是一个常见的错误,但我不太理解我找到的答案 所讨论的错误是: sketch_nov04a.ino: In function 'void setup()': sketch_nov04a:10: error: argument of type 'void (Teste::)()' does not match 'void (*)()' 我的图书馆如下: 睾丸 我的实现 这个问题的解决方案可以在这里找到->这里有两个问

我在创建的库中添加attachInterrupt时遇到问题。我做了很多研究,发现这是一个常见的错误,但我不太理解我找到的答案

所讨论的错误是:

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