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:
Create a new empty file in the MATLAB® Editor.
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); } else { 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.
Note
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.
Save the file as
digitalio_arduino.cpp
into the source folder,src
.Create an empty header file and copy the following C++ code into the file.
#ifndef _DIGITALIO_ARDUINO_H_ #define _DIGITALIO_ARDUINO_H_ #include "rtwtypes.h" #ifdef __cplusplus extern "C" { #endif 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 #endif //_DIGITALIO_ARDUINO_H_
Save the file as
digitalio_arduino.h
into theinclude
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
Create a Digital Write Block | Create a Project Folder | Select a System Object Template