Leírás
Digitális kivezetések megszakításokkal
Az attachInterrupt()
első paramétere egy megszakítási szám. Általában a digitalPinToInterrupt(pin)
-t kell használnia a tényleges digitális kivezetésnek az adott megszakítási számra való lefordításához. Például, ha a 3-as kivezetéshez csatlakozik, használja a digitalPinToInterrupt(3)
paramétert az attachInterrupt()
első paramétereként.
Kártya | Megszakításokhoz használható digitális kivezetések |
---|---|
Uno, Nano, Mini, egyéb 328 alapú |
2, 3 |
Uno WiFi Rev.2, Nano Every |
minden digitális kivezetés |
Mega, Mega2560, MegaADK |
2, 3, 18, 19, 20, 21 (20 & 21 kivezetés nem használhatók megszakításokhoz, mivel I2C kommunikációra használják őket) |
Micro, Leonardo, egyéb 32u4-alapú |
0, 1, 2, 3, 7 |
Zero |
minden digitális kivezetés, kivéve a 4-es |
MKR család kártyái |
0, 1, 4, 5, 6, 7, 8, 9, A1, A2 |
Nano 33 IoT |
2, 3, 9, 10, 11, 13, A1, A5, A7 |
Nano 33 BLE, Nano 33 BLE Sense |
minden kivezetés |
Due |
minden digitális kivezetés |
101 |
minden digitális kivezetés (Csak a 2-es, 5-ös, 7-es, 8-as, 10-es, 11-es, 12-es, 13-as kivezetések működnek a CHANGE funkcióval) |
Megjegyzések és figyelmeztetések
Megjegyzés
A csatolt függvényen belül a delay()
nem fog működni, és a millis()
által visszaadott érték nem növekszik. A funkció közben kapott soros adatok elveszhetnek. Minden változót, amelyet a csatolt függvényen belül módosít, volatile
-nak kell deklarálnia. További információért tekintse meg az alábbi, ISR-ekről szóló részt.
Megszakítások használata
A megszakítások hasznosak arra, hogy a dolgok automatikusan megtörténjenek a mikrovezérlő programokban, és segíthetnek megoldani az időzítési problémákat. A megszakítás használatának jó feladatai közé tartozhat a forgó kódoló olvasása vagy a felhasználói bemenet figyelése.
Ha azt szeretné elérni, hogy egy program mindig elkapja a forgó kódoló impulzusait, hogy soha ne hagyjon ki egyetlen impulzust sem, akkor nagyon bonyolult lenne olyan programot írni, amely bármi másra is képes, mert a programnak folyamatosan le kell kérdeznie az érzékelő vonalait a kódolóhoz, hogy impulzusokat fogjon, amikor azok előfordulnak. Más érzékelők is hasonló interfész-dinamikával rendelkeznek, például megpróbálják beolvasni a hangérzékelőt, amely megpróbálja elkapni a kattanást, vagy egy infravörös résérzékelőt (fotó-megszakító), amely megpróbálja elkapni a lehulló érmét. Mindezen helyzetekben egy megszakítás felszabadíthatja a mikrokontrollert, hogy más munkát végezzen, miközben nem hiányzik a bemenet.
A megszakítási szolgáltatási rutinokról (ISR)
Az ISR-ek olyan speciális függvények, amelyeknek van néhány egyedi korlátja, amelyekkel a legtöbb más funkció nem rendelkezik. Az ISR-nek nem lehet paramétere, és nem adhat vissza semmit.
Általában az ISR-nek a lehető legrövidebbnek és leggyorsabbnak kell lennie. Ha a vázlat több ISR-t használ, akkor egyszerre csak egy futhat le, a többi megszakítás az aktuális befejezése után hajtódik végre, a prioritásuktól függően. A millis()
megszakításokra támaszkodik a számoláshoz, így soha nem fog növekedni az ISR-en belül. Mivel a delay()
működéséhez megszakítások szükségesek, nem fog működni, ha ISR-en belül hívják. A micros()
eleinte működik, de 1-2 ms után hibásan kezd viselkedni. A delayMicroseconds()
nem használ számlálót, így a szokásos módon fog működni.
Általában globális változókat használnak az adatok továbbítására az ISR és a fő program között. Annak biztosítása érdekében, hogy az ISR és a fő program között megosztott változók megfelelően frissüljenek, deklarálja azokat volatile
-nek.
volatile
A megszakításokkal kapcsolatos további információkért lásd Nick Gammon jegyzeteit.
Szintaxis
attachInterrupt(digitalPinToInterrupt(pin), ISR, mode)
(ajánlott)
attachInterrupt(interrupt, ISR, mode)
(nem ajánlott)
attachInterrupt(kivezetés, ISR, mode)
(Nem ajánlott. Ezenkívül ez a szintaxis csak az Arduino SAMD kártyákon, az Uno WiFi Rev2-n, a Due-n és a 101-en működik.)
Paraméterek
interrupt
: a megszakítás száma. Engedélyezett adattípusok: int
.
pin
: az Arduino kivezetés száma.
ISR
: a megszakításkor hívandó ISR; ez a függvény nem vehet fel paramétereket és nem ad vissza semmit. Ezt a funkciót néha megszakítási szolgáltatási rutinnak nevezik.
mode
: meghatározza, hogy mikor kell a megszakítást kiváltani. Négy állandó van előre definiálva érvényes értékként:
-
LOW a megszakítás kiváltása, amikor a kivezetés alacsony,
-
CHANGE a megszakítás kiváltása, amikor a kivezetés értéke megváltozik,
-
RISING kivált, amikor a kivezetés alacsonyról magasra változik,
-
FALLING kivált, amikor a kivezetés magasról alacsonyra vált.
A Due, Zero és MKR1000 kártyák lehetővé teszik még:
-
HIGH a megszakítás kiváltása, amikor a kivezetés magas.
Visszatérési érték
Nincs.