У меня возникли проблемы с добавлением 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
Необходимость изложить ответы, которые вы нашли, и то, что вы не понимаете. –
Сколько у вас опыта написания библиотек? похоже, что у вас нет конструктора и вы не вызываете объект. Ошибка заключается в том, что «windClicks» в вашем коде не существует. Обычно у вас будет глобальная переменная, с которой вы могли бы манипулировать, передав указатель в вашу библиотеку. Затем вызовите метод внутри библиотеки из прерывания. – djUniversal
@djUniversal Это не похоже, что OP намеревается использовать объект. Метод объявляется 'static'. (Возможно, компилятор будет жаловаться, если OP также не использует 'static' в определении.) В противном случае библиотека выглядит отлично. – UncleO