Close

Problém s attachInterrupt v triede

Úvodní stránka Fórum Software Jazyky Jazyk Wiring Problém s attachInterrupt v triede

  • Toto téma obsahuje celkem 3 odpovědi. Do diskuze (2 diskutující) se naposledy zapojil uživatel poprad a poslední změna proběhla před 8 roky.
Aktuálně jsou na stránce zobrazeny 4 příspěvky - 1. až 4. (celkem z 4)
  • Autor
    Příspěvky
  • #8559
    poprad
    Účastník

    Urobil som pokus, začlenit attachInterrupt do triedy class

    class Pokus{
      private:
        byte Stav;
        void Privatna();
        
      public:
        Pokus();
        void Verejna();
    };
    
    Pokus::Pokus() {
    }
    
    void Pokus::Verejna() {
      Privatna();      // toto funguje
      attachInterrupt(0,Privatna,CHANGE);  // toto nefunguje
    }
    
    void Privatna() {
    }
    
    void setup() {
      // put your setup code here, to run once:
    
    }
    
    void loop() {
      // put your main code here, to run repeatedly:
    
    }

    Proč mi nejde volat Privatna v príkazu attachInterrupt?

    #8560
    Zbyšek Voda
    Správce

    Dobrý den, problém je v tom, že attachInterrupt očekává jako druhý parametr referenci na funkci bez parametru. Metody objektů jsou ale implementovány tak, že jako první parametr mají „skrytě“ referenci na třídu, ke které patří. To vám vlastně říká i chybová hláška:
    cannot convert 'Pokus::Privatna' from type 'void (Pokus::)()' to type 'void (*)()'

    Problém řeší i s navrženými řešeními zde:

    #8561
    poprad
    Účastník

    Přiznám se, že jsem tomu neporozuměl. Ani ten příklad s class Foo nefunguje.

    #8562
    poprad
    Účastník

    Upravil jsem

      private:
        byte Stav;
        static void Privatna();
    .......
    
    void Pokus::Verejna() {
      attachInterrupt(0,Privatna,CHANGE);
    }
    

    a kompilace mi vyšla. Je toto řešením problému?

Aktuálně jsou na stránce zobrazeny 4 příspěvky - 1. až 4. (celkem z 4)
  • Pro reakci na toto téma se musíte přihlásit.