Basic IO Abstraction arudino library
TL;DR: This library provides helps you write non trivial Arduino applications. It contains a very simple task management facility, IO abstraction (serial, 8754 i2c), interrupt management, switch de-bouncing and rotary encoder support. Currently, it is intended for use with Uno (MEGA328) and above. There are many examples packaged with it that cover most use cases. Downloads and source for the IO Abstraction library are hosted on github, all you’ll have to do is download and unzip the file into your Documents/Arduino/libraries folder and rename the folder from basicIoAbstraction-mater to basicIoAbstraction.
This example demonstrates the use of Arduino IO Abstraction library with an i2c 8574 i2c IO expander chip, in order to receive input from a switch and light an LED. It’s about the most basic example possible that has both input and output. To use this example first download the IoAbstraction library Devices such as the PCF8574 provide an easy way to expand both input and output capabilities using a single chip, and because it’s on i2c, needs only two pins from the Arduino (SDA and SCL).
Timed blink is a version of well known Arduino blink example that is shipped with the standard IDE, but is redesigned to use the Abstraction and timer library. Example circuit for the code is exactly the same a blink, and if you use the inbuilt LED pin (which it does by default) then there’s no need to build any circuit whatsoever. Instead of using delay() calls to set the duration of the led flash, it uses the task management library to schedule a task.