MATLAB Examples

Send and Receive Serial Data Using Arduino Hardware

This example shows how to use Simulink® Support Package for Arduino® Hardware to send and receive serial data with Arduino hardware.

Supported Hardware

  • Arduino Mega 2560
  • Arduino Mega ADK
  • Arduino Due
  • Arduino MKR1000
  • Arduino Leonardo

Contents

Introduction

In this example, the Send and Receive Serial Data Using Arduino Hardware and Send Serial Data to Host Using Arduino Hardware models are used to send and receive serial data. These models use the Serial Transmit and Serial Receive blocks to exchange data.

  • Send Serial Data to Host Using Arduino Hardware: In this model, the Arduino hardware sends data to your computer over the serial port 0 (USB port) of the Arduino hardware. This model is configured to run in Normal mode. In this mode, the model is deployed on the Arduino hardware.

The models provided in this example are preconfigured for the Arduino Mega 2560 board. You can run these models on any of the boards listed in the Supported Hardware section by changing the Hardware board parameter in the Simulink model. For more information on how to change the Hardware board parameter, see the Step 2: Configure the Model for Arduino Hardware section of this example.

Prerequisites

Before you start with this example, we recommend you complete the following:

Required Hardware

To run this example, you must have the following hardware:

  • Supported Arduino board
  • Connecting wires
  • USB cable

Step 1: Connect TX and RX Pins on Arduino Hardware

1. Connect your Arduino board to your computer using the USB cable.

2. Connect the TX1 pin to the RX1 pin of your Arduino hardware. This connection is a loopback connection.

Step 2: Configure the Model for Arduino Hardware

1. Open the Send and Receive Serial Data Using Arduino Hardware model. This model is configured to run in External mode.

2. To configure the model, click the Model Configuration Parameters button on the Simulink toolbar.

3. In the Configurations Parameters dialog box, select Hardware Implementation.

4. From the Hardware board list, select the type of Arduino board that you are using.

5. From the Groups list under Target hardware resources, select Serial port properties.

The Serial 1 baud rate parameter is set to 9600. In this example, the baud rate of Serial 1 baud rate is set because the TX1 and RX1 pins correspond to the Serial port 1 of the Arduino hardware. If you are using any other serial port pins for communication, specify the baud rate of the corresponding serial port.

6. Click Apply. Click OK to close the dialog box.

Step 3: Configure the Blocks in the Simulink Model

Double-click these blocks and verify the parameter values specified in the Block Parameters dialog box.

     Block           | Parameter Name                      | Value
    ---------------------------------------------------------------------------------
     Constant        | Constant value                      | [5682.769 -4561 7825]
                     | Interpret vector parameters as 1-D  | selected
                     | Sample time                         | 0.1
     Serial Transmit | Serial Port                         | 1
                     | Send mode                           | write
     Serial Receive  | Port number                         | 1
                     | Data type                           | double
                     | Data length                         | 3
                     | Sample time                         | 0.1
     Display Data    | Format                              | long
     Display Status  | Format                              | short

Note:

  • Because the TX1 pin is connected to the RX1 pin, specify the Serial Port parameter of the Serial Transmit block and the Port number parameter of the Serial Receive block as 1.
  • The Sample time parameter specified in the Constant block and the Serial Receive block must be the same.

Step 4: Run the Model in External Mode

1. On the model toolbar, set Simulation mode to External.

2. The default Simulation stop time is 10.0 seconds. To run the model for an indefinite period, enter inf.

3. Click Run. The lower left corner of the model window displays status while Simulink prepares, downloads, and runs the model on the hardware.

At each time step, the TX1 pin transmits the data specified in the Constant block to the RX1 pin of your Arduino hardware. The RX1 pin receives the data and displays it on the Display Output block.

4. Observe the output in the Display Output and Display Status blocks.

     Block          | Output                | Description
  --------------------------------------------------------------------------------------------------------------------------------
     Display Data   | [5682.769 -4561 7825] | Displays the data received
                    |                       | on the RX1 pin of the Arduino
                    |                       | hardware at the given time step.
                    |                       | The value is the same as
                    |                       | specified in the |Constant| block.
     Display Status | 1                     | A value of 1 indicates that
                    |                       | the Serial Receive block received data
                    |                       | at the given time step.

5. Disconnect the wire from the RX1 pin. Both the Display blocks now output 0. A value of 0 in the Display Status block indicates that no data is received at the given time step. If you reconnect the wire again, you can see that the values at the Display blocks are restored.

6. To stop running the model on your hardware, click Stop on the model toolbar.

Step 5: Run the Model in Normal Mode

1. Remove the wire connecting RX1 and TX1 pins because in this model, the data is sent to a serial terminal over the Serial port 0 (USB port).

2. Open the Send Serial Data to Host Using Arduino Hardware model. This model is configured to run in Normal mode.

3. In the Configurations Parameters dialog box, go to Hardware Implementation > Target hardware resources > Groups > Serial port properties. Set Serial 0 baud rate to the maximum baud rate supported by the serial port of your Arduino hardware.

4. Double-click the Serial Transmit block and verify these parameter values.

     Parameter Name     | Value          | Description
    ----------------------------------------------------------------------------------------------------------
     Serial Port        | 0              | Send data over serial port 0.
     Send mode          | println        | Add a carriage return character '\r'(ASCII 13)
                        |                | and a newline character '\n'(ASCII 10) at the
                        |                | end of each byte of data.
     Label              | Counter_val :  | The label for the data to be displayed on the serial terminal.

5. On the model toolbar, set Simulation mode to Normal and click the Deploy to Hardware button. The lower left corner of the model window displays status while Simulink prepares, downloads, and runs the model on the hardware.

6. Open the serial terminal in your computer ( for example, Arduino IDE serial monitor). When logging in to the serial terminal:

  • Specify the COM port number that corresponds to your serial connection. To learn how to find the COM port number, see Configure Host COM Port.
  • Specify the baud rate to the same value as the baud rate set in the Model Configuration Parameters dialog box. In this example, the baud rate is 115200.

After you login to the serial terminal, you can see that the counter values are displayed with label Counter_val :.

Other Things to Try

  • Create a Simulink model that uses Serial Receive and Serial Send blocks from Instrument Control Toolbox to exchange serial data between your computer and Arduino hardware.