This tutorial will present how to read analog input values using the 'ard' library.

Some pins have the ability to functions as 'analog inputs' - they can be used to read any analog voltage level (comprised between 0V and VCC which is 3.3V on the ioNode).

Note: providing voltages higher than VCC (3.3V on ioNode) may damage the pins! Remember to use voltage dividers or other mechanisms to constrain the voltage before hooking something to your analog inputs.

How to use

First, we need to add the 'ard' library to our dependencies in dfe.conf:

name: example_app
type: app
mmcu: atmega1284p
freq: 10000000
  - ard


Before we can read values, we need to initialize the library. If we're using the substrate, this is as trivial as adding the following to our 'substrate' file:

# Use Analog Read
uses :ard

If, however, we want to do this without substrate, we can do it manually from our C code:

#include <ard/ard.h>

void main()
    // Initialize Analog Read Subsystem

    // ...

Reading a value

Once the library is initialized (whether through substrate or manually from the C code), we can start reading analog values by passing a pin number to the 'ard()' function, which will return an 8-bit value representing the voltage level being applied on the pin.

#include <dio/dio.h>

void main()
    uint8_t v;

    // ...

    // Read Analog Value on pin 7
    v = ard(7);

    // ...