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
While 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 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
. In order to compile
and link C++ functions with a C compiler, you need to add the extern "C" identifier
in each function declaration to tell 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 digitalRead
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 value returned by the function
is the digital value of the hardware pin and is represented by boolean_T
data
type.
In the next section, you will Select System Object Template and begin the populate the methods.
See Also
Create a Digital Read Block | Create a Project Folder | Select System Object Template