Main Content

Write the Hardware-Specific C/C++ Code

In most cases, to integrate device driver code into a Simulink® block, you need to write a wrapper function around the API provided by the hardware vendor. Follow these steps to develop the C/C++ code required to implement digital read and write functionality:

  1. Create a new empty file in the MATLAB® Editor.

  2. Copy the following C++ code into the file.

    #include <Arduino.h>
    #include "digitalio_arduino.h" 
    extern "C" void digitalIOSetup(uint8_T pin, boolean_T mode)
       // mode = 0: Input 
       // mode = 1: Output
       if (mode) { 
          pinMode(pin, OUTPUT); 
          pinMode(pin, INPUT); 
    // Write a logic value to pin
    extern "C" void writeDigitalPin(uint8_T pin, boolean_T val) 
       digitalWrite(pin, val); 
    // Read a logic value from pin
    extern "C" boolean_T readDigitalPin(uint8_T pin) 
       return digitalRead(pin); 

    This code wraps the Arduino® C++ API to write to a digital I/O pin on the Arduino hardware board.


    Although the C++ code shown here is specific to the Arduino hardware, the same principle can be extended to any hardware-specific C/C++ API.

  3. Save the file as digitalio_arduino.cpp into the source folder, src.

  4. Create an empty header file and copy the following C++ code into the file.

    #include "rtwtypes.h"
    #ifdef __cplusplus
    extern "C" {
    void digitalIOSetup(uint8_T pin, boolean_T mode);
    void writeDigitalPin(uint8_T pin, boolean_T val);
    boolean_T readDigitalPin(uint8_T pin);
    #ifdef __cplusplus
    #endif //_DIGITALIO_ARDUINO_H_
  5. Save the file as digitalio_arduino.h into the include folder.

    This header file defines the C prototypes of the functions implemented in the C++ file, digitalio_arduino.cpp.

Many hardware devices either do not support or recommend using C++ compilers. For example, the Simulink Support Package for Arduino Hardware uses a C compiler called avr-gcc. To compile and link C++ functions with a C compiler, you need to add the extern "C" identifier in each function declaration. This identifier tells the compiler not to mangle function names so that they can be used with the C linker.

The digitalio_arduino.cpp function includes an Arduino.h file that defines the pinMode and digitalWrite functions. Simulink data types are used for pin and val variables. For this reason, the rtwtypes.h file is included in digitalio_arduino.h. You must include this file whenever you reference to Simulink data types. Because pin is a number between 0 and 53, the uint8_T data type is used to represent this variable. The val variable is the value to be written to the digital output pin and is represented by boolean_T data type.

In the next section, you will Select a System Object Template and begin the populate the methods.

See Also

| |