Arduino Playground is read-only starting December 31st, 2018. For more info please look at this Forum Post

Snippets and Sketches

A collection of contributed code snippets and sketches. You can add your own code here. For contributed Libraries see the LibraryList page here.

Navigation

AVR Related

Ethernet Shield

WiFi

Clocks

  • DCF77 Clock - a binary DCF77 clock with good noise tolerance.
  • The Clock - a DCF77 clock with extraordinary noise tolerance.
  • Code.NTPclient - Low-memory footprint, scheduler-friendly NTP client
  • Code.webclient - Low-memory footprint, scheduler-friendly web time client

Concurrency, Timing & Schedulers

  • heartbeat sketch - use an array to create an irregular blink pattern
  • Stopwatch Sketch: doing multiple things at the same time.
  • A Delay Sketch: An easy to use "blink without delay" style sketch written to be used with the ease of "delay()".
  • How to write reliable repeating and one off timers: Delays and Timers that don't use delay(). Also includes a detailed discussion about why delay replacements need to coded the way they are. Presents the millisDelay library that handles the logic for you. Lets you start, stop and repeat delays and timers.
  • Multi Blink: Demonstrates a table driven approach to concurrency by blinking lots of LEDs at different speeds. The technique is extensible to many other situations.
  • Timer/Interrupt Scheduler: Shows how to create a basic task scheduler using timers and interrupts.
  • Simple Timer This is a simple way to execute functions at different intervals.
  • Object Timeslicer: Uses object-oriented coding to create a network of encapsulated objects, each of which is given a time slice by loop(). The demo does some blink without delay, controlled by an analog input.
  • Task Scheduler - by DL1DUZ: yet another simple Task Scheduler which does not use any extra timer (It can handle all types of tasks that are of practical interest, which are cyclical, single, conditional repetitive (repeat task only if ...) or non-linear (1st run -> repeat after 10s, 2nd run -> repeat after 25s, ...))
  • SmartDelay - by nw-wind: A simple delay() replacement class which can allow non-blocking delays, pseudo-parallel execution etc. It is an arduino library, so just include & use.
  • ZsuTT 2.5: This code provides the functionality of a remotely managed timer switch (Zeitschaltuhr) that can be set to switch on and off at time intervals occurring daily, hourly, or repeating every minute. This code is known to work with the Arduino UNO WiFi. As written it controls pins 4, 5, 6, 7 and is thus suitable for use with Seeedstudio's Relay Shield v3.0. It provides status and log information via MQTT.

Input / Output

Storage

  • EEPROM Load and Save - A sketch to Load and Save settings from/to the EEPROM
  • EEPROM Wear Leveling An example for extending EEPROM endurance by wear leveling
  • EEPROMutility - EEPROM management via the serial monitor. Allows reading and writing of any data type and testing.

Communication

General

String Functions

  • FindText: A simple function to search for some text within a string.
  • tempToAscii - Convert a float to ASCII string with 3 decimal places
  • printf() simple shell around vsnprintf() letting you use send printf style format strings over serial.
  • findStrLen: a simple function to determine the length of any string by incrementing an index and moving down the string until the null terminator ("0", or "0x00"), is found.
  • utf8ascii: a string conversion function for remapping utf8-encoding to extended ASCII characters. Necessary to show special characters on the serial display
  • Parsing an HTTP request Using the in-place method.

Math

  • Prime number generation sketch
  • smooth(data, filterVal, smoothedVal) - a low-pass filter smoothing function, useful for removing sensor jitter
    • digitalSmooth(data, smoothArrayName) - a digital low-pass filter smoothing function, useful for removing sensor jitter, and glitches
  • autoscale(int originalMin, int originalMax, int newBegin, int newEnd, int inputValue) - scale a variable between two ranges using linear interpolation
  • fscale(float originalMin, float originalMax, float newBegin, float newEnd, float inputValue, float curve) - a function to map a variable between two floating point ranges. Can logarithmically favor either end of the output range.
  • smoothstep - a function to ease from one value to the next with a smooth "s" shaped logarithmic curve.
    • nonlinear mapping - reMap() allows to adapt a nonlinear function with line segments.
    • multiMap - multiMap() allows to adapt functions with interpolation - similar as reMap() above - but this one is 100% integer to improve speed, and a bit more hardened.
  • Random Card Draw - Example sketch that demonstrates how to select a number in a range in a random order, where all numbers in the range appear once. Kind of like drawing a card from a shuffled deck.
  • randomHat() - choose every number from a "hat" before repeating
  • A true random seed value - Example sketch that demonstrates how to seed the libraries pseudo-random number generator with a different random value every time the sketch runs. Very 'lightweight' technique.
  • randomWalk(stepSize) - wander between endpoints at a specified rate
  • freqout(freq, duration) - a simple frequency generator
  • Musical Algo Fun - Sketch for making music with old PC speakers
  • Measuring frequency with Arduino - A small and simple code snippet for 0 - 100 kHz range
  • FFT tutorial: Learn how to implement Fast Fourier Transform in Arduino
  • FIR filters tutorial: Learn how to implement FIR (Finite Impulse Response) filters in Arduino
  • PID tutorial: learn how to use PID for temperature control
  • Intersection of circles by the law of cosines. A common problem when triangulating distances.
  • Logistical Curve soft motion Using the logistical function to produce a soft start and end for a servo's motion.

Performance Snippets

Games