# SAADC advanced blocking example overview {#saadc_advanced_blocking}

The sample demonstrates an advanced functionality of the nrfx_saadc driver operating in the blocking mode.

## Requirements

The sample supports the following development kits:

| **Board**           | **Support** |
|---------------------|:-----------:|
| nrf52dk_nrf52832    |     Yes     |
| nrf52833dk_nrf52833 |     Yes     |
| nrf52840dk_nrf52840 |     Yes     |
| nrf5340dk_nrf5340   |     Yes     |
| nrf9160dk_nrf9160   |     Yes     |

## Overview

Application initializes the nrfx_saadc driver and starts operating in the blocking mode.
Program works as a simple state machine and starts in state @p m_current_state == STATE_SINGLE_CONFIG.
In this state the following configurations apply:
- STATE_SINGLE_CONFIG - SAADC driver is configured to work with only one channel ( @p m_single_channel ) in the blocking mode.
  Afterward, @p m_current_state changes to STATE_SINGLE_SAMPLING.
- STATE_SINGLE_SAMPLING - sampling on a single channel ( @p m_single_channel ) is performed a specified number of times ( @p SAMPLING_ITERATIONS ), and then @p m_current_state changes to STATE_MULTIPLE_CONFIG.
- STATE_MULTIPLE_CONFIG - SAADC driver is configured to work with multiple channels ( @p m_multiple_channels ) in the blocking mode.
  Afterward, @p m_current_state changes to STATE_MULTIPLE_SAMPLING.
- STATE_MULTIPLE_SAMPLING - sampling on multiple channels ( @p m_multiple_channels ) is performed specified number of times ( @p SAMPLING_ITERATIONS ).

Before every sampling a calibration in the blocking manner is performed. Sampling is then invoked
by the @p nrfx_saadc_mode_trigger() function.

In the sample there are GPIOTE tasks configured to toggle the specified ( @p m_out_pins ) loopback pins. Those tasks are triggered between successive samplings to verify the functionality of the SAADC on the nonconstant analog signal.

> For more information, see **SAADC driver - nrfx documentation**.

## Wiring

To run the sample correctly, connect pins as follows:
* `LOOPBACK_PIN_1A` with `LOOPBACK_PIN_1B`.

## Building and running

To run this sample, build it for the appropriate board and then flash it as per instructions in [Building and running](@ref building_and_running) section.

## Sample output

You should see the following output:

```
- "Starting nrfx_saadc advanced blocking example."
- "Calibration in the blocking manner finished successfully."
- "Sampling 1 / 5"
- ".Sample 0. value == ([0-9]{3})"
- ".Sample 1. value == ([0-9]{3})"
- "Calibration in the blocking manner finished successfully."
- "Sampling 2 / 5"
- ".Sample 0. value == -?[0-9]"
- ".Sample 1. value == -?[0-9]"
- "Calibration in the blocking manner finished successfully."
- "Sampling 3 / 5"
- ".Sample 0. value == ([0-9]{3})"
- ".Sample 1. value == ([0-9]{3})"
- "Calibration in the blocking manner finished successfully."
- "Sampling 4 / 5"
- ".Sample 0. value == -?[0-9]"
- ".Sample 1. value == -?[0-9]"
- "Calibration in the blocking manner finished successfully."
- "Sampling 5 / 5"
- ".Sample 0. value == ([0-9]{3})"
- ".Sample 1. value == ([0-9]{3})"
```
