Ошибка функции сопоставления при использовании attachInterrupt

У меня небольшая ошибка с моим последним кодом проекта Arduino, который использует библиотеку TimerOne для отображения чисел на 4-значном 7-сегментном дисплее. Я использую прерывание, чтобы микропроцессор постоянно переключался между каждой цифрой, поскольку они, по сути, связаны друг с другом.

У меня есть код, работающий отлично, если я сохраню все это в основном файле PDE, но я подумал, что было бы лучше изолировать отображение в отдельном классе.

У моего компилятора проблемы со второй строкой следующего кода в PDE:

Timer1.initialize(500);
Timer1.attachInterrupt(digitDisplay.flashDigit,500); 

Второй аргумент в attachInterrupt должен быть необязательным, Я пробовал с этим и без него! Как бы то ни было, я получаю следующую ошибку:

DigitDisplayTest.cpp: In function 'void setup()':
DigitDisplayTest:29: error: no matching function for call to     'TimerOne::attachInterrupt()'
C:\Program Files (x86)\arduino-0022\arduino-0022\libraries\Timer1/TimerOne.h:62: note: candidates are: void TimerOne::attachInterrupt(void (*)(), long int)

В DigitDisplay (экземпляром которой является digitDisplay) я определяю flashDigit следующим образом:

class DigitDisplay
{
  private:
    /*...*/
  public:
    /*...*/
    void flashDigit();
}

void DigitDisplay::flashDigit()
{ 
  wipeDisplay();
  for (int i = 0; i < _digitCount ; i++)
  {
    if ( i == _digit ) digitalWrite( _digitPins[i], HIGH );
    else digitalWrite( _digitPins[i], LOW );
  }
  displayNumber(_digits[_digit]);
  _digit++ ;
  _digit %= _digitCount; 
}

Если вам требуется больше кода, дайте мне знать, но я почти уверен, что нет ничего плохого в gubbings метода flashDigit () - он определенно работал до того, как я поместил его в отдельный класс.

Очевидно, я могу обойти эту ошибку, добавив

void Interrupt()
{
   digitDisplay.flashDigit();
}

к основному PDE и прикрепив эту функцию, но это всего лишь работа, было бы неплохо, если бы я мог вызвать ее напрямую.

Я вижу, что ошибка связана с созданием указателя на функцию (которого не существует, отсюда и ошибка), но указатели не являются моей сильной стороной, поэтому я мог бы справиться с ручной сортировкой.

5
задан gary 27 January 2012 в 02:52
поделиться