Libraries for Arduino

A collection of contributed libraries. You can add your own libraries here.
The official Arduino library page is located here.
Many other libraries are located in the Interfacing With Hardware section.
For code Snippets and Sketches instead see here.

Navigation

Audio

  • SimpleSDAudio Play audio files with your Arduino in decent quality from SD card, only very few additional hardware required, easy to use library. Mono, stereo and even 16-bit.

  • toneAC library - Twice the volume of the standard tone library (AC push/pull). Also higher/lower frequencies, smaller compiled size, bug fixes, volume setting, and uses timer 1 which may free up conflicts.

  • Mozzi sound synthesis library with familiar audio and control rate synthesis units like oscillators, delays, filters and envelopes. Includes documentation and example sketches. Open source and extendable.

  • SID Emulator Library - MOS 6581 SID sound chip emulator library

  • SMARTWAV - Library for the SmartWAV Audio Processor board.

  • LPM11162 - Library for use of LPM11162 audio module.

  • VS1053 Audio Codec Chip- Ogg Vorbis/MP3/AAC/WMA/FLAC/MIDI

  • µSpeech libray - Speech recognition library for arduino. For people behind Chinese firewall use this link.

  • PCM/WAV Audio Library - Standards compliant WAV audio library for playback and recording of computer friendly audio files using only timer pins. Supports info tags, dual track playback, wireless streaming and more. Arduino Due not supported yet.

  • Wireless Audio Library - Audio library for wireless streaming/multicasting of live digital audio from a microphone or virtually any source, via NRF24L01 radio modules. Also supports wireless output from the TMRpcm WAV audio library.

  • Arduino DUE I2S Driver - Configures the Arduino DUE's SSC controller to operate in I2S mode for interfacing with external CODECs. Receive and playback are supported.

  • Arduino FFT - frequency analysis of audio or other analog signals.

  • Advanced Tone - produce square-wave of the specified frequency (and 50% duty cycle) on any Arduino pin.

  • PCM2705 Library - Library for controlling playback on a PCM2705 USB DAC .

  • WM8741 Library - Library for controlling WM8741 High Performance Stereo DAC chip from Wolfson Micro (now Cirrus logic) .

Cloud

  • Exosite send and receive data to/from the cloud by using Exosite's Cloud Data Platform.

  • Yaler - access your Arduino from everywhere via the Yaler.net relay service.

  • OSPOM - free, open source, cloud service for any arduino. Like Facebook for your Arduino. *No-WiFi/Ethernet sheild required; connects via any GNU/Linux computer. No router setup.

Menu

Libraries that simplify implementing a menu. The Arduino sends a (human-readable) list of option (typically to a 2-line text LCD or the serial monitor), and allowing a human to select one of those options (typically using buttons UP, DOWN, and SELECT near the LCD).

Communications

  • https://github.com/gioblu/PJON - is a multi-master, single wire, addressed and checked communication protocol and is designed to be an alternative to i2c, 1Wire, Serial and the other Arduino compatible protocols.

  • https://github.com/gioblu/ASK_Slang - allows you to leverage all the power of simple ASK 433mhz transceivers and have long range digital data communication channel with a simple and user friendly set of functions to manage data transmission.

  • ESP8266wifi - is an easy way to use the cheap Wifi module ESP8266 in you sketches. The library has built in re-connect support.

  • Packetizer is a Library to analyze data for a start and/or end condition. If both, start- and end-condition is met the data between start and end is returned via a callback function as raw bytes. Examples show the use with incoming serial data.

  • ToothFairy is a Library and matching android app for controlling your devices over bluetooth. A custom gui is created without programming or any setup on the android device. App available on play store: ToothFairy

  • IRremote - A Multi-Protocol Infrared Remote Library for the Arduino, started by Ken Shirriff. This is an absolutely fantastic IR library capable of receiving and sending a whole slew of infrared remote protocols, as well as reading or writing raw (undefined/unknown) protocols. Very extensive and functional. This library uses one of the microcontroller's hardware timers to function. You can choose which timer you'd like it to use by editing the compiler directives (#define statements) in "IRremoteInt.h." It can receive on any pin but send on only one pin. NB: per my experience, the new Arduino IDE comes with a library called "RobotIRremote." You may have to navigate to the Arduino IDE folder and remove this folder in order to prevent it from conflicting with IRremote.

  • uHTTP - uHTTP is a tiny library that provide a very comfortable way to parse and access HTTP request data and build something amazing such as REST API interface for your project.
  • SIM90X - SIM90X is a library based on Adafruit FONA that provide a simple way to manage GSM modules based on SIM90X chipset.

  • ArduinoJsonParser - An efficient JSON parser for Arduino

  • RestClient - RestClient makes RESTful HTTP requests simple from the arduino using the EthernetShield.

  • Lifegraph - Lifegraph connects your Arduino to Facebook or any other JSON API on the web, built on the WiFlyHQ library.

  • Arduino ICSC - Link multiple Arduino boards together with serial or RS-485. Simple packet messaging protocol between two nodes with RS-232 or hundreds of nodes with RS-485.

  • WebSerial - WebSerial makes it easy for web browsers to communicate with Arduino over Ethernet, just like with the built in Serial interface. WebSerial includes simple javascript and Arduino libraries.

  • arduiNode - arduinode is a protocol for a wireless sensor network (WSN). Communication is handled in the background, neighbor nodes find each others and span the net. Some of its core features are: multi hop packet routing, dynamic id allocation, collision avoidance and rebroadcasting of lost messages.

  • Conceptinetics DMX - Library which makes it easy to write DMX Master and Slave implementations

  • Streaming - C++-style Output with '<<'

  • SerialDebugger is a library that enhance code readability, and debug control.

  • NewSoftSerial: An interrupt-driven Software Serial library now used in the latest arduino releases.

  • EasyTransfer: Easy communications between Arduinos over Serial or I2C.

  • Buffered and non-blocking serial writes Serial manager that allows non-blocking serial writes along with a simple way of packetizing serial data by calculating checksums and appending packet headers in a transparent way for the user. Also provides packetized serial reception with a function callback when a full and checksum-correct packet has been received.

  • SerialIP provides Internet connectivity over the serial port (no shields required)

  • SerialUI allows you to create a user interface for your device through the serial channel (menus, sub-menus and command execution). It provides built-in support for navigation through the menu hierarchy and online help. As of version 1.4, using SerialUI gives you a graphical user interface (GUI) as well, with no additional coding, thanks to druid4arduino.

  • multiCameraIrControl, controlling Nikon, Canon, Sony, Minolta, Olympus and Pentax cameras just with an IR LED.

  • TwitterLibrary assists in posting your data to twitter

  • TinyREST is a library that implements a REST-like server on top of the Asynclabs WiShield library. It provides ability to read and write to pins and EEPROM, but also ability to receive REST callbacks on changes.

  • ModbusMaster: Arduino class library for communicating with Modbus slaves over RS232/485 (supports Arduino 1.0)

  • modbus-arduino, A library that allows your Arduino to communicate via Modbus protocol, acting as a slave (master in development). Supports Modbus Serial (RS-232, RS-485) and everything that uses IP (Modbus IP).

  • RF24 - Stable, mature library for driving Nordic nRF24L01+ wireless RF radios. Includes tutorials and plentiful examples. GitHub source code here. As of 7 March 2015, this library has not been actively developed in over a year.

    • RF24 Fork - A new fork of the original RF24 library for driving nRF24L01 RF radios. Combines improvements and device support from many of the existing library forks with a round of major updates which includes many improvements, extended hardware support, and updated documentation. GitHub source code here. As of 7 March 2015, this library is currently being actively developed.

  • RFM69 library for RFM69W, RFM69HW, RFM69CW, RFM69HCW (semtech SX1231, SX1231H)

  • GNTP - Arduino library for sending Growl notifications to your Mac, Linux or Windows PC over the network, using GNTP.

  • Tx433_Proove - A simple lib to use remote controlled power outlet switches of the brand Proove.

  • Oscuino - A full-featured implementation of the OSC 1.0 communication protocol for Arduino.

  • XMODEM - An XMODEM transfer library that's Arduino compatible, and POSIX compatible, so you may be able to use it for both the Arduino and your client application. Requires SD library for file access via the Arduino with a micro-SD card.

  • XModem - Simple xmodem protocol implementation in C++. The code is very compact and portable so it can be used not only on Arduino, but on a PC as well.

  • pfod Parsers Library - Three pfod parsers are provided. A very simple cmd parser, a full msg parse and a parser with per message SipHash for use over the internet with 128bit security. See also SipHash in Cryptography below.

  • NetEEPROM A library to easily store Ethernet settings in EEPROM. Additional documentation a blog post.

  • CmdMessenger - uses the serial port as transport layer.

  • RPCTransport - provides easy way to organize two - way communication between Arduino and Node.js, uses the serial port as transport layer.

  • sserial2mobile - send text messages or emails using a cell phone (via AT commands over software serial).

  • Webduino - extensible web server library for use with Wiznet-based Ethernet shields.

  • xbee-arduino - communicating with XBees in API mode, with support for both Series 1 (802.15.4) and Series 2 (ZB Pro/ZNet).

  • SerialControl - control Arduinos over a serial connection.

  • WoopsaArduino - Ever wanted to control your little Arduino with a cross-platform RESTful protocol? Then try Woopsa!

  • ICMP Ping ICMP Ping library

  • EtherEvent - Easy to use password authenticated Ethernet communication between Arduinos and EventGhost Network Event Sender/Receiver plugin.

  • See also SketchList#Communication_code and TutorialList#Communication

Cryptography

  • Arduino Spritz Cipher: Spritz Library for Arduino, A spongy RC4-like stream cipher, Hash and MAC function.

  • http://github.com/gioblu/Cape: is a string encryption library that use an algorithm inspired by the RC4 standard with the addition of 1 byte initialization vector and tunable encryption_strength; all this is reversible, so two entities with the same key can share encrypted data and come back to original content without any other procedure using Cape set of functions.

  • Arduino MD5:An easy-to-use MD5 library for the Arduino, for all your hashing needs.

  • Entropy: is an Arduino library that provides tested mechanism of producing cryptographically sound truly random numbers.

  • SipHash:SipHash implementation for Arduino. Small and fast. Avoids the deficiencies and failings of MD5 hashing. See https://131002.net/siphash/ for the details of the algorithm.

  • OATH TOTP:An Arduino library to generate TOTP (Time-based One Time Password) codes following the OpenAuthentication RFC 6238.

Data Structures and Algorithms

Home Automation and IoT (Internet of Things)

  • MySensors NRF24L01 Arduino Library - Build your own mesh-enabled radio network using Arduinos. The MySensors website also contains easy-to-follow build instructions and ready-to-use Arduino examples sketches to help you create your own wireless sensors. Free plugins for a bunch of different open source home automation controllers.

  • Souliss - Arduino Home Automation with Android User Interface - Home Automation and Internet of Things framework to use your Arduino as domotic system, based on distributed structure, you can use more nodes in your home, either wireless and wired. User interaction via Android application or Modbus interfaces.

  • X10 home automation libraries with Andoid app
    Three libraries that enable two-way communication with X10 modules and receiving commands from X10 RF and IR remotes. The examples include Andoid app and Ethernet shield compatible REST service that enables X10 control using your Android phone or tab. A basic example is also included that lets you receive and send X10 commands using serial.
    For more info visit: blog.lookout.no. Source code available on GitHub: github.com/tmittet/x10.

  • Sonos speaker system UPnP library
    This UPnP library makes interfacing with your Sonos speaker system a breeze. The included examples demonstrate how to skip, pause, change volume, play files or playlists, stream internet radio stations, check what is currently playing, read track position, and much more. The library is small enough to run on the Arduino Uno.
    For more info visit: blog.lookout.no. Source code available on GitHub: github.com/tmittet/sonos.

Input / Output

Buttons & Debouncing

  • Button is a customizable library for handling button press, it has the ability of detecting a bounced press, as well as differentiating a long press from a short one.

  • TButton - Toggle a pin using a momentary button

  • MomentaryButton - track short taps and long presses on a momentary button

  • Button (carlynorama) Another button abstraction library. Event based, also allows for being used with shift registers, debounce, holdDelay (like keyboards) etc. Lots of examples.

  • EasyButton - EasyButton provides various features for handling buttons easily and without complications.

  • Switch - Very small and simple debounce class for switches and buttons with a straightforward interface. External pull-up resistors are not required. Supports also long press and double clicks.

  • AnalogDebounce Voltage Divided Analog Keypad Input debounce library. Official Discussion Thread

  • Bounce - debounces digital inputs and more.

  • eRCaGuy_ButtonReader - [Update 31 Oct. 2014: major bux fix to add multi-button support; also added read5Buttons example]. This code is an elaboration of, and library form of, the main Arduino-sponsored "Debounce" example found here. It allows you to debounce and read a button or switch in such a way that you can easily implement toggled actions and momentary actions, know the true, debounced state of a button or switch at any given time, and specify whether you want an action to take place when the button is *pressed* or *released.*

Other Input / Output

  • DirectIO - Fast digital I/O library with an easy class interface. Provides great speedup when pin numbers are known at compile time - up to 60x faster than digitalWrite. Can output a 2.66 MHz signal on a 16 MHz Arduino board. Examples and benchmark data are provided.

  • ShiftRegister74HC595 - Control 74HC595 shift register pins like normal Arduino output pins (detailed documentation, examples and performance optimized functions like setting all pins once, etc.) .

  • Shift595 - Easily control 74HC595 Shift Register pins much like you would any other Arduino digital output pin.

  • PS2Keyboard - Get input form a PS2 Keyboard.

  • PS2uart Keyboard - Combine TVout and PS2Keyboard, so you can make a TV typewriter, or some kind of interactive computer.

  • Simple Voltmeter Class - uses the internal reference voltage (1.1V) to get an absolute voltage reading; can even be used to read own power source voltage value

  • OneWire Interface (Atmel QTouch)

  • GetOneWireTemp

  • OneWire - Dallas Semiconductor's 1-Wire Protocol

  • H48C - Library for use of Parallax H48C module

  • PIDLibrary - Provides basic feedback control

  • ArduPID - Advanced PID control

  • PIDAutotuneLibrary - Provides tuning parameters for the PID Library.

  • Ping - Simplify the usage of Ping))) Ultrasonic Sensors

  • DigitalToggle - register based pin toggle library

  • Morse - sends without blocking (no delay()) and which uses String instead of char*

  • Morse endecoder - Another non-blocking Morse code library, both encoding (sending) and decoding (audio or digital/keyer), asynchronously.

  • FancyLED - Another simple hardware abstraction library that enables blinking "N" times at custom rates, toggling, has a "fuse" example that allows for blinking to start after some lead time.

  • N64Controller Library Supports N64 controllers on various pins. Based on this work.

  • (Serial) Dbg A Serial Debugger class that supports printf syntax.

  • DisplayValueOnLed A library class for displaying an integer value on a single LED as a set of light pulses, fully configurable.

  • SyncLED An LED class for blinking patterns and numbers asynchronously. Includes PWM support for smooth fade blinking.

  • RGBlink RGB-LED class with support for HSB-colors and non-blocking blinking and fading

  • AtTouch A library for the Atmel AT42QT1070 7-channel Touch Capacitance Sensor IC via i2c

  • SerialLCD A library for easy hardware serial interface with SparkFun 20x4 Serial Ready LCD screen. Based on SfLCD2

  • shiftOutX A library to easily add up to 64 or more digital outputs to an Arduino by using 74HC595 shift Registers.

  • MCP23S17 A Class for the MCP23S17 SPI I/O Expander.

  • MCP4822 A simple interface to the MCP4822 and similar DAC chips.

  • triColorLEDs A class for easy manipulation of triColorLEDs; requires 3 PWM outputs.

  • ArduinoRCLib A library for reading/writing PPM and Servo signals as well as various functions for creating a helicopter or fixed wing oriented transmitter/flight controller.

  • CPPM Combined PPM (CPPM) Receiver Library, providing a simple interface for reading up to 16 channels of RC input from a single CPPM signal.

  • SoftTimer is a time sharing solution for Arduino. It has build in software implementation for PWM, Debouncer, Blinker, etc.

  • SimpleSoftwareServo drives servos on any number of pins at once, like SoftwareServo, except with cleaner inter-pulse timing.

  • digitalInput A class to easily handle a digital input pin with '==' operator, checking toggle state ecc..

  • SNESpaduino - Use a Super Nintendo gamepad as input for an Arduino. NES pad compability and Gamepad emulators to be added!

  • VaRGB - RGB illumination programming library, works with Arduino (or any platform that supports C++) and any RGB lighting (simple LEDs, ShiftBrite/MegaBrite, LED strips, etc). VaRGB allows you to setup simple or complex behaviour using schedules of transition curves.

  • TEA5767Radio - Library for the TEA5767 FM Radio chip

  • TEA5767N - TEA5767 FM Philips chip

  • Arduino DUE Parallel Bus - Configures Arduino DUE's external memory bus for interfacing with memory devices/LCDs with an Address/Data Bus.

  • CY8C95X0 - Class for handling CY8C9560, CY8C9540 and CY8C9520 i2c I/O Expander chips with internal adjustable PWM controllers.

  • ShiftEasier - ShiftEasier provides various features for handling shiftregisters like 74HC595 easily and without complications.

  • Arduino/Wiring SoftPWM Library - produce PWM signals on any arbitrary pin, up to 20 channels, fade function, inverted action option.

  • arduino-softpwm - Software PWM library for Arduino. Features include: PWM frequency change, brightness levels, inverted action, and interrupt load test. In the latest version each channel is delayed by 1 PWM clock cycle to prevent large in-rush currents. If you don't need this feature then use this version.

  • CapacitiveSensor - turns two or more Arduino pins into a capacitive sensor.

  • AnalogScanner - A library for reading the analog inputs using the ADC Conversion Complete Interrupt rather than busy-waiting as in analogRead(). The caller can specify an arbitrary order for reading the inputs. Once scanning is started, the analog values are read as fast as possible. Callers can periodically get the latest values or set up callback functions to process the values as they are read.

  • eRCaGuy_NewAnalogRead - An analog read library to do two things: (1) easily change the ADC (Analog to Digital Converter) speed (ex: to increase the max speed of 10-bit readings from ~10kHz to 50+kHz, and (2) use oversampling (per the AVR121 Application Note) to increase the resolution of analog readings from 10-bit (0-1023) to 16-bit (0-65472 in the case of oversampling) or more. A detailed table shows the trade-offs and speed capabilities of each resolution setting, from 10 to 16+ bits. This library also allows averaging of samples, by inputting the # of readings, at a given precision, that you would like to take, average, & return.

  • ADCTouch - Create capacitive sensors that only use a single pin and have superior accuracy to the other CapSense library.

Multiple LED control

  • ALA - Arduino Light Animation (ALA) is a library to simplify the development of light animations using a wide variety of LEDs and LED strips.

  • Pixelgroup is a library to group pixels in a LED-strip. It is intended to be used together with a pixel-strip library like Adafruit_NeoPixel or Adafruit_WS2801 but can be used for any kind of rendering backend.

  • Charlieplex - simplifies the coding of charlieplexed networks.

  • Chaplex - another solution for controlling a structure of charlieplexed leds.

  • TLS3008 is a library that eases the control of RGB LEDs strings using the TLS3008 LED driver.

  • GEColorEffects A library for controlling GE Color Effects RGB LED holiday light strings via a one-wire protocol

  • LED matrix multi-displays - Control multiple 32x8 LED matrix display boards with simple printf like functions. Supporting accented fonts, Left, Center, Right justification, Blinking, Intensity control. Can combine multiple displays boards into single text line (up to 8 display boards, 256x8) or separate them into multiline.

Interrupts

  • PcInt - simple pin change interrupts

  • PinChangeInt - Preformance and size improved revision to PCInt

  • PciManager is an other implementation for helping developers to use PCI. You can register more listeners on more pins that should be launched on pin change.

LCDs (Textual)

  • SciValue - A useful library you can use to print floating point number in scientific format

  • serLCD - Sparkfun serLCD Library

  • LiquidCrystal use SPI and A 74HC595 shift register with Arduino's LiquidCrystal library.

  • AXE133Y Software library for picaxe AXE133Y OLED 16x2 module

  • LCDBitmap - Display graphics on a normally text-only LCD display

  • Parallax LCD - Updated library to work with Parallax LCDs

  • LCD_I2C Software library for LCD with I2C back pack.

  • BigCrystal - Print double height characters on an LCD. Also BigCrystalTWI for displays connected with an I2C backpack.

LCDs (Graphical)

  • EVE Display - FTDI FT80x Embedded Video Engine include touch, display and Audio functions. Provide Arduino reference design and SPI interface libraries.

  • ArdGrafix6100 - A fast, full-featured graphics driver for Nokia 6100 LCDs

  • NokiaLCD - Library for Philips based controller for Nokia 6100 Breakout Board

  • Serial_LCD library suite for 4D Systems µLCD, µOLED and µVGA screens. It manages text, graphics, touch, read and write on SD-card, sound, through a single serial interface, either hardware, software or I²C. High-level commands offer GUI, graphics, power-saving and even a picture frame!

  • LCDBitmap - Display graphics on a normally text-only LCD display

  • SmartGPU 2 Library for SmartGPU 2 intelligent embedded graphics processor.

  • GFX - Adafruit GFX graphics core library.

  • GLCDks0108 - supports Graphic LCDs (GLCD) that use the KS0108 (or equivalent) chip.

  • openGLCD - open source glcd library for use in open source projects.

Math

Motion Control

Motor Drivers

Robotics

  • Stepper Robot a library for controlling a robot powered by two stepper motors in differential configuration.

Signal Processing

  • Microsmooth is a lightweight and fast signal smoothing library for the Arduino platform.

  • eRCaGuy_NewAnalogRead - An analog read library to do two things: (1) easily change the ADC (Analog to Digital Converter) speed (ex: to increase the max speed of 10-bit readings from ~10kHz to 50+kHz, and (2) use oversampling (per the AVR121 Application Note) to increase the resolution of analog readings from 10-bit (0-1023) to 16-bit (0-65472 in the case of oversampling) or more. A detailed table shows the trade-offs and speed capabilities of each resolution setting, from 10 to 16+ bits. This library also allows averaging of samples, by inputting the # of readings, at a given precision, that you would like to take, average, & return.

Schedulers and Pseudo Operating Systems

  • https://github.com/gioblu/Agenda - is a simple task scheduler written to be simple to use and effective and precise in high frequency task execution.

  • os_wrap - OS wrapper: Tasks using cooperative multitasking, Semaphores, Message Queues, Timers, Odometer, EEPROM logging.

  • EventFuse - Recurring events via a software count-down

  • Aiko - A small modular, event-driven framework for structuring Arduino sketches

  • Event System - includes events, an event queue class and a dispatcher class

  • Finite State Machine Library for organizing complicated sketches.

  • QP - The QP state machine framework for Arduino, which is like a modern event-driven RTOS specifically designed for executing state machines.

  • Scheduler - Simple scheduling of function calls.

  • SCoop - A Simple Cooperative Scheduler for both ARM and AVR with Task, timers, event and fifo handling. All in one SCoop.h library compatible with "Android Scheduler"

  • ArduOS - a small preemptive multitasking-system for AVR, that allows to add schedulers - revised

  • SMlib - a novel and relaxed approach to state finite state machines

  • TaskScheduler - simple cooperative multitasking library for Arduino

Sensors

Storage & Memory

  • EEPROMex library - extends the standard EEPROM library with reading, writing bytes, longs, ints, floats and doubles, single bits, structs, arrays and more.

  • EEPROMallocation - Automatic allocation of unique EEPROM addresses for any variable type.

  • A function for seeing how much memory (RAM) is available

  • DB A simple database library for reading and writing to tables stored in EEPROM

  • A set of functions to dynamically allocate arrays

  • EDB An extended database library based on DB allowing for more records, larger records size, and external EEPROM storage

  • Mikal Hart's Flash library - allows you to easily store strings, arrays, and tables in read-only memory without the hassle and complexity of learning PROGMEM programming.

  • SCLib can be used to communicate to all kinds of smartcards (synchron and asynchron). Also a specialized support class for SLE4432 / SLE4442 compatible smartcards exists.

  • Hackscribble Ferro - Library to interface with Fujitsu MB85RS FRAM chips. Add up to 32KB per chip of fast, non-volatile memory through SPI bus.

  • MB85RC FRAM I2C - Library to address Fujitsu's FRAM MB85RC devices over I2C

Strings

  • PString: A very lightweight string class that enables printing to buffer using the same code as Serial.print(). By Mikal Hart.

Testing, Utilities and Power Saving

  • ArduinoUnit - Test suite

  • Enerlib: easy-to-use wrapper for AVR's Sleep library.

  • Sleep_n0m1: A Library to sleep for a specific length of time or until interrupt.

  • Logging: easy-to-use logging library like log4j.

  • narcoleptic: a sleep library for Arduino, by Peter Knight (Cathedrow). This is a fantastic power-saving replacement for the basic delay() function, which puts the mcu (microcontroller) to sleep during delay.

  • ApplicationMonitor - Logs the program addresses where watchdog timeouts occurred to EEPROM.

  • WatchdogLog - Logs the program address where the most recent watchdog timeout occurred to EEPROM. Based on the ApplicationMonitor library but with a focus on easier integration with your program.

Timing

  • tBeat - The tBeat library manages periodic or timed function calls. The library uses the Timer1 or the Timer3 to generate an interruption every 1ms. What I call hook is a little structure holding a period, a countdown, and a function pointer. When the count is zero, tBeat callbacks the function pointer of the hook. By default you can have a maximum of 8 hooks. Every hooks are modifiable, deletable and so on... Priority is given to the hooks which have the smallest period.

  • Timer - simple to use timed pin control and callbacks. This is a software-based non-blocking timer solution (ms-accuracy), made by Simon Monk & J Christensen--very useful!

  • Timer Object - The Timer Object class provides repetitive and single-shot timers callback for Arduino.

  • swRTC - A software RTC (Real-Time Clock) based on timers available for Arduino and several microcontrollers

  • Timer1 - Pwm, interrupt and stopwatch utilities for 16bit timer1.

  • eRCaGuy_Timer2_Counter - A generic Arduino micros()-equivalent timing function with 0.5us precision (rather than the 4us precision of the built-in micros() function). --This allows, as one example, a very precise reading of Radio-Control (RC) PPM and PWM signals, from an RC transmitter and receiver, respectively, using external interrupts, with*out* using the Atmega Timer1 which would disable use of the Servo library. Tested only on Arduinos with an Atmega328 microcontroller. As of March 2015, this library includes an example to read in PWM signals (or any type of pulses) on ANY pin and determine frequency, pulse width, etc. Pulses it can handle are in the 0~100kHz range.

  • Frequency Counter - using Timer1

  • MsTimer2 - library to use Timer2 on milliseconds.

  • FlexiTimer2 - library to use Timer2 with a configurable interval.

  • elapsedMillis - a library that makes it easy to check if a certain time has elapsed (without blocking other code from running in the mean time) and handles millis() rollover

  • Frequency generation using a hardware timer to drive a pin accurately or generate a periodic interrupt calling a function you supply.

  • Metro - Implementation of recurring timed events like blinking LEDs or servo motor control

  • TimedAction - a resource-friendly library for Timed Actions that occur every x millisecond.

  • SimpleTimer - simple library to launch timed actions.

  • StopWatchClass - measure elapsed time with this elementary StopWatch Class based upon millis()

  • Time - Software real time clock

  • Tween Class - for ramps (PWM fades, for instance)

  • Prescaler - easy get/set of the prescaler and alternative functions to millis() / delay()

  • DCF77 - library to use DCF77 radio signal to set internal clock to atomic time

  • dcf77 - noise resilient DCF77 library

  • SoftTimer in an easy to use, but very effective time sharing solution with some useful tools included. Like PWM, Debouncer, TonePlayer, Blinker.

  • TaskAction - a library for task actions over the time very easy.

  • ArduinoTimer - set of libraries which adds configurable and asynchronous timer support for Arduino (one library for each of the following: Timer1, Timer3, Timer4 and Timer5)

  • FreqPeriodCounter – Versatile frequency counter which measures frequency, period, pulse width etc. Can be used interrupt triggered or polled.

  • Stopwatch – Small and easy to use library for measuring interval times. Can also be used to measure the execution time of a piece of code

  • https://github.com/Byron-Watkins/Timer - Powerful interrupt-driven software timer library; timer timeout calls user function and passes a pointer to a user object. User can write his callback to manipulate the object and the object can control hardware and/or software states.

  • plc_standardlib - A collection of basic functions and function blocks normally used in plc programming. The collection includes different types of timers, counters, latches, edge-detection. It leans on to the functionality of the Standard.lib of CoDeSys v2 and IEC61131-3.

  • CountUpDownTimer - This is a simple H.M.S. count down timer. This does not replace the more precise RTC's.

  • PulsePattern Generate a repeating pulse pattern with Timer1

  • arduino-clockwork Whenever you need to precisely enforce the duration of your loop() function, you can call Clockwork.start() at the very beginning, and Clockwork.stop() at the very end of the loop. The loop duration will be automatically adapted. It uses a combination of millis() and micros() calls, and supports an emergency callback to be triggered whenever the task execution time (TET) becomes larger than the allocated loop time.

Graphing Data

Installing a library

Practically all of the above libraries can (should) be installed using the standard installation process:

Writing your own library

Share