File Exchange

image thumbnail

Embedded Coder Target for Arduino

version (916 KB) by MathWorks Embedded Coder Team
Custom target for Arduino and other processors


Updated 21 Apr 2017

View Version History

View License

Editor's Note: This file was selected as MATLAB Central Pick of the Week

This file exchange submission is an Embedded Coder custom target for Arduino. It uses the Arduino platform as the example hardware, yet the examples it shows can be used to learn and then be applied on any custom target. In an applied way - it shows capabilities and steps that leverage many features of Embedded Coder and creating custom targets. Arduino has been selected since it is widely accessible, has a large DIY community, and is a great platform to explore the varying things that a custom target would need as the various Arduino platforms change.
A custom target author can use this submission to extend/create more Arduino targets, or to simply use this as an example to create your own. An end user that has Embedded Coder can use this submission for their Arduinos.
Some highlights included in this custom target include:
- Shows how to handle dependencies for different Arduino boards (and even non-Arduino boards). Current set includes Uno, Leonardo, Mega2560.
- Options available to drive to minimal footprint and memory
- Processor in the Loop (PIL)
- Numerous scheduling and timing modes explored.
- Overrun detection exposed in the Simulink algorithm directly to allow for algorithmic adjustments when overrun is detected during execution.
- A wealth of examples on how to add/change peripherals blocks/capabilities (LCD, Servo Motor, UART, printf into UART, DIO, Ultrasonic sensor, Async interrupt, I²C Master, I²C Slave, etc, etc).
Additional resources for creating custom targets
- Embedded Coder Product Documentation (account/license required)
- Developing Embedded Targets Advisory Service
- MATLAB Answers: example of developing a custom target
Note: Only Arduino IDE version 1.0.5 is supported and this submission is not maintained to support new IDEs.
For additional Arduino support, see

Cite As

MathWorks Embedded Coder Team (2021). Embedded Coder Target for Arduino (, MATLAB Central File Exchange. Retrieved .

Comments and Ratings (97)


The build "works", but has an error during the build. I don't think commontargetlib.tlc is included in 2018a. So no .hex file was built.

Error: File: C:\Users\turbo\Documents\MATLAB\arduino_ec_target\arduino_ec\arduino_ec.tlc Line: 20
Unable to open %include file commontargetlib.tlc

J. Santos

Vasavi Sai


I programmed Arduino using Simulink blocks. It is working fine but every time it should connect to Simulink to work.
When I close the Simulink the Arduino is not working, in this case, I can't keep my PC ON with Simulink to run the Arduino.

Is there any solution to use the only Arduino with 12V adaptor after uploading from Simulink.

Thank You

jia mou zhang

Ahmed Nawara

my Matlab is 18b and it shows the error below... if anybody is able to figure out the reason for the error and how to solve it, I will really appreciate your help :)
"Error: Simulink Coder Error in block: "untitled/LCD Shield", block type "S-Function": Formated LCD output block requires C++"

Javier Ros

It does not support Linux :-( !!!

Kay Wonderley

does not seem to work with 2018a. very dissapointed

Vlad Vetrov

Ismael de la Cruz do u have any ideas to solve "the timeout..." problem?

Vlad Vetrov



Guijiang Duan

Ismael de la Cruz

Thanks for this support package.
I have problems with the PIL Simulation (myarduino_blink2_PIL). I'm working with IDE v1.6.5.
I have performed the fix described by Tomas and doesn't work. Also I modify the fix as below, and it doesn't work:

if ~strcmp(arduino_ec.Prefs.getBoard, 'leonardo')
% Reset the board; this is needed for PIL to start it properly!
% Very often Arduino "eats" first byte after flashing

The message I get is:

### Starting the PIL simulation
Warning: NARGCHK will be removed in a future release. Use NARGINCHK or NARGOUTCHK instead.
### Stopping PIL simulation
The timeout of 5 seconds for receiving data from the rtiostream interface has been exceeded. There might be multiple reasons for this failure.
You should:

(a) Check that the target hardware configuration is correct, for example, check that the byte ordering is correct.
(b) Confirm that the target is running.
(c) Consider the possibility of application run-time failures (e.g. divide by zero exceptions, incorrect custom code integration, etc.).

Note (c): To identify possible reasons for the run-time failure, consider using SIL, which supports signal handlers and debugging.

If you cannot find a solution, consider using the method setTimeoutRecvSecs of rtw.connectivity.RtIOStreamHostCommunicator to increase the timeout value.



hello ! I have a question.
The arduino path is unspecified or invalid with OS X 10.11.6 ,and my matlab version is 2016b,
set as follows:

Aashifa Rafiq

Art Malyutin

What version of MATLAB is need for run?

Art Malyutin

Hello all. I have problem during installation. Matlab displays error

Error using arduino_ec.Prefs.setBoard (line 75)
Unable to find board specification file. Ensure that
the path to the Arduino IDE is set correctly, e.g.

Error in setup_customtarget_arduino (line 34)
arduino_ec.Prefs.setBoard('mega2560'); % Choose a specific board name

Installation is spent on the instructions issued in pdf, pointed the way to a Arduino, name of the platform and port



first of all: thanks for this support package.

I do also get timeout error message when PIL simulation is started.

Unfortunately, latest fix described by Tomas does not work for me. Any futher ideas?

Thanks in advance.

Best regards,


The reason for hanging PIL is the fact, that Arduino "eats" first byte from UART after reset. So we need to modify function "runAvrDude.m". Look for line ~80 and modify it as follows:

if ~strcmp(arduino_ec.Prefs.getBoard, 'leonardo')
% Reset the board; this is needed for PIL to start it properly!
% Very often Arduino "eats" first byte after flashing

After that, add following function on the end of that file:

function sendDummy(port)
% Send dummy byte to Arduino to re-establish COM port after flashing

% Open the port
lib = 'libmwrtiostreamserial.dll';
portID = rtiostream_wrapper(lib,'open', '-port', port, '-baud', '9600');
if portID == -1
error('Cannot open COM port after target flashing');

% Send the data
[errorCode, dataLength] = rtiostream_wrapper(lib, 'send', portID, uint8('a'), 1);
if errorCode ~= 0
error('Cannot send to COM port after target flashing');

% Close the port
res = rtiostream_wrapper(lib, 'close', portID);


@Matthias Weber
Thank you!

Yashar Kouhi

Kemo, could you figure out where the problem is? It seems there should be a problem with rtiostream.cpp file.


@yashar Kouhi
I had the same problem exactly as you described !!

Yashar Kouhi

Hi, My board is mega2560. I get the following error message when I run the PIL Simulation (myarduino_blink2_PIL), although the code generation has been completed successfully.
"The timeout of 5 seconds for receiving data from the rtiostream interface has been exceed....". I changed the receiving data time several times but did not solve the issue. Can someone help me?


Matthias Weber

Hi, I also just downloaded IDE v1.6.8 for testing. boardsFile in Prefs.m needs to be adjusted to find the file:

boardsFile = fullfile(arduino_ec.Prefs.getArduinoPath(), 'hardware', 'arduino', 'avr', 'boards.txt');


This package does not seem to work with IDE 1.6.8. as the board files are located in AppData instead of being together with the installation files.


sry, can i also use this package on my matlab 2014a?
and i do not know where to put this package.

thx if some one can help.

Sm EmbeddedSystem

Dan Lluch, can you gave me you email ?

Dan Lluch

@ Saad - make sure you work through the README.PDF when you first install. The setup script also runs a "build all s-functions" - which generate the required s-functions that are distributed with the target. From the error - it seems that you may not have built them, or added to the path. both of those things are handled via the set up script. good luck.

In case useful - there is a description on the various differences options for arduino here:

Sm EmbeddedSystem

when i'm trying to simulate the model i have this problem "Error in S-function 'myarduino_blink2_PIL/Digital Output': S-Function 'sfunar_digitalOutput' does not exist"


Hello Todd,

I've been able to get the embedded support package to work with the latest IDE (1.6.5). What you have to do is find the under the '\arduino_ec' path. Edit this to include the correct file paths within the ARDUINO_INC_LIBS, TARGET_INC_DIR, and TARGET_SRC_DIR variables.The final step is to comment out the lines within the EXTRA_SRCS variables (the new IDE does not use malloc.c, and realloc.c)

So my corrected lines look like:

ARDUINO_INC_LIBS = -I$(ARDUINO_ROOT)/hardware/arduino/avr/libraries/Wire \
-I$(ARDUINO_ROOT)/hardware/arduino/avr/libraries/Wire/utility \
-I$(ARDUINO_ROOT)/libraries/Servo \
-I$(ARDUINO_ROOT)/libraries/LiquidCrystal \
-I$(ARDUINO_ROOT)/libraries/Ethernet \
-I$(ARDUINO_ROOT)/libraries/Ethernet/utility \
-I$(ARDUINO_ROOT)/hardware/arduino/avr/libraries/SPI \

TARGET_INC_DIR = -I$(ARDUINO_ROOT)/hardware/arduino/avr/cores/arduino
TARGET_INC_DIR += -I$(ARDUINO_ROOT)/hardware/arduino/avr/variants/$(VARIANT)

TARGET_SRC_DIR = $(ARDUINO_ROOT)/hardware/arduino/avr/cores/arduino


# Here we add some Arduino library files from different folders
# EXTRA_SRCS = $(TARGET_SRC_DIR)/avr-libc/malloc.c \
# $(TARGET_SRC_DIR)/avr-libc/realloc.c

Pardon the formatting. This setup works for me.


I was able to use this target for the Zumo32U4, which is an Arduino Leonardo-like board. In fact, I can treat it as a Leonardo within the Arduino IDE without any issues. However, the Simulink support package for Arduino has trouble communicating with the Zumo32U4.

One outstanding problem I have was that part of the board support code does not work with Arduino 1.0.5, and I could not get the Embedded Coder target for Arduino to work with Arduino 1.6.5.

Is there any interest in the Embedded Coder Team in helping me make the target work with Arduino 1.6.5?

Is there any plan to update the Simulink support package for arduino, or this coder target, for Arduino 1.6.5?

Finally, what would it take to add the A-star/Zumo32U4 target to the Simulink support package for Arduino?

Thank you,

Suytry KY

Anyone know!
I wonder what are the different among Embedded coder target for arduino, ArduinoIO, and Simulink support package for arduino?
Right now, i am confusing with these package, Can anyone here explain me about that please?
Thanks in advance!


The message "S-Function 'sfunar_digitalOutput' does not exist" means that S-Funtions were not created (compiled) during the setup. Please check/pick-up the C-compiler running of:
mex -setup
Then re-compile the S-Functions via script:

After that, in the directory "blocks" should be files with extension ".mexw32" resp. ".mexw64", depending on MATLAB version.

Abubakar Muqaddas

Hi, I am having problem while running the myarduino_blink.slx demo.

My MATLAB version is R2015a, and I am using an Arduino Uno. I ran the file setup_custom_target_arduino.m after changing the relevant directory listing and the arduino version in the m file, and I got the output of Arduino on COM 3, which was correct.

After this, I checked the Simulink Library Browser and I had the Custom C/C++ Target Arduino Library will all its modules. Now when I simulate the model, I get the following error:

Error in S-function 'myarduino_blink/Digital Output': S-Function 'sfunar_digitalOutput' does not exist

Kindly help me out, what could I have done wrong?


Hello every one , i have a simple model that integrates an input signal and it works fine in PIL mode where the integrator part only is coded to arduino , now i want to use the output signal to drive some electronics (servo ,LED) , but i couldn't do that , thanks


thank you Mikhail for your answer , i realized it the hard way , but i have another question :
now my simulation is running "Model block PIL" for some controller on UNO ,i need to output the control action to a servo using "servo block" in the arduino_lib , when i try to add this little part to the "Model block PIL" i end up with an error in the building stage.


Scopes only work in simulation part of the model. If you are doing "Top model PIL", scopes will not work, because the whole model is running on target. You should do "Model block PIL" with scopes in higher level model (running in simulation) to observe signals in scopes.


Why scope is not working in PIL mode ,given that the model is running good from Tx&Rx LED


When you have message like "... does not exist", it looks that directory "blocks" is not on the MATLAB path. It should be, because it is done in function "setup_customtarget_arduino.m" on first functional line and next this path is saved:
addpath(fullfile(pwd,'arduino_ec'), fullfile(pwd,'blocks'))
result = savepath;
Try to run "setup_customtarget_arduino.m" again.


I have some trouble when I try to run simulate/build/flash any model from example (Error in S-function 'myarduino_blink/Digital Output': S-Function 'sfunar_digitalOutput' does not exist). But installation was successful (all path saved in matlab (2014/64). What do I do wrong?


This is strictly AVR-based Arduino with IDE version 1.0.5. This cannot be working with Due because of different MCU, different compiler and mainly, different internal structure of IDE 1.5.x.
If there will be more interest, we can consider port for Arduino Due.


I am trying to use the package with my arduino Due.
In the comments I read, the Arduino 1.5.x is not supported. So I installed 1.0.5 and set the path in the setup file correctly. When I try to build the demo "myarduino_blink.slx" I get the following error:

ompiling: C:/Users/thomas/Desktop/arduino_ec_target/blocks/io_wrappers.cpp
Compiling: myarduino_blink.cpp
unknown MCU 'cortex-m3' specified
Known MCU names:
C:/Users/thomas/Desktop/arduino_ec_target/blocks/io_wrappers.cpp:1: error: MCU 'cortex-m3' supported for assembler only
In file included from c:/arduino/hardware/tools/avr/lib/gcc/../../avr/include/avr/pgmspace.h:82,
from C:/Arduino/hardware/arduino/cores/arduino/Arduino.h:8,
from C:/Users/thomas/Desktop/arduino_ec_target/blocks/io_wrappers.cpp:10:
c:/arduino/hardware/tools/avr/lib/gcc/../../avr/include/avr/io.h:330:6: warning: #warning "device type not defined"
In file included from C:/Users/thomas/Desktop/arduino_ec_target/blocks/io_wrappers.cpp:10:
C:/Arduino/hardware/arduino/cores/arduino/Arduino.h:213:26: error: pins_arduino.h: No such file or directory

Did anybody use this package with the Arduino Due? Please help me on that.

salah tajori

salah tajori

it's good


I have never seen before this message. In principal, last task of the makefile (arduino_ec.tmf) is line 248 with this content:
@echo ### Created $(PRODUCT) successfully (or it was already up to date)

The first part of that message is like sign that makefile process went smoothly to the end. There can be stdout flushing problem, e.g. the last part of the text is still in buffer.
Please try following steps:
1. Go to directory with generated code, e.g. it can be like “mymodel_arduino”.
2. Open here DOS command window.
3. Run BAT file like “mymodel.bat” – the name depends on name of the model; there is only one BAT-file. Path to this file cannot be used, DOS window needs to be opened in folder where is the BAT file located.
4. This file was generated and was invoked by Embedded Coder to build the project
5. Observe, if you will see on the last line the messages like “### Created mymodel successfully ...”
6. If you can see that, Simulink is not receiving this part of the message
7. If you not see that, there is issue in template makefile “arduino_ec.tmf”

Anyway, it looks like the HEX file was created, only this message has not arrived to Simulink.


Please help on this issue.
### Unable to find build success string.'***Created* in build log.
Can you please help on this


Thank you for your reply. I was successful to flash the arduino uno with the myarduino_hc04_test model. However, when I try to build it I get the error message
### Unable to find build success string.'***Created* in build log.
Can you please help on this


In my case original model is working, newly created model employing SR04 block from library is working. Problem can appear when original library was manipulated (library itself, S-Function or TLC file). If you want to investigate, look for the file "sfunar_hcsr04.tlc". There is line like:
%assign errTxt = "Unsupported function parameter: %<mode>"
From here you have your error message. You wrote that the message is "untitled_ConstP.HCSR04_p4". This is really strange, because this values is coming from the S-Function as numeric parameter and expected value is between 1 to 3, coming originally from the dialog.
Please check your installation and recompile all S-Functions again.


I also want to not that in order to flash my own model to the arduino board, I had to copy and paste the model in the myarduino_hc04_test model and flash it. If I copy the SR04 block into my model, it does not work.


The message "Unsupported function parameter" means that Measuring Mode (Raw / Centimeter / Inch) is out of these three values. Please try original model file “myarduino_blink_sr04”.


When I try to use the HCSR04 block to download on arduino uno board I get the following error
Error: Simulink Coder Error in block: "untitled/HC-SR04", block type "S-Function": Unsupported function parameter: untitled_ConstP.HCSR04_p4

I'm using 2013b. Please help


To Marta: Arduino Version 1.5.x is not supported, you have to use 1.0.5. The reason is that 1.5.x uses different folder structure and header files are on different paths.


Most of the new blocks are requiring to use C++ code generation. Please check under "Code Generation" -> "Language" -> "C++".


I recently downloaded the files and i am trying to use some of the examples included, but on many i get this type of error when trying to deploy on an Arduino Uno board.

Error: Simulink Coder Error in block: "myarduino_LCD_LED/LCD Shield", block type "S-Function": Formated LCD output block requires C++

I am currently using the newest version of MATLAB 2014a.


I downloaded and did setup for Arduino Mega 2650. I run through README.pdf file. When I tried to run myarduino_blink.slx I got error message when doing build stage.
Please advise.
Below is the error message.


Compiling: myarduino_blink.cpp
Compiling: ert_main.cpp
In file included from myarduino_blink_data.cpp:16:
myarduino_blink.h:21:21: error: Arduino.h: No such file or directory
gmake: *** [myarduino_blink_data.o] Error 1
gmake: *** Waiting for unfinished jobs....


gmake: *** [io_wrappers.o] Error 1
In file included from myarduino_blink.cpp:16:
myarduino_blink.h:21:21: error: Arduino.h: No such file or directory
myarduino_blink.cpp: In function 'void myarduino_blink_step()':
myarduino_blink.cpp:58: error: 'digitalWrite' was not declared in this scope
myarduino_blink.cpp: In function 'void myarduino_blink_initialize()':
myarduino_blink.cpp:87: error: 'OUTPUT' was not declared in this scope
myarduino_blink.cpp:87: error: 'pinMode' was not declared in this scope
gmake: *** [myarduino_blink.o] Error 1
In file included from ert_main.cpp:16:
myarduino_blink.h:21:21: error: Arduino.h: No such file or directory
ert_main.cpp:20: error: 'uint8_t' does not name a type
ert_main.cpp:21: error: 'uint8_t' does not name a type
ert_main.cpp: In function 'int main()':
ert_main.cpp:34: error: 'init' was not declared in this scope
ert_main.cpp:38: error: 'micros' was not declared in this scope
ert_main.cpp:48: error: 'uOverrunCounter' was not declared in this scope
gmake: *** [ert_main.o] Error 1
### Build procedure for model: 'myarduino_blink' aborted due to an error.


The arduino comunity is growing, so it will be nice to exitend the support also to the OSX platform



I'm trying to run these Embedded Coder Plugin on Matlab2011b with Linux Debian 64bit and Arduino 1.0.5.
I followed the instructions given here in the command section and on the linked websites. But when I'm trying to build the "demo_arudino_blink" model Simulink gives the error:
"makeCmd must default to PC Make command".

In the Matlab Command window I could read:

### Writing header file rtwtypes.h
### Writing source file demo_arduino_blink.c
### Writing header file demo_arduino_blink_private.h
### Writing source file demo_arduino_blink_data.c
### Writing source file ert_main.c
### TLC code generation complete.
### Creating project marker file: rtw_proj.tmw
### Processing Template Makefile: /home/testuser/.Programs/Matlab/simulink_support_package_arduino/arduino/arduino.tmf
### Build procedure for model: 'demo_arduino_blink' aborted due to an error.

so I think the error is caused from an wrong arduino.tmf file. I think the coder is trying to compare the pcMakeCmd with the Arduino makeCmd, but where is the arduino makeCmd located in Linux?

I would appreciate if anyone could help me getting these thing to work.


fox tan

@Dan Liuch- thanks for your advice I made a interrupt block after I check out .

Dan Lluch

@fox tan - check out this submission (and contributors taht made other peripherals with it) that may help:

fox tan

this is a good package!
but where can get arduino interrrupt block? or who can tell me how to create this block? thanks for you help!



I have a problem using the arduino target.
I am trying to send data via serial communication from a model running on arduino to a model running in my computer.

The problem is that I get wrong values when the data I am about to send are negative (i.e. the transmission is fine when I am sending values 0 or greater but wrong when they are below zero (instead of -4 I receive 252 etc)).
I also tried to send negative values through the example that you have (demo_arduino_serial_communication and demo_arduino_serial_communication_host), by changing the Analog input block with a constant block and once again it works fine when using values zero or greater but I am getting the following error message when I am trying to send negative values through the serial communication.
"Parameter overflow occurred for 'Value'. The parameter's value is outside the range that the run-time data type can represent. The specified value was saturated to the closest representable value. You can control this diagnostic on the Diagnostics pane of the Configuration Parameters dialog."

I thought to try and change something on the Diagnostics pane, but I thought that it would be wiser to ask someone more experienced first.

What do you think?

I have an arduino UNO and MATLAB R2011b.

Thanks in advance,
a desperate student


This also works with (at least) Arduino 1.01 on Mac OS Mountain Lion with the fixes by Stefan Disch and at least:

-Set the comport to whatever is stated in Arduino, usually /dev/tty..., the find comport does not work
-Adapt /arduino/+arduino/runAvrDude.m by removing whatever is in between "-P" and "%s" on line 23
-You will get a check for Arduino.exe, which does not exist. Remove it and set the path with arduino.Prefs.setArduinoPath('/Applications/')
-Go to the Arduino folder and copy Arduino.h, name it WProgram.h. (whoever decided this was a good idea..)

Good luck.


Is there a tutorial on how to create custom simulink blocks that encode standard arduino libraries, such as the lcd display library? I think you have to create your own s-functions. Also can you expose the s-functions that are behind the included arduino block library - that way other people can build and create new blocks.

Jed F.

This is very trivial to get working on OS X and Linux too.

@Andrey Zagvazdin: The parsing of boards.txt is horrible. I have a new one that I would like to post however the licensing forbids it. I will work on making a patch file.


Has anyone ever try to use the arduino target package on chipkit max32 microcontroller? Or know whether it will support this package?

Gautam Vallabha


What's the diference with the file "Simulink Support Package for Arduino Uno Hardware"? I'm a little confuse about it

General guidelines:
* Please use this FileExchange page to post general comments and ratings on the support package

* If you have questions about using this support package, post your question at (with tag "arduino", and product "Embedded Coder")


I just need to know if this support package also works with Matlab R2009a?

I want to do small models in Simulink and flash it to the Arduino Mega 2560 Board. I can just use R2009a!

Andrey Zagvazdin

Hello! I MatLAB 7.12 (R2011a) 64-bit. OS Windows 7
Fee clone Arduino, Russian assembly Freeduino (, a complete analog Ardruino Uno / Duemilanove w/ATmega328.
My actions:
1 - Connection "Arduino" to MatLAB
* Set ArduinoIO (;
* Unpack the package into C: \ arduinoIO;
* >> Cd c: \ arduinoIO
* >> Install_arduino
* >> Savepath
* Flashed "Arduino" core srv.pde (;
* >> A = arduino ('COM4');
At this point, everything is OK! From the window MatLAB, board responds and takes command.

2 - Connection "Arduino" to SIMULINK
* Downloading the package Simulink Support Package for Arduino (;
* "Simulink Support Package for Arduino" unpacked to C: \ arduino_simulink
* Downloading Wednesday Arduino IDE (arduino-1.0) and extract it to c: \ ArduinoTarget
* >> Cd c: \ arduino_simulink
* >> Addpath (fullfile (pwd, 'arduino'), fullfile (pwd, 'blocks'), fullfile (pwd, 'demos'))
* >> Savepath
* >> Sl_refresh_customizations
* Plug-in board "Arduino" to your computer.
* Indicates the path to the environment Arduino IDE >> arduino.Prefs.setArduinoPath ('c: \ ArduinoTarget')

That's all up to this point NORMALLY PUT.

* Determine the current platform team
>> Arduino.Prefs.setBoard ('atmega328') or >> arduino.Prefs.setMcu ('atmega328')
Throws an error
>> Arduino.Prefs.setBoard ('atmega328')
?? Reference to non-existent element of a cell
Error in ==> Prefs> Prefs.parseBoardsFile at 227
lhs = parsedLines {i} {1} {1}%
can be of the form xx.yy.zz
Error in ==> Prefs> Prefs.setBoard at 66
boards =
arduino.Prefs.parseBoardsFile (boardsFile);
>> Arduino.Prefs.setMcu ('atmega328')
?? Error using ==> Prefs> Prefs.setMcu at 129
This function is deprecated. Use
arduino.Prefs.setBoard instead, e.g.
arduino.Prefs.setBoard ('uno')



Thumbs up MathWorks for providing a more free license on this package (as of 14th March 2012 release), allowing to distribute and share the code!
It's a pity though that the contents itself had not been updated for a long time.



Would like to change the AnalogOut PWM frequency, need to know if changing timer1 & timer2 is safe for integrity of simulink time base (assuming timer0 is used by simulink)?


Here i added the Servo Write block, which works with motor shield:

You are welcome to incorporate this patch into official package.



Is it possible to access the I2C pins (SDA/SCL) via the blockset? If not, would appreciate a workaround!!


It would be great to have motor shield support, just like in MATLAB support package for Arduino.


Excellent package, works great on my Uno

In the block directory there is an LCDOutput 'S' function can this be made functional & if so how?

Raja Rout

I did'nt find any option for accessing the others serial port.

Raja Rout

very very thanks, keep up the good work. It works with 2011a successfully installed. Can we access the extra serial ports of Arduino using this toolbox??.....


Can this be used to configure pins as interrupts?

Stefan Disch

I also tried fix 2) (using Arduino 1.0).

With Arduino 1.0 there came some changes in naming and layout of the includes (see for details).

I made the following changes to the current version of the arduino target:

1. Edit boards.txt and delete lines 145 through 181 (as told in a previous post)
2. Substitute every occurence of "WProgram.h" with "Arduino.h".
3. Add an additonal include path in rtwmkcfg.m in order to find the "pins_arduino.h" header file (moved to the new variants dir).
4. Commented out line 33 in arduino_smain.tlc because __cxa_pure_virtual is now defined in the Arduino 1.0 libs (see new.h).

These changes allowed me to compile the blink demo without errors.


I tried this fix: 1) Use an older IDE (0023)

And everything worked.


I tried this fix (2) Edit boards.txt and delete lines 145 through 181 (inclusive).)

And got this error after.

demo_arduino_blink.h:23:22: error: WProgram.h: No such file or directory
gmake: *** [demo_arduino_blink_data.o] Error 1

There is a problem parsing hardware/arduino/boards.txt for the latest Arduino IDE (Arduino 1.0). For the time being, try one of the following workarounds:

1) Use an older IDE (0023 or 0022), or

2) Edit boards.txt and delete lines 145 through 181 (inclusive).


I'm getting an error when trying to execute arduino.Prefs.setBoard:

??? Reference to non-existent element of a cell array.

Error in ==> Prefs>Prefs.parseBoardsFile at 227
lhs = parsedLines{i}{1}{1}; % can be of the form xx.yy.zz

Error in ==> Prefs>Prefs.setBoard at 66
boards = arduino.Prefs.parseBoardsFile(boardsFile);

Anyone know why this is?

Stephen Williams

Just found the PWM block - it is labeled "Analog Output"

Stephen Williams

Please add PWM block

Stefan Disch

Has anyone used it with Arduino version 1.0 so far?



Great, thank you for that.

The Nov 22, 2011 update is the same as the Nov 29 update (the earlier date is when the file was submitted to FileExchange, the later date is when it got approved and published).


Is there a direct link for the Nov 29, 2011 update? I can only find the Nov 22, 2011 update.

Note: the latest version of the support package (released Nov 29, 2011) should address the above issues with Uno.


Hey guys,

Has anyone had an issue with "multiple main errors, i.e.

main.o: In function `main':
main.cpp:(.text+0x0): multiple definition of `main'

I've followed all the instructions and I've not had any problems using eclipse to compile for my Arduino UNO.

Thanks Frazer

Guillaume MARTIN

Thank you Stefan.

I did as you said (but I corrected the baudrate at 155200 in Prefs.m), and it ran.

Thank you very much,

Stefan Disch

I needed two changes to get it working in my environment (Win 7, Matlab 2011b, Arduino-0023 Software, Arduino Uno):

- In Prefs.m I changed in the function searchForComPort the string of the device name to '\\Device\\USBSER000'
(Have a look in your registry at HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM to identify the correct string)

- In runAvrDude.m I removed the baudrate option from the avrdude call. (Before it was set to 57600 and it doesn't work)

Best regards

Guillaume MARTIN

The baud rate is configured at 57600, but my baud rate is 115200. (So, the upload don't works)

Do you know how to configure the baud rate in :
c:/AARDUI~1/hardware/tools/avr/bin/avrdude -V -F -C c:/AARDUI~1/hardware/tools/avr/etc/avrdude.conf -p atmega328p -P //./COM4 -c stk500v1 -b 57600 -U flash:w:demo_arduino_blink.hex ?

Bests regads,

Suleman Shafqat

MATLAB Release Compatibility
Created with R2013b
Compatible with any release
Platform Compatibility
Windows macOS Linux

Inspired by: Device Drivers

Inspired: Embedded Coder Arduino Servo Write Block


Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!