{"id":13780296,"url":"https://github.com/GreyGnome/EnableInterrupt","last_synced_at":"2025-05-11T13:31:54.271Z","repository":{"id":25169654,"uuid":"28592709","full_name":"GreyGnome/EnableInterrupt","owner":"GreyGnome","description":"New Arduino interrupt library, designed for Arduino Uno/Mega 2560/Leonardo/Due","archived":false,"fork":false,"pushed_at":"2023-06-14T01:57:28.000Z","size":3320,"stargazers_count":329,"open_issues_count":8,"forks_count":73,"subscribers_count":36,"default_branch":"master","last_synced_at":"2024-08-03T18:14:58.017Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/GreyGnome.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2014-12-29T13:12:46.000Z","updated_at":"2024-07-17T14:28:38.000Z","dependencies_parsed_at":"2022-08-06T03:16:23.849Z","dependency_job_id":"2ab97e97-21e0-4f4d-bc8e-2a50060f042a","html_url":"https://github.com/GreyGnome/EnableInterrupt","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GreyGnome%2FEnableInterrupt","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GreyGnome%2FEnableInterrupt/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GreyGnome%2FEnableInterrupt/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/GreyGnome%2FEnableInterrupt/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/GreyGnome","download_url":"https://codeload.github.com/GreyGnome/EnableInterrupt/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225056794,"owners_count":17414209,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-08-03T18:01:14.216Z","updated_at":"2024-11-17T15:31:04.483Z","avatar_url":"https://github.com/GreyGnome.png","language":"C++","readme":"# EnableInterrupt\nNew Arduino interrupt library, designed for all versions of the Arduino.\n\nFunctions:\n\nenableInterrupt- Enables interrupt on a selected Arduino pin.\ndisableInterrupt - Disables interrupt on the selected Arduino pin.\n\n\n*_What's New?_\n- Wed Sep  4 19:30:45 CDT 2019\n    - Version 1.1.0 of the library has been released. We add support for the ATmega2561 and 1281 chips,\nwith pinouts defined from the MCUdude/MegaCore project. Code donations by Kizmit99. Plus, a documentation\nbugfix from Greg Bowler. Thanks, folks!\n\nThe EnableInterrupt library is an Arduino interrupt library, designed for\n8-bit versions of the Arduino- at this writing, the Uno (and other ATmega328p-based\nboards, like the mini), Due, Zero, Leonardo (and other ATmega32u4-based boards, like the\nMicro), the Mega2560 (and other ATmega2560-based boards, like the MegaADK),\nand for non-Arduino chips: the 644/1284p (Mighty1284, Sodaq Mbili and EnviroDIY Mayfly)\nATtiny 44/84, and ATtiny 45/85 (using DA Mellis' support files).\nThe library enables you to assign an interrupt to pins on your chip\nthat support them, and presents a common interface to all supported chips. This\nmeans that on the Arduino Uno and Mega you don't give it an interrupt number, as per\nhttp://arduino.cc/en/Reference/attachInterrupt. Rather, your first argument is a\npin number of a pin that's supported on that chip (see\nhttps://github.com/GreyGnome/EnableInterrupt/wiki/Usage#pin--port-bestiary ).\n\n32-bit support for Due comes only in the form of a macro that enables your code\nto be shared unchanged between 32- and 8-bit Arduinos. No further support for\n32-bit Arduinos is planned.\n\n## Download\nSee the https://github.com/GreyGnome/EnableInterrupt/wiki/Download page to\ndownload the library.\n\n## More Information\nSee the Wiki at https://github.com/GreyGnome/EnableInterrupt/wiki/Home .\nFor detailed usage information see https://github.com/GreyGnome/EnableInterrupt/wiki/Usage .\n\nSee the examples subdirectory in the distribution or in this Git site for code examples.\n\nSee the extras subdirectory in the distribution or in this Git site for License and Release Notes.\n\nFor a tutorial on interrupts, see\nhttp://www.engblaze.com/we-interrupt-this-program-to-bring-you-a-tutorial-on-arduino-interrupts/\nThe posting gets into low-level details on interrupts.\n\nIMPORTANT NOTE: In 0.9.2 I discovered a rather pernicious bug, wherein the library was setting the global interrupt enable bit. This could cause a serious and difficult-to-debug race condition, as it is not the job of the library to manage that bit. The chips come with interrupts enabled so existing code should not be affected, but if you were relying on that behavior note that it has changed. My thanks to http://gammon.com.au/interrupts (the 'How are interrupts queued?' section).\n\n## ATmega Processor Interrupt Types\nNote that the ATmega processor at the heart of the Arduino Uno/Mega2560/Leonardo/ATmega1284\nhas two different kinds of interrupts: “external”, and “pin change”.\nFor the list of available interrupt pins and their interrupt types, see the\nPORT / PIN BESTIARY, below.\n\n### External Interrupts\nThere are a varying number of external interrupt pins on the different\nprocessors. The Uno supports only 2 and they are mapped to Arduino pins 2 and 3.\nThe 2560 supports 6 usable, the Leonardo supports 5, and the ATmega1284p supports 3.\nThese interrupts can be set to trigger on one of three signal values: RISING, \nFALLING, or CHANGE (for both), or on LOW level. The triggers are interpreted by \nhardware, so by the time your user function is running, you know exactly which \npin interrupted at the time of the event, and how it changed. On the other hand, \nas mentioned there are a limited number of these pins.\n\n### Pin Change Interrupts\nOn the Arduino Uno (and again, all 328p-based boards) and 644/1284-based boards,\nthe pin change interrupts can be enabled on any or all of the pins. The two\npins 2 and 3 on 328p-based boards, or three pins (2, 10, and 11) on the\n1284-based boards support *either* pin change or external interrupts. On 2560-based\nArduinos, there are 18 pin change interrupt pins in addition to the 6 external\ninterrupt pins. On the Leonardo there are 7 pin change interrupt pins in addition\nto the 5 external interrupt pins. See PIN BESTIARY below for the pin numbers and\nother details.\n\nPin Change interrupts trigger on all RISING and FALLING (ie, \"CHANGE\") signal edges.\nFurthermore, the processor's pins, and pin change interrupts, are grouped into\n“port”s, so for example on the Arduino Uno there are three ports and therefore\nonly 3 interrupt vectors (subroutines) available for the entire body of 20 pin\nchange interrupt pins.\n\n### The Library and Pin Change Interrupts\nThe foregoing means that not only do pin change interrupts trigger on\nall pin transitions, but a number of pins share a\nsingle interrupt subroutine. It's the library's function to make pin change interrupts\nappear that each pin can support RISING, FALLING, or CHANGE, and each pin\ncan support its own user-defined interrupt subroutine.\n\nWhen an event triggers an interrupt on any interrupt-enabled pin on a port, a\nlibrary subroutine (\"interrupt handler\", \"interrupt service routine\", or \"ISR\")\nattached to that pin's port is triggered. It is up to the EnableInterrupt\nlibrary to set the proper port to receive interrupts for a pin, to determine\nwhat happened when an interrupt is triggered (which pin? ...did the signal rise,\nor fall?), to handle it properly (Did we care if the signal fell? Did we care\nif it rose?), then to call the programmer's chosen subroutine (ISR). This makes the\njob of resolving the action on a single pin somewhat complicated. There is a\ndefinitive slowdown in the interrupt routine because of this complication.\nSo there is a significant*\ntime between when the interrupt triggers and when the pins are read to determine\nwhat actually happened (rising or falling) and which pin changed.\nSo the signal could have changed by the time the pin's status is read, returning\na false reading back to your sketch. Therefore, these\npins are *not* suitable for fast changing signals, and under the right conditions\nsuch events as a bouncing switch may actually be missed. Caveat Programmer.\nIf you're concerned about this, continue to read the following information and\nmake sure to read the wiki pages; especially see https://github.com/GreyGnome/EnableInterrupt/wiki/Usage#atmega-processor-interrupt-types .\nFor a further review of this issue see\nhttps://github.com/GreyGnome/EnableInterrupt/blob/master/Interrupt%20Timing.pdf\n\n# USAGE:\n## Basic Usage\n*enableInterrupt*- Enables interrupt on a selected Arduino pin.\n```C\nenableInterrupt(uint8_t pinNumber, void (*userFunction)(void), uint8_t mode);\nor\nenableInterrupt(uint8_t interruptDesignator, void (*userFunction)(void), uint8_t mode);\n\nThe arguments are:\n* pinNumber - The number of the Arduino pin, such as 3, or A0, or SCK. Note that\nthese are *not* strings, so when you use A0 for example, do not use quotes.\n* interruptDesignator- very much like a pin. See below.\n* userFunction - The name of the function you want the interrupt to run. Do not\nuse a pointer here, just give it the name of your function. See the example code\nin the Examples directory.\n* mode - What you want the interrupt to interrupt on. For Pin Change Interrupt\npins, the modes supported are RISING, FALLING, or CHANGE.\n** RISING - The signal went from \"0\", or zero volts, to \"1\", or 5 volts.\n** FALLING - The signal went from \"1\" to \"0\".\n** CHANGE - The signal either rose or fell.\n\nFor External Interrupts, the same modes are supported plus the additional mode\nof LOW signal level.\n** LOW - The signal is at a low level for some time.\n\nEach pin supports only 1 function and 1 mode at a time.\n```\n\n*disableInterrupt*- Disables interrupt on a selected Arduino pin.  \n\n```C\ndisableInterrupt(uint8_t pinNumber);\nor\ndisableInterrupt(uint8_t interruptDesignator);\n```\n\n* interruptDesignator: Essentially this is an Arduino pin, and if that's all you want to give\nthe function, it will work just fine. Why is it called an \"interruptDesignator\", then? Because\nthere's a twist: You can perform a bitwise \"and\" with the pin number and PINCHANGEINTERRUPT\nto specify that you want to use a Pin Change Interrupt type of interrupt on those pins that\nsupport both Pin Change and External Interrupts. Otherwise, the library will choose whatever\ninterrupt type (External, or Pin Change) normally applies to that pin,\nwith priority to External Interrupt.\n\n* The complexity is because of pins 2 and 3 on the ATmega328-based Arduinos, and pins 2, 10,\nand 11 on 1284-based boards. Those are the only pins on the processors supported by this\nlibrary that can share External or Pin Change Interrupt types. Otherwise, each pin only supports\na single type of interrupt and the PINCHANGEINTERRUPT scheme changes nothing. This means you can\nignore this whole discussion for ATmega2560, ATmega32U4, or SAM3X8E (Due)-based Arduinos.\n\nIt is possible to change the user function assigned to an interrupt after enabling it (if you\nwant). Later in your code simply disable the interrupt and enable it with a different function.\n\n## Determine the Pin That Was Interrupted\nThere is a facility in the library to identify the most recent pin that triggered an interrupt. Set the following definition '''before''' including the EnableInterrupt.h file in your sketch:\n```\n #define EI_ARDUINO_INTERRUPTED_PIN\n```\nThen, the ATmega chip will set a variable with every interrupt, and you can query it to find which pin interrupted your sketch. The variable is arduinoInterruptedPin and it is of type uint8_t.\n\nSee the https://github.com/GreyGnome/EnableInterrupt/wiki/Usage wiki page for more information.\n\n# PIN / PORT BESTIARY\nTheoretically pins 0 and 1 (RX and TX) are supported but as these pins have\na special purpose on the Arduino, their use in this library has not been tested.\n\n## Summary\n### Arduino Uno/Duemilanove/etc.\nInterrupt Type | Pins\n-------------- | --------------\nExternal       | 2 3\nPin Change     | 2-13 and A0-A5\n### Arduino Mega2560\nInterrupt Type | Pins\n-------------- | --------------\nExternal       | 2 3 and 18-21\nPin Change     | 10-15 and A8-A15 and SS, SCK, MOSI, MISO\n### Arduino Leonardo\nInterrupt Type | Pins\n-------------- | --------------\nExternal       | 0-3 and 7\nPin Change     | 8-11 and SCK, MOSI, MISO\n### Mighty 1284, Sodaq Mbili, EnviroDIY Mayfly\nInterrupt Type | Pins\n-------------- | --------------\nExternal       | 2 10 11\nPin Change     | 0-31 (aka: 0-23 and A0-A7)\n\n## Details\n### Arduino Uno\n\n\u003cpre\u003e\nInterrupt Pins:\nArduino\tExternal                Arduino Pin Change      Arduino Pin Change\nPin     Interrupt               Pin     Interrupt       Pin     Interrupt\n                Port                           Port                     Port\n2       INT0    PD2             2       PCINT18 PD2     A0      PCINT8  PC0\n3       INT1    PD3             3       PCINT19 PD3     A1      PCINT9  PC1\n                                4       PCINT20 PD4     A2      PCINT10 PC2\n                                5       PCINT21 PD5     A3      PCINT11 PC3\n                                6       PCINT22 PD6     A4      PCINT12 PC4\n                                7       PCINT23 PD7     A5      PCINT13 PC5\n                                8       PCINT0  PB0\n                                9       PCINT1  PB1\n                                10      PCINT2  PB2\n                                11      PCINT3  PB3\n                                12      PCINT4  PB4\n                                13      PCINT5  PB5\n\u003c/pre\u003e\n\n### Leonardo Pins LEONARDO\n\n\u003cpre\u003e\nInterrupt pins:\nArduino                         Arduino\nPin     External                Pin     Pin Change\n        Interrupt                       Interrupt\n               Port                               Port\n 3      INT0   PD0              8       PCINT4    PB4\n 2      INT1   PD1              9       PCINT5    PB5\n 0      INT2   PD2              10      PCINT6    PB6\n 1      INT3   PD3              11      PCINT7    PB7\n 7      INT6   PE6              SCK/15  PCINT1    PB1\n                                MOSI/16 PCINT2    PB2\n                                MISO/14 PCINT3    PB3\n\n                                on ICSP:\n                                SCK/15:  PCINT1 (PB1)\n                                MOSI/16: PCINT2 (PB2)\n                                MISO/14: PCINT3 (PB3)\n\n// Map SPI port to 'new' pins D14..D17\nstatic const uint8_t SS   = 17;\nstatic const uint8_t MOSI = 16;\nstatic const uint8_t MISO = 14;\nstatic const uint8_t SCK  = 15;\n// A0 starts at 18\n\n\u003c/pre\u003e\n\n### ATmega2560 Support\n\n\u003cpre\u003e\nExternal Interrupts ------------------------------------------------------------\nThe following External Interrupts are available on the Arduino:\nArduino           \n  Pin  PORT INT  ATmega2560 pin\n  21     PD0  0     43\n  20     PD1  1     44\n  19     PD2  2     45\n  18     PD3  3     46\n   2     PE4  4      6\n   3     PE5  5      7\n n/c     PE6  6      8  (fake pin 75) **\n n/c     PE7  7      9  (fake pin 76)\n\n\nPin Change Interrupts ----------------------------------------------------------\n\nATMEGA2560 Pin Change Interrupts\nArduino              Arduino              Arduino\n  Pin  PORT PCINT     Pin   PORT PCINT     Pin   PORT PCINT\n  A8     PK0  16       10     PB4   4       SS     PB0   0\n  A9     PK1  17       11     PB5   5       SCK    PB1   1\n A10     PK2  18       12     PB6   6       MOSI   PB2   2\n A11     PK3  19       13     PB7   7       MISO   PB3   3\n A12     PK4  20       14     PJ1  10\n A13     PK5  21       15     PJ0   9\n A14     PK6  22        0     PE0   8 - this one is a little odd. *\n A15     PK7  23\n\u003c/pre\u003e\n\nThe library supports all interrupt pins, even though not all pins to the\nATmega-2560 processor are exposed on the Arduino board. These pins are\nsupported as \"fake pins\", and begin with pin 70 (there are 70 pins on the\nATmega 2560 board). The fake pins are as follows:\n\n\u003cpre\u003e\npin: fake70 PJ2 this is Pin Change Interrupt PCINT11\npin: fake71 PJ3 this is Pin Change Interrupt PCINT12\npin: fake72 PJ4 this is Pin Change Interrupt PCINT13\npin: fake73 PJ5 this is Pin Change Interrupt PCINT14\npin: fake74 PJ6 this is Pin Change Interrupt PCINT15\npin: fake75 PE6 this is External Interrupt INT6\npin: fake76 PE7 this is External Interrupt INT7\n\u003c/pre\u003e\n\n* Note: Arduino Pin 0 is PE0 (PCINT8), which is RX0. Also, it is the only other\npin on another port on PCI1. This would make it very costly to integrate with\nthe library's code and thus is not supported by this library.  It is the same\npin the Arduino uses to upload sketches, and it is connected to the FT232RL\nUSB-to-Serial chip (ATmega16U2 on the R3).\n\n### ATmega2561/1281 (MegaCore) Support\n\n\u003cpre\u003e\nExternal Interrupts ------------------------------------------------------------\nThe following External Interrupts are available on the Arduino/MegaCore:\nMegaCore           \n  Pin  PORT INT  ATmega2561/1281 pin\n  18     PD0  0     25\n  19     PD1  1     26\n  20     PD2  2     27\n  21     PD3  3     28\n   4     PE4  4      6\n   5     PE5  5      7\n   6     PE6  6      8\n   7     PE7  7      9\n\n\nPin Change Interrupts ----------------------------------------------------------\n\nATMEGA2561/1281 (MegaCore) Pin Change Interrupts\nMegaCore\n Pin      PORT   PCINT\n  8/SS     PB0     0\n  9/SCK    PB1     1\n  10/MOSI  PB2     2\n  11/MISO  PB3     3\n  12       PB4     4\n  13       PB5     5\n  14       PB6     6\n  15       PB7     7\n   0       PE0     8 - this one is a little odd. *\n\u003c/pre\u003e\n\n* Note: Arduino Pin 0 is PE0 (PCINT8), which is RX0. Also, it is the only other\npin on another port on PCI1. This would make it very costly to integrate with\nthe library's code and thus is not supported by this library.  It is the same\npin the Arduino uses to upload sketches, and it is connected to the FT232RL\nUSB-to-Serial chip (ATmega16U2 on the R3).\n\n### Mighty 1284, Bobuino, EnviroDIY Mayfly, Sodaq Mbili Support\nThe ATmega 1284p shares pinout with the 644; the only difference is in memory\nsize. We use the \"Mighty 1284\" platform as our model, because the needed files are\nmature and complete.\n\n\u003cpre\u003e\nInterrupt Pins:\nMighty  External                Mighty                                 Mighty           \nPin     Interrupt               Pin*  PORT PCINT ATmega644/1284 pin    Pin*  PORT PCINT ATmega644/1284 pin\n                Port            0     PB0   8         1                15    PD7  31        21\n2       INT2    PB2             1     PB1   9         2                16    PC0  16        22\n10      INT1    PD2             2     PB2   2         3                17    PC1  17        23\n11      INT0    PD3             3     PB3  11         4                18    PC2  18        24\n                                4     PB4  12         5                19    PC3  19        25\n                                5     PB5  13         6                20    PC4  20        26\n                                6     PB6  14         7                21    PC5  21        27\n                                7     PB7  15         8                22    PC6  22        28\n                                8     PD0  24        14                23    PC7  23        29\n                                9     PD1  25        15             31/A7    PA7   7        33\n                               10     PD2  26        16             30/A6    PA6   6        34\n                               11     PD3  27        17             29/A5    PA5   5        35\n                               12     PD4  28        18             28/A4    PA4   4        36\n                               13     PD5  29        19             27/A3    PA3   3        37\n                               14     PD6  30        20             26/A2    PA2   2        38\n                                                                    25/A1    PA1   1        39\n                                                                    24/A0    PA0   0        40\n\nBobuino External                Bobuino                                Bobuino           \nPin     Interrupt               Pin*  PORT PCINT ATmega644/1284 pin    Pin*  PORT PCINT ATmega644/1284 pin\n                Port            4     PB0   8         1                31    PD7  31        21\n2       INT2    PB2             5     PB1   9         2                22    PC0  16        22\n10      INT1    PD2             6     PB2   2         3                23    PC1  17        23\n11      INT0    PD3             7     PB3  11         4                24    PC2  18        24\n                               10     PB4  12         5                25    PC3  19        25\n                               11     PB5  13         6                26    PC4  20        26\n                               12     PB6  14         7                27    PC5  21        27\n                               13     PB7  15         8                28    PC6  22        28\n                                0     PD0  24        14                29    PC7  23        29\n                                1     PD1  25        15             14/A0    PA7   7        33\n                                2     PD2  26        16             15/A1    PA6   6        34\n                                3     PD3  27        17             16/A2    PA5   5        35\n                               30     PD4  28        18             17/A3    PA4   4        36\n                                8     PD5  29        19             18/A4    PA3   3        37\n                                9     PD6  30        20             19/A5    PA2   2        38\n                                                                    20/A6    PA1   1        39\n                                                                    21/A7    PA0   0        40\n\nMayfly                          Mayfly                                 Mayfly\nMbili   External                Mbili                                  Mbili           \nPin     Interrupt               Pin*  PORT PCINT ATmega644/1284 pin    Pin*  PORT PCINT ATmega644/1284 pin\n                Port            8     PB0   8         1                 7    PD7  31        21\n2       INT2    PB2             9     PB1   9         2                16    PC0  16        22\n10      INT1    PD2            10     PB2   2         3                17    PC1  17        23\n11      INT0    PD3            11     PB3  11         4                18    PC2  18        24\n                               12     PB4  12         5                19    PC3  19        25\n                               13     PB5  13         6                20    PC4  20        26\n                               14     PB6  14         7                21    PC5  21        27\n                               15     PB7  15         8                22    PC6  22        28\n                                0     PD0  24        14                23    PC7  23        29\n                                1     PD1  25        15             31/A7    PA7   7        33\n                                2     PD2  26        16             30/A6    PA6   6        34\n                                3     PD3  27        17             29/A5    PA5   5        35\n                                4     PD4  28        18             28/A4    PA4   4        36\n                                5     PD5  29        19             27/A3    PA3   3        37\n                                6     PD6  30        20             26/A2    PA2   2        38\n                                                                    25/A1    PA1   1        39\n                                                                    24/A0    PA0   0        40\n\u003c/pre\u003e\n\u003c/pre\u003e\n# Thanks!\nThank you for downloading and enjoying the EnableInterrupt library.\nI hope you find it useful. Heck, I wrote it for you- yeah, that's right- you.\nThe Maker and/or Geek sitting before your project and trying to make little\ncomputers do fun stuff. It's not easy, and my hat goes off to you. I hope I've\nmade stuff a little easier for you.\n\nThis software would not be nearly as useful as it is\nwithout the help of the following people:\n\nThanks to Loranzo Cafaro for his switch debounce example, to Jevon Wild for his changes to make the\nlibrary more functional with PlatformIO (http://docs.platformio.org/en/latest/what-is-platformio.html),\nRicardo JL Rufino for some PlatformIO fixes to the library.json file, and Sara Damiano for\nadding support for the Sodaq Mbili and EnviroDIY Mayfly.\n\nAnd, from the past, this library's predecessor was the PinChangeInt library.\nI have done a complete rewrite and not used any of its code, but I learned\na lot by doing the previous one and I feel like I still owe a debt of gratitude\nto all the geeks who created/contributed/helped/debugged. So without further\nado, I present the \"ACKNOWLEDGEMENTS\" section from the previous library. Note\nthat \"this\" library in the following refers to PinChangeInt:\n\n\u003e This library was originally written by Chris J. Kiick, Robot builder and all\naround geek, who said of it,\n\u003e        \"Hi, Yeah, I wrote the original PCint library. It was a bit of a hack\n        and the new one has better features.  I intended the code to be freely\n        usable.  Didn't really think about a license.  Feel free to use it in\n        your code: I hereby grant you permission.\"\n\u003e Thanks, Chris! A hack? I dare say not, if I have taken this any further it's\nmerely by standing on the shoulders of giants. This library was the best\n\"tutorial\" I found on Arduino Pin Change Interrupts and because of that I\ndecided to continue to maintain and (hopefully) improve it. We, the Arduino\ncommunity of robot builders and geeks, owe you a great debt of gratitude for\nyour hack- a hack in the finest sense.\n\n\u003e The library was then picked up by Lex Talionis, who created the Google Code\nwebsite. We all owe a debt of thanks to Lex, too, for all his hard work! He is\ncurrently the other official maintainer of this code.\n\n\u003e Many thanks to all the contributors who have contributed bug fixes, code, and\nsuggestions to this project:\n\n\u003e John Boiles and Baziki (who added fixes to PcInt), Maurice Beelen, nms277,\nAkesson Karlpetter, and Orly Andico for various fixes to this code, Rob Tillaart\nfor some excellent code reviews and nice optimizations, Andre' Franken for a\ngood bug report that kept me thinking, cserveny.tamas a special shout out for\nproviding the MEGA code to PinChangeInt, and Pat O'Brien for testing and\nreporting on the Arduino Yun.- Thanks!\n\n\u003e A HUGE thanks to JRHelbert for fixing the PJ0 and PJ1 interrupt PCMSK1 issue on\nthe Mega... 06/2014\n\n\u003e A HUGE thanks to Jan Baeyens (\"jantje\"), who has graciously DONATED an Arduino\nMega ADK to the PinChangeInt project!!! Wow, thanks Jan! This makes the\n2560-based Arduino Mega a first class supported platform- I will be able to test\nit and verify that it works.\n\n- In 2018, Alex Reinert contributed Bobuino support. Thanks, Alex!\n\n- In 4/2019 Kizmit99 contributed support for the ATmega2561 and 1281 chips, with\npinouts defined from the MCUdude/MegaCore project. Thanks, Kizmit99!\n\n- In 8/2019 Greg Bowler helped suss out a documentation bug, and contributed\na patch to make the README.md less confusing. Much appreciated.\n\n\u003e Finally, a shout out to Leonard Bernstein. I was inspired by him\n(https://www.youtube.com/watch?feature=player_detailpage\u0026v=R9g3Q-qvtss#t=1160)\nfrom a Ted talk by Itay Talgam. None of the contributors, myself included, has\nany interest in making money from this library and so I decided to free up the\ncode as much as possible for any purpose.  ...But! You must give credit where\ncredit is due (it's not only a nice idea, it's the law- as in, the license\nterms)!\n\n\u003e \"If you love something,  give it away.\"\n\nI apologize if I have forgotten anyone here. Please let me know if so.\n","funding_links":[],"categories":["Libraries"],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGreyGnome%2FEnableInterrupt","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FGreyGnome%2FEnableInterrupt","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FGreyGnome%2FEnableInterrupt/lists"}