30 min

Capture, track, and manage information with ease using LV3296 and PIC32MZ1024EFH064

Streamline inventory management with precision

Barcode Click with PIC32MZ clicker

Published Oct 02, 2023

Click board™

Barcode Click

Development board

PIC32MZ clicker


NECTO Studio



The purpose of this scanner is to enhance retail efficiency by quickly and accurately capturing product information



Hardware Overview

How does it work?

Barcode Click is based on the LV3296 from Rakinda. This is the advanced barcode scanner/reader module which features the patented UIMG®, a computerized image recognition system technology that supports all mainstream 1D and standard 2D barcode types (for example - PDF417, QR Code M1/M2/Micro and Data Matrix) as well as GS1-DataBar™(RSS) (Limited/Stacked/Expanded versions). It can read barcodes on virtually any medium, including paper, plastic, mobile phones, LCD displays, etc. Thanks to the used area-imaging and UIMG® technologies, the device is able to scan barcodes rotated to any angle, with great speed and precision. The LV3296 scanner module uses a flat cable to connect to the click board™, via the ZIF FPC connector on the back side of the PCB. This flat cable carries all the signals used in communication between the LV3296 module and the host MCU, such as the RX, TX, buzzer, USB, interrupt, reset, and scanning trigger lines. The communication with Barcode click is done by utilizing two types of connection it offers - UART (TTL232) and USB. When the click board™ is placed into the mikroBUS™ socket, it will be able to exchange data with the UART module of the

MCU, via the standard mikroBUS™ RX and TX pins. When the USB cable is connected to the micro USB port on the click board itself, it can be identified either as the virtual USB port, a HID keyboard device or an HID POS device. HID devices do not require any special PC drivers, while the virtual USB device does. Many options and parameters of the Barcode click are configurable. Barcode click configuration is very easy and intuitive - it is enough to read special configuration messages, encoded into barcodes that can be found in the LV3296 user's guide. It is not even necessary to print them on paper - it is enough to show them on screen and scan them from there. Enter Setup message should be scanned first, followed by the desired configuration message. After successful configuration indicated by a short beep sound, the Exit Setup message should be scanned. The device features a very extensive set of encoded configuration commands, which include storing and recal of user default values, along with the factory defaults. When the Barcode device is first powered up, it will sound a greeting message, which indicates the successful initialization. The device is now ready to scan. Pressing the onboard TRIG button or pulling the

PWM pin of the  mikroBUS™ slot to a LOW logic level for at least 10ms, will trigger the barcode scan. It will turn on two LEDs and project a circle shaped aiming pattern on the surface it is aimed at, scanning it for a valid barcode. Both LEDs and the aiming pattern can be turned off in the configuration. A short beep sound and a blink of the Good Read indication onboard LED (GR) will indicate a successful barcode decoding and after releasing the TRIG line (configurable), the device will send the decoded information to the selected interface. Barcode click can report errors, with a distinctive error message sound - e.g. when the device is configured to use onboard micro USB, but it is not connected to the host USB device, it will sound an error if scanning is attempted. The RST button is used to reset the device. Pressing the RST button or pulling the RST line, routed to the mikroBUS™ RST pin to a LOW logic level for 100us to 500us will cause a device reset, followed by the greeting message sound. It should be noted that the device should not be reset too frequently; at least 2 seconds delay should exist between the reset cycles.

Barcode Click hardware overview image

Features overview

Development board

PIC32MZ Clicker is a compact starter development board that brings the flexibility of add-on Click boards™ to your favorite microcontroller, making it a perfect starter kit for implementing your ideas. It comes with an onboard 32-bit PIC32MZ microcontroller with FPU from Microchip, a USB connector, LED indicators, buttons, a mikroProg connector, and a header for interfacing with external electronics. Thanks to its compact design with clear and easy-recognizable silkscreen markings, it provides a fluid and immersive working experience, allowing access anywhere and under

any circumstances. Each part of the PIC32MZ Clicker development kit contains the components necessary for the most efficient operation of the same board. In addition to the possibility of choosing the PIC32MZ Clicker programming method, using USB HID mikroBootloader, or through an external mikroProg connector for PIC, dsPIC, or PIC32 programmer, the Clicker board also includes a clean and regulated power supply module for the development kit. The USB Micro-B connection can provide up to 500mA of current, which is more than enough to operate all onboard

and additional modules. All communication methods that mikroBUS™ itself supports are on this board, including the well-established mikroBUS™ socket, reset button, and several buttons and LED indicators. PIC32MZ Clicker is an integral part of the Mikroe ecosystem, allowing you to create a new application in minutes. Natively supported by Mikroe software tools, it covers many aspects of prototyping thanks to a considerable number of different Click boards™ (over a thousand boards), the number of which is growing every day.

PIC32MZ clicker double side image

Microcontroller Overview

MCU Card / MCU




MCU Memory (KB)


Silicon Vendor


Pin count


RAM (Bytes)


Used MCU Pins

mikroBUS™ mapper

Power Supply
Scanning Trigger

Take a closer look


Barcode Click Schematic schematic

Step by step

Project assembly

PIC32MZ clicker front image hardware assembly

Start by selecting your development board and Click board™. Begin with the PIC32MZ clicker as your development board.

PIC32MZ clicker front image hardware assembly
Thermo 26 Click front image hardware assembly
Prog-cut hardware assembly
Micro B Connector clicker - upright/background hardware assembly
Necto image step 2 hardware assembly
Necto image step 3 hardware assembly
Necto image step 4 hardware assembly
Necto image step 5 hardware assembly
Necto image step 6 hardware assembly
Flip&Click PIC32MZ MCU step hardware assembly
Necto No Display image step 8 hardware assembly
Necto image step 9 hardware assembly
Necto image step 10 hardware assembly
Debug Image Necto Step hardware assembly

Track your results in real time

Application Output

After loading the code example, pressing the "DEBUG" button builds and programs it on the selected setup.

Application Output Step 1

After programming is completed, a header with buttons for various actions available in the IDE appears. By clicking the green "PLAY "button, we start reading the results achieved with Click board™.

Application Output Step 3

Upon completion of programming, the Application Output tab is automatically opened, where the achieved result can be read. In case of an inability to perform the Debug function, check if a proper connection between the MCU used by the setup and the CODEGRIP programmer has been established. A detailed explanation of the CODEGRIP-board connection can be found in the CODEGRIP User Manual. Please find it in the RESOURCES section.

Application Output Step 4

Software Support

Library Description

This library contains API for Barcode Click driver.

Key functions:

  • barcode_enable_scaning - Set PWM pin state

  • barcode_generic_read - Generic read function.

Open Source

Code example

This example can be found in NECTO Studio. Feel free to download the code, or you can copy the code below.

 * \file 
 * \brief Barcode Click example
 * # Description
 * This example reads and processes data from Barcode clicks.
 * The demo application is composed of two sections :
 * ## Application Init 
 * Initializes driver.
 * ## Application Task  
 * Reads the received data.
 * ## Additional Function
 * - barcode_process( ) - The general process of collecting presponce 
 *                                   that sends a module.
 * \author Nemanja Medakovic
// ------------------------------------------------------------------- INCLUDES

#include "board.h"
#include "log.h"
#include "barcode.h"
#include "string.h"

#define PROCESS_COUNTER 2000

// ------------------------------------------------------------------ VARIABLES

static barcode_t barcode;
static log_t logger;

// ------------------------------------------------------- ADDITIONAL FUNCTIONS

static void barcode_process ( void )
    uint16_t rsp_size;
    uint16_t rsp_cnt = 0;

    char uart_rx_buffer[ PROCESS_RX_BUFFER_SIZE ] = { 0 };
    uint16_t check_buf_cnt;
    uint16_t process_cnt = PROCESS_COUNTER;

    while( process_cnt > 0 )
        rsp_size = barcode_generic_read( &barcode, &uart_rx_buffer, PROCESS_RX_BUFFER_SIZE );

        if ( rsp_size > 0 )
            // Validation of the received data
            for ( check_buf_cnt = 0; check_buf_cnt < rsp_size; check_buf_cnt++ )
                if ( uart_rx_buffer[ check_buf_cnt ] == 0 ) 
                    uart_rx_buffer[ check_buf_cnt ] = 13;

            log_printf( &logger, "%s", uart_rx_buffer );

            // Clear RX buffer
            memset( uart_rx_buffer, 0, PROCESS_RX_BUFFER_SIZE );

            // Process delay 
            Delay_ms( 1 );

// ------------------------------------------------------ APPLICATION FUNCTIONS

void application_init ( void )
    log_cfg_t log_cfg;
    barcode_cfg_t cfg;

     * Logger initialization.
     * Default baud rate: 115200
     * Default log level: LOG_LEVEL_DEBUG
     * @note If USB_UART_RX and USB_UART_TX 
     * are defined as HAL_PIN_NC, you will 
     * need to define them manually for log to work. 
     * See @b LOG_MAP_USB_UART macro definition for detailed explanation.
    LOG_MAP_USB_UART( log_cfg );
    log_init( &logger, &log_cfg );
    log_info( &logger, "--->  BarCode Click Init  <---" );

    //  Click initialization.

    barcode_cfg_setup( &cfg );
    barcode_init( &barcode, &cfg );

    Delay_ms( 500 );

void application_task ( void )
    barcode_enable_scaning( &barcode, BARCODE_LOGIC_ON );
    barcode_process( );
    barcode_enable_scaning( &barcode, BARCODE_LOGIC_OFF );
    Delay_ms( 2000 );

void main ( void )
    application_init( );

    for ( ; ; )
        application_task( );

// ------------------------------------------------------------------------ END

Additional Support