attacheInterrupt gebruiken in een Class

algemene C code
Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

attacheInterrupt gebruiken in een Class

Berichtdoor astrofrostbyte » 12 Jun 2013, 10:54

Zit ff te oefenen met classes :

Probleem waar ik tegen loop is het gebruik van een interrupt routine in een Class, zie onderstaande voorbeeld :
Code: Alles selecteren
class PulsSensor
  { public:
      PulsSensor(int );
      unsigned long get();
      void set(unsigned long);
    private:
      void pulse();
      unsigned long _ml;
  };
 
  PulsSensor::PulsSensor(int pin)
  { attachInterrupt( pin, pulse, RISING);                            // <--------   hier zit m'n probleem
  }
  void PulsSensor::pulse()    // interrupt handler
  { if ( _ml ) _ml--;         // countdown to zero
  }
  unsigned long PulsSensor::get()
  { return _ml;
  }
  void PulsSensor::set(unsigned long in)
  { _ml = in;
  }
 
void setup() { }
void loop() { }



Een truuk die ik nu gebruik is om het buiten de class te doen
Code: Alles selecteren

PulseSensor PulseIn(2);
PulseSensor PulseOut(3);
// map interrupt service routines
void isr_pulsein(){  PulseIn.pulse(); }
void isr_pulseout(){  PulseOut.pulse(); }

void setup()
{    attachInterrupt(0,isr_pulsein,RISING);
     attachInterrupt(1,isr_pulseout,RISING);
}




:evil: nog steeds geen syntax highlighting....
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Advertisement

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: attacheInterrupt gebruiken in een Class

Berichtdoor nicoverduin » 12 Jun 2013, 20:06

wat zegt de compiler?

probleem is al eerder voorgekomen : http://forum.arduino.cc/index.php/topic,41713.0.html
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 229
Geregistreerd: 20 Jan 2013, 12:01

Re: attacheInterrupt gebruiken in een Class

Berichtdoor astrofrostbyte » 15 Jun 2013, 14:02

thanks Nico,

De compiler error :
sketch_jun15a.ino: In constructor 'PulsSensor::PulsSensor(int)':
sketch_jun15a:12: error: argument of type 'void (PulsSensor::)()' does not match 'void (*)()'

regel 12 is de regel : attachInterrupt( pin, pulse, RISING);

De link die je geeft is al vrij oud en ik hoopte eigenlijk dat er mischien al een andere 'oplossing' was gevonden.

Ik denk dat ik de interrupt gewoon buiten de class laat , het is op deze manier duidelijk voor iedereen , ipv. van een complexe 'truuk' die bijna niemand kan lezen.
Gear: Arduino- Uno,Due,Ethernet,Mega2560 , OLS LogicAnalyser, TDS1002, Rigol DG1022, J-Link EDU, BusPirate

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: attacheInterrupt gebruiken in een Class

Berichtdoor nicoverduin » 15 Jun 2013, 23:01

Ik snap dat het zo zonder meer niet kan. En dat zit hem in de implicite referentie naar this (oftewel dit object). En een ISR mag een parameter hebben dacht ik.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Terug naar C code

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 11 gasten