Tengo un pequeño error con mi último código de proyecto Arduino que usa el TimerOne library para mostrar números en una pantalla de 4 dígitos y 7 segmentos. Utilizo una interrupción para hacer que el microprocesador pase constantemente entre cada dígito, ya que están esencialmente conectados entre sí.No hay error de función coincidente al usar attachInterrupt
Tengo el código funcionando perfectamente si lo guardo todo en el archivo PDE principal, pero pensé que sería mejor aislar la pantalla en su propia clase.
Mi compilador está teniendo problemas con la segunda línea del código siguiente en el PDE:
Timer1.initialize(500);
Timer1.attachInterrupt(digitDisplay.flashDigit,500);
El segundo arg en attachInterrupt debería ser opcional, me han tratado con y sin esto! De todos modos me sale el siguiente error:
DigitDisplayTest.cpp: In function 'void setup()':
DigitDisplayTest:29: error: no matching function for call to 'TimerOne::attachInterrupt(<unresolved overloaded function type>)'
C:\Program Files (x86)\arduino-0022\arduino-0022\libraries\Timer1/TimerOne.h:62: note: candidates are: void TimerOne::attachInterrupt(void (*)(), long int)
Dentro DigitDisplay (de los cuales digitDisplay es un ejemplo), defino flashDigit de la siguiente manera:
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;
}
Si requiere más código por favor hágamelo saber, pero estoy estoy bastante seguro de que no hay nada de malo con las gubbings del método flashDigit() - ciertamente funcionó antes de ponerlo dentro de su propia clase.
Obviamente pueden evitar este error mediante la adición de
void Interrupt()
{
digitDisplay.flashDigit();
}
a la PDE principal y adjuntar esa función, pero eso es sólo un trabajo alrededor, sería bueno si pudiera llamar directamente.
veo el error es que ver con hacer un puntero de función (de los cuales uno no existe, por tanto, el error), pero los punteros no son mi punto fuerte, así que realmente podría hacer con una mano la clasificación esto.
Su segundo ejemplo utiliza 'digitDisplay.flashDigit()' que es diferente a 'digitDisplay .flashDigit'. ¿Has intentado esto todavía? – gary
Sí lo hice, no resuelve el problema, pero gracias de todos modos;) – SmallJoeMan