Close

Jak předat metodu IRQ handleru do attachInterrupt?

Úvodní stránka Fórum Software Jazyky Jazyk C++ Jak předat metodu IRQ handleru do attachInterrupt?

Označeno štítky: 

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

    Ahoj
    Přepisuju můj kód pro čtení teplotního senzoru Sencor T25 přes 433MHz přijímač na na class/OOP a pak bych z toho rád udělal knikovnu. Ale narazil jsem na chybu kompilace při předání názvu metody pro obsluhu IRQ do Arduino/Wiring metody attachInterrupt.

    Tady je chyba kompilace:
    Arduino: 1.7.10 (Windows 7), Vývojová deska: „Arduino Uno“

    _433_testRXB6_irq_0.3.0.ino: In member function ‚void mmT25::enable(byte)‘:

    _433_testRXB6_irq_0.3.0.ino:84:83: error: cannot convert ‚mmT25::_irqHandler‘ from type ‚void (mmT25::)()‘ to type ‚void (*)()‘

    A tady je celý kód:
    https://github.com/miklik72/mmT25/blob/master/_433_testRXB6_irq_0.3.0.ino

    Kovaný moc v C++ OOP nejsem, takže se učím podle kódu ostatních.

    Možná špatně předávam ten handler, nebo nějak dědičnost.
    Poradíte někdo?

    díky

    miklik

    #7486
    Zbyšek Voda
    Správce

    Dobrý den, tento problém je trochu zapeklitý.

    Hlavní příčinou problému je to, že funkce, kterou připojujete pomocí attachInterrupt() nesmí mít žádný parametr. Vaše funkce void mmT25::_irqHandler(); sice viditelně žádný parametr nemá, ale jelikož je metodou objektu, je jí automaticky předávám parametr, který je instancí objektu, ke kterému náleží.

    Odtud pochází také error, který při kompilaci váš kód hlásí:
    cannot convert ‚mmT25::_irqHandler‘ from type ‚void (mmT25::)()‘ to type ‚void (*)()‘
    neboli nemůžu překonvertovat funkci, která má jeden parametr – instanci objektu mmT25 – na funkci, která nemá žádný parametr.

    Přiznám se, že neznám řešení vašeho problému, ale na tomto fóru: https://forum.arduino.cc/index.php?topic=41713.0 problém řeší a zjevně i úspěšně 🙂

    #7590
    miklik
    Účastník

    Tak jsem opsal řešení od Petra Stehlíka https://github.com/joysfera/arduino-water-temp-receiver a nadefinoval vše v class jako static.
    Tady je první funkční výsledek – https://github.com/miklik72/SensorT25.

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