{"id":16218894,"url":"https://github.com/arminjo/arduino-utils","last_synced_at":"2025-03-19T10:31:15.182Z","repository":{"id":53921869,"uuid":"236382553","full_name":"ArminJo/Arduino-Utils","owner":"ArminJo","description":"Utility collection for Arduino programming","archived":false,"fork":false,"pushed_at":"2024-11-26T07:26:18.000Z","size":4687,"stargazers_count":14,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-17T06:35:23.818Z","etag":null,"topics":["adc-utils","arduino","dumping","ema","ema-filters","hcsr04","lowpass","optiboot-bootloader","showinfo","sleep","tracing","utilities"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ArminJo.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-01-26T22:02:49.000Z","updated_at":"2025-03-01T00:18:24.000Z","dependencies_parsed_at":"2023-12-13T00:25:13.923Z","dependency_job_id":"6d0d72f4-0cc9-42e8-8b4e-a2fb4bbe5012","html_url":"https://github.com/ArminJo/Arduino-Utils","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArminJo%2FArduino-Utils","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArminJo%2FArduino-Utils/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArminJo%2FArduino-Utils/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ArminJo%2FArduino-Utils/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ArminJo","download_url":"https://codeload.github.com/ArminJo/Arduino-Utils/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244407836,"owners_count":20447854,"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":["adc-utils","arduino","dumping","ema","ema-filters","hcsr04","lowpass","optiboot-bootloader","showinfo","sleep","tracing","utilities"],"created_at":"2024-10-10T11:51:16.065Z","updated_at":"2025-03-19T10:31:14.631Z","avatar_url":"https://github.com/ArminJo.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align = center\u003e\n\n# [ArduinoUtils](https://github.com/ArminJo/Arduino-Utils)\nMy utility collection for Arduino\n\n[![Badge License: GPLv3](https://img.shields.io/badge/License-GPLv3-brightgreen.svg)](https://www.gnu.org/licenses/gpl-3.0)\n \u0026nbsp; \u0026nbsp;\n[![Badge Version](https://img.shields.io/github/v/release/ArminJo/Arduino-Utils?include_prereleases\u0026color=yellow\u0026logo=DocuSign\u0026logoColor=white)](https://github.com/ArminJo/Arduino-Utils/releases/latest)\n \u0026nbsp; \u0026nbsp;\n[![Badge Commits since latest](https://img.shields.io/github/commits-since/ArminJo/Arduino-Utils/latest?color=yellow)](https://github.com/ArminJo/Arduino-Utils/commits/master)\n \u0026nbsp; \u0026nbsp;\n[![Badge Build Status](https://github.com/ArminJo/Arduino-Utils/workflows/LibraryBuild/badge.svg)](https://github.com/ArminJo/Arduino-Utils/actions)\n \u0026nbsp; \u0026nbsp;\n![Badge Hit Counter](https://visitor-badge.laobi.icu/badge?page_id=ArminJo_Arduino-Utils)\n\u003cbr/\u003e\n\u003cbr/\u003e\n[![Stand With Ukraine](https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/main/badges/StandWithUkraine.svg)](https://stand-with-ukraine.pp.ua)\n\nNot yet available as Arduino library.\n\n[![Button Install](https://img.shields.io/badge/Install-brightgreen?logoColor=white\u0026logo=GitBook)](https://www.ardu-badge.com/Arduino-Utils)\n \u0026nbsp; \u0026nbsp;\n[![Button API](https://img.shields.io/badge/API-yellow?logoColor=white\u0026logo=OpenStreetMap)](https://arminjo.github.io/Arduino-Utils/classArduino-Utils.html)\n \u0026nbsp; \u0026nbsp;\n[![Button Changelog](https://img.shields.io/badge/Changelog-blue?logoColor=white\u0026logo=AzureArtifacts)](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#revision-history)\n\n\u003c/div\u003e\n\n#### If you find this library useful, please give it a star.\n\n\u0026#x1F30E; [Google Translate](https://translate.google.com/translate?sl=en\u0026u=https://github.com/ArminJo/Arduino-Utils)\n\n\u003cbr/\u003e\n\n# Table of content\n* [SimpleEMAFilters](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#simpleemafilters)\n* [ADCUtils](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#adcutils)\n* [HCSR04](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#hcsr04)\n* [MeasureVoltageAndResistance](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#measurevoltageandresistancehpp)\n* [BlinkLed](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#blinkled)\n* [ShowInfo](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#showinfo)\n* [HexDump](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#hexdump)\n* [AVRUtils](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#avrutils)\n* [MillisUtils](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#millisutils)\n* [DebugLevel](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#debuglevel)\n* [ATtinyUtils](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#attinyutils)\n* [AvrTracing](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#avrtracing)\n* [Utilities available as separate Arduino library](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#utilities-available-as-separate-arduino-library)\n  * [ATtinySerialOut](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#attinyserialout)\n  * [EasyButtonAtInt01](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#easybuttonatint01)\n  * [The very useful digitalWriteFast.h file based on the version from Watterott electronic.](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#the-very-useful-digitalwritefasth-file-based-on-the-version-from-watterott-electronic)\n* [Revision History](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#revision-history)\n* [CI](https://github.com/ArminJo/Arduino-Utils?tab=readme-ov-file#ci)\n\n# SimpleEMAFilters\nAn EMA (**Exponential Moving Average**) filter behaves like an RC lowpass filter with RC = SamplePeriod((1-alpha)/alpha) see [here](https://en.wikipedia.org/wiki/Low-pass_filter#Simple_infinite_impulse_response_filter).\u003cbr/\u003e\nAn EMA filter is implemented by e.g. the following statement:\n\n```c++\nint16_t sLowpass3;\nint16_t Lowpass5;\n...\nsLowpass3 += ((aInputValue - sLowpass3) + (1 \u003c\u003c 2)) \u003e\u003e 3; // 1.8 us, alpha = 0.125, cutoff frequency 22.7 Hz @1kHz\nsLowpass5 += ((aInputValue - sLowpass5) + (1 \u003c\u003c 4)) \u003e\u003e 5; // 2.5 us, alpha = 1/32 0.03125, cutoff frequency 5.13 Hz @1kHz\n```\nwhich takes **2.5 \u0026micro;s on a 16 MHz Arduino Uno**.\n\nThe alpha's for the implemented **ultra fast EMA filters** are 1/2, 1/4, 1/8, 1/16, 1/32 and 1/256 corresponding to the shift values of 1, 2, 3, 4, 5 and 8.\n\n### For a 1 kHz sampling rate (1/1000s sampling interval) we get the following equivalent cutoff (-3db) frequencies:\nSimplified formula for small alpha is CutoffFrequency = (SampleFrequency / (2\u0026pi; * ((1/alpha) - 1));\n- For alpha 1/2 (shift 1) -\u003e (160 Hz / 1)  With 1 = (1/alpha) - 1\n- 1/4 (shift 2) -\u003e 53 Hz (160 Hz / 3)  With 3 = (1/alpha) - 1\n- 1/8 -\u003e 22.7 Hz (160 Hz / 7)\n- 1/16 -\u003e 10.6 Hz (160 Hz / 15)\n- 1/32 -\u003e 5.13 Hz (160 Hz / 31)\n- 1/256 -\u003e 0.624 Hz (160 Hz / 255)\n\nUsing the [more exact formula](https://github.com/MakeMagazinDE/DigitaleFilter/blob/main/Filter-Berechnungen.xlsx), alpha = 1 - e ^ -((2\u0026pi; * CutoffFrequency) / SampleFrequency)  \n=\u003e CutoffFrequency = (-ln(1-alpha) * SampleFrequency) / 2\u0026pi; we get the values:\n- 110 Hz\n- 46 Hz\n- 21.2 Hz\n- 10.3 Hz\n- 5.05 Hz\n\nThe **maximum output value for integer filters** is: InputValue - ((1 \u003c\u003c (ShiftValue -1)) -1), i.e **85 for InputValue 100 and ShiftValue 5** (Lowpass5).\n\n### The [SimpleEMAFilters.hpp](https://github.com/ArminJo/Arduino-Utils/blob/master/src/SimpleEMAFilters.hpp#L66) contains:\n- A set of **ultrafast** EMA (Exponential Moving Average) filters which require only **1 to 2 microseconds**.\n- 3 highpass and bandpass filters, generated by just subtracting one lowpass from input (highpass) or from another lowpass (bandpass).\n- 16 and 32 bit Biquad filters.\n- Display routines for Arduino Plotter.\n\nAll implemented filters are applied at once to the input test signal calling `doFiltersStep(int16_t aInput)` and the results can in turn easily be displayed in the Arduino Plotter.\n\n### Plotter outputs representing e.g. a 42, 21, 10.5, 5.2 Hz square / sine wave at a sample rate of 1 ms (or 84, 42 ... Hz at a sample rate of 0.5 ms and so on)\n\nArduino Plotter output for a rectangle input signal with a amplitude of +/- 100. E.g. LowP3 is the Lowpass with alpha 1/8 implemented by `\u003e\u003e 3` and the cutoff frequency of 21 Hz.\n![ArduinoPlotter output SignificantFilters](pictures/SignificantFilters.png)\n\nNote the following facts:\n- Highpass is always Input - Lowpass.\n- Therefore highpass -here HighP3_16- can have an overshoot of 100%.\n- The output of DoubleLowpass3 and 4 is more and more resembling a delayed sine.\n- The output of LowP5_32 and DoubleLowP4_16 have almost the same amplitude but DoubleLowP4_16 is way more resembling a (delayed) sine.\n- The output of TripleLowP3_16 has a higher amplitude than DoubleLowP4_16 with both looking quite like a (delayed) sine.\n\n\u003cbr/\u003e\n\nArduino Plotter output for a rectangle input signal with very low amplitude of +/- 20 where you see clipping effects due to the limited resolution of the used 16 bit math.\n![ArduinoPlotter output LowPass_LowInput](pictures/LowPass_LowInput.png)\nThe Lowpass3_int32 and Lowpass5_int32 are 32 bit fixed point implementations for higher resolution which requires **4.2 \u0026micro;s instead of the 1.8 / 2.5 \u0026micro;s of 16 bit**.\n\u003cbr/\u003e\n\nArduino Plotter output for a sine input signal with a amplitude of +/- 100.\n![ArduinoPlotter output for LowPass with sine input](pictures/SignificantFilters_Sine.png)\nNote the **different attenuations** at different frequencies.\n\u003cbr/\u003e\u003cbr/\u003e\n\nArduino Plotter output for a triangle input signal with a amplitude of +/- 100.\n![ArduinoPlotter output triangle input](pictures/SignificantFilters_Triangle.png)\nNote that higher order filters and low pass with high shifts are almost a perfect sine.\n\nArduino Plotter output for a sawtooth input signal with a amplitude of +/- 100.\n![ArduinoPlotter output for sawtooth input](pictures/SignificantFilters_Sawtooth.png)\n\nArduino Plotter output for a random input signal with a amplitude of +/- 100.\n![ArduinoPlotter output for lowpass on random input](pictures/LowPass1_3_5_8_Random.png)\n\n\u003cbr/\u003e\n\n### Arduino Plotter output for a rectangle input signal with 4 different frequencies 42 Hz \u003e 21 Hz \u003e 10.5 Hz \u003e 5.2 Hz\nClick on the pictures to enlarge them.\n\n| All lowpass filters. | Highpass filters.\u003cbr/\u003eGenerated by subtracting lowpass from input. |\n| :-: | :-: |\n| ![AllLowPass](pictures/AllLowPass.png) | ![HighPassFilters](pictures/HighPassFilters.png) |\n| Bandpass and reject filters.\u003cbr/\u003eBandpass is generated by subtracting one lowpass from onother with different shift value.\u003cbr/\u003eReject filter is input minus bandpass.| High order Lowpass. |\n| ![BandPassAndReject](pictures/BandPassAndReject.png) | ![HighOrderLowPass](pictures/HighOrderLowPass.png) |\n| LowPass1, 3, 5 and 8.\u003cbr/\u003eLowpass8 behave like a integrator here, resulting in a triangle output. | LowPass3, 5 and 8.\u003cbr/\u003eComparison of different implementations with 16 bit integer, 32 bit integer and 32 bit float. |\n| ![LowPass1_3_5_8](pictures/LowPass1_3_5_8.png) | ![LowPass16And32Bit](pictures/LowPass16And32Bit.png) |\n| BiQuad filters with damping factor = 0.\u003cbr/\u003eYou see the overshoot. |  |\n| ![BiQuadFilters](pictures/BiQuadFilters.png) |  |\n\n\nThe floating point implementation of the 1/32 EMA filter takes **24 to 34 \u0026micro;s**.\u003cbr/\u003e\nThere are convenience functions implemented for EMA filter, but normally it is better to implement it inline by e.g.\n\n```c++\nint16_t Lowpass3;\nint16_t Lowpass5;\nint32_t Lowpass5_int32;\n..\nLowpass3 += ((InputValue - Lowpass3) + (1 \u003c\u003c 2)) \u003e\u003e 3; // 1.8 us, alpha = 0.125, cutoff frequency 22.7 Hz @1kHz\nLowpass5 += ((InputValue - Lowpass5) + (1 \u003c\u003c 4)) \u003e\u003e 5; // 2.5 us, alpha = 1/32 0.03125, cutoff frequency 5.13 Hz @1kHz\nLowpass5_int32 += ((((int32_t) InputValue) \u003c\u003c 8) - Lowpass5_int32) \u003e\u003e 5; // Fixed point 4.2 us, value is Lowpass5_int32 \u003e\u003e 8\nLowpass8_int32 += ((((int32_t) InputValue) \u003c\u003c 16) - Lowpass8_int32) \u003e\u003e 8; // Fixed point 2.0 us because of fast shift, value is Lowpass8_int32 \u003e\u003e 16\n```\n\n**!Attention!** The 16 bit implementations are limited to a **maximum input value of +/- 16383** for rectangular input (which is the worst input case). The reason is, that the term `InputValue - Lowpass3` must always fit into a 16 bit signed integer.\n\n### Related Links\n- https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average\n- https://www.dsprelated.com/blogimages/RickLyons/Exponential_Averaging_FIGURE2.gif\n- https://www.norwegiancreations.com/2015/10/tutorial-potentiometers-with-arduino-and-filtering/\n- https://www.norwegiancreations.com/2016/08/double-exponential-moving-average-filter-speeding-up-the-ema/\n- https://www.norwegiancreations.com/2016/03/arduino-tutorial-simple-high-pass-band-pass-and-band-stop-filtering/\n- https://arduinokickstompdrum.wordpress.com/2021/05/14/simple-filtering/\n- https://github.com/popcornell/Arduino-Multiplierless-EMA-filter\n- https://github.com/MakeMagazinDE/DigitaleFilter\n\n# ADCUtils\nFast and flexible ADC conversions. **Intelligent handling of delays for reference and channel switching**.\n- Functions for easy **oversampling**.\n- Function for easy getting the maximum value of measurements.\n- Functions for getting **temperature and VCC voltage**.  For VCC, resolution is 20 millivolt!\n- Functions to check if voltage is too low for a given period, used especially for Li-ion batteries supply.\n\n# HCSR04\n- Blocking and **non-blocking** reading of HCSR04 US Sensors with timeouts and exact conversions.\n- Supports also **1 Pin mode** available with the HY-SRF05 or Parallax PING modules.\n\n### You can modify the HCSR04 modules to 1 Pin mode:\n1. Old module with 3 16 pin chips:\u003cbr/\u003e\n   Connect Trigger and Echo direct or use a resistor \u003c 4.7 k\u0026ohm;.\n   If you remove both 10 k\u0026ohm; pullup resistor you can use a connecting resistor \u003c 47 k\u0026ohm;, but I suggest to use 10 k\u0026ohm; which is more reliable.\n2. Old module with 3 16 pin chips but with no pullup resistors near the connector row:\u003cbr/\u003e\n   Connect Trigger and Echo with a resistor \u003e 200 \u0026ohm;. Use 10 k\u0026ohm;.\n3. New module with 1 16 pin and 2 8 pin chips:\u003cbr/\u003e\n   Connect Trigger and Echo by a resistor \u003e 200 \u0026ohm; and \u003c 22 k\u0026ohm;.\n4. All modules:\u003cbr/\u003e\n   Connect Trigger and Echo by a resistor of 4.7 k\u0026ohm;.\n\n# MeasureVoltageAndResistance\nMeasures voltage and resistance with **1 mV and 2 \u0026ohm; resolution** at the lower end.\u003cbr/\u003e\nFirst voltage is measured. If voltage is zero, then the unknown resistance to ground is measured using the 5 volt (VCC) supply with internal/series resistance of 10 k\u0026ohm; or 100 k\u0026ohm;.\n\n### Fritzing board\n![Fritzing board](extras/VoltAndOhmmeter_Steckplatine.png)\n### Fritzing schematics\n![Fritzing schematics](extras/VoltAndOhmmeter_Schaltplan.png)\n\n# BlinkLed\n- Class for blinking one ore more LED's in different fashions.\n\n# ShowInfo\n- Serial.print display of timer and other peripheral and system registers (to be extended :-)).\n\n# HexDump\n- Creates hex memory dumps on serial output.\n\n```\n0x0000:  0xFF 0x81 0x82 0x00 0x08 0x02 0x00 0x27 0xFF 0xFF 0x0E 0xB3 0x81 0xFC 0x9B 0x47   .. .. '  .....G\n0x0010:  0x00 0x00 0x00 0x00 0x20 0x65 0x00 0x0F 0xBE 0xEB 0x9B 0x98 0x2C 0xF1 0x08 0x2C       e .....,..,\n0x0020:  0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55 0x55  UUUUUUUUUUUUUUUU\n```\n\n# AVRUtils\n- Sleep and delay/sleep with watchdog functions.\n- Computation and display of available Ram, Heap / Stack memory.\n- Display of watchdog reset reason in AVRUtilsDemo, which currently (3/2024) only works with [optiboot 8.1 bootloader](https://github.com/ArminJo/Arduino-Utils/tree/main/Optiboot_8_1).\n\nRAM starts of variables initialized with values != 0, followed by variables initialized with 0 and variables not initialized by using attribute `__attribute__((section(\".noinit\")))`. It ends with the heap and the stack.\n\n#### Sample output if stack runs into data\n```\nSize of Data + BSS, Heap start, Stack end=2041\nStack used 20 of 7\nCurrently available Heap=0\n```\n# Optiboot 8.1\nThe [optiboot 8.1 bootloader](https://github.com/ArminJo/Arduino-Utils/tree/main/Optiboot_8_1) is required to determine the (watchdog) reset reason e.g. used in AVRUtilsDemo..\n\n# MillisUtils\nUnifies millis() timer handling for Digispark, AttinyCore and Arduino cores.\n- Start, stop and modify milliseconds timer and value.\n- Functions to compensate `millis()` after long running tasks in `noIterrupt()` context like NeoPixel output, ADC buffer reading etc.\n- Blocking delayMilliseconds() function for use in noInterrupts context like ISR.\n\n# DebugLevel.h\n- Propagating debug levels for development. Supports level `TRACE, DEBUG, INFO, WARN and ERROR`.\n- **Includes an explanation of semantics of these levels**.\n\n# ATtinyUtils\n- `toneWithTimer1PWM()`.\n- `noToneWithTimer1PWM()`.\n- `isBODSFlagExistent()` -\u003e checking for ATtiny85 revision C.\n- fuse reading function.\n- `changeDigisparkClock()` to use Digispark boards with no Digispark core like e.g. ATTinyCore by [Spence Konde](https://github.com/SpenceKonde/ATTinyCore).\nIt changes Digispark Bootloader clock settings to get the right CPU frequency and resets Digispark OCCAL tweak.\nConsider to use new [optimized Digispark core](https://github.com/ArminJo/DigistumpArduino) instead.\n\n# AvrTracing\n**Tracing an Arduino program** by printing each program counter value after executing one instruction.\n\n# Utilities available as separate Arduino library\n\n## [ATtinySerialOut](https://github.com/ArminJo/ATtinySerialOut/src)\nMinimal bit-bang send serial\n- 115200 baud for 1/8/16 MHz ATtiny clock.\nThe utility for serial output for ATtinies is contained in the [ATtinySerialOut library](https://github.com/ArminJo/ATtinySerialOut)\navailable as an Arduino library.\n\n## [EasyButtonAtInt01](https://github.com/ArminJo/EasyButtonAtInt01/src)\n- Arduino library for handling push buttons just connected between ground and INT0 and / or INT1 pin.\n- No external pullup, **no polling needed**.\nThe utility for easy button handling for ATmegas or ATtinies is contained in the [EasyButtonAtInt01 library](https://github.com/ArminJo/EasyButtonAtInt01)\navailable as an Arduino library.\n\n## The very useful *[digitalWriteFast.h file](https://github.com/ArminJo/Arduino-Utils/blob/master/src/digitalWriteFast.h)* based on the version from [Watterott electronic](https://github.com/watterott/Arduino-Libs).\n\n### Changing include (*.h) files with Arduino IDE\nFirst, use *Sketch \u003e Show Sketch Folder (Ctrl+K)*.\u003cbr/\u003e\nIf you have not yet saved the example as your own sketch, then you are instantly in the right library folder.\u003cbr/\u003e\nOtherwise you have to navigate to the parallel `libraries` folder and select the library you want to access.\u003cbr/\u003e\nIn both cases the library source and include files are located in the libraries `src` directory.\u003cbr/\u003e\nThe modification must be renewed for each new library version!\n\n### Modifying compile options with Sloeber IDE\nIf you are using [Sloeber](https://eclipse.baeyens.it) as your IDE, you can easily define global symbols with *Properties \u003e Arduino \u003e CompileOptions*.\u003cbr/\u003e\n![Sloeber settings](https://github.com/ArminJo/ServoEasing/blob/master/pictures/SloeberDefineSymbols.png)\n\n# Revision History\n\n### Version 1.2.0\n- Updated AVRUtils, ADCUtils, HexDump and ShowInfo.\n- Added Optiboot 8.1.\n\n### Version 1.1.0\n- SimpleEMAFilters: Added \"State Variable\" / Biquad and double and triple Lowpass filters.\n- ADCUtils: Renamed `*VoltageCheck*()` to `*VCCCheck*()`, `setADCMultiplexerAndReferenceForNextConversion()` to `setADCChannelAndReferenceForNextConversion()` and changed signature of `readUntil4ConsecutiveValuesAreEqual()`.\n- Renamed getTemperature* to getCPUTemperature*.\n- Miscellaneous renamings and improvements.\n- Added `float` to LongUnion.\n- Added `printRAMInfo()` in AVRUtils.\n- Fixed bug in HexDump.\n- Documentation.\n\n### Version 1.0.0\n- Added unions.\n- Changed distance return value for overflow to 0.\n- Miscellaneous improvements.\n\n### Version 0.8.0\n- Initial version\n\n# CI\nThe library examples are tested with GitHub Actions for the following boards:\n\n- Arduino Uno\n- Arduino Leonardo\n- Digispark (using ATTiny85 @1MHz)\n- Generic ATTiny85 @1MHz\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farminjo%2Farduino-utils","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Farminjo%2Farduino-utils","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Farminjo%2Farduino-utils/lists"}