Create ADXL343 Sensor Block to Read Acceleration Using IO Device Builder App
This example shows how to use the IO Device Builder app to create ADXL343 sensor to measure acceleration. In this example, the ADXL343 sensor values are retrieved by using the SPI bus requiring four wires (SCL, SDA, SDO and CS).
Prerequisites
Download the ADXL343 drivers for the sensor from the GitHub®.
Download the dependent files Adafruit Unified Sensor from the GitHub.
Download the dependent file Adafruit_BusIO from the GitHub.
Circuit Connections
To run this example, make these circuit connections.
For 5.0V LOGIC boards: Connect 5V on the Arduino®/Metro to VIN (red wire) on the ADXL343.
For 3.3V LOGIC boards: connect 3.3V on the Arduino to VIN on the ADXL343.
Connect GND on the Arduino to GND on the ADXL343.
Connect SDO to MISO, SDA to MOSI, SCL to SCLK and CS to digital pin 10 from the sensor to Arduino.
Open the IO Device Builder App
To open the IO Device Builder app, perform these steps.
Start MATLAB® and then open / create a Simulink® model.
On the Hardware tab of the Simulink toolstrip, in Prepare section, under Design, choose IO Device Builder.
Select Working Directory and Add Third-Party Source Files
Once the Source files location page loads, select the working directory and add third-party source files.
On the Source files location page:
Click Select and select the working directory. In the working directory, the generated system object, along with the corresponding cpp and h files, and the model are located.
Click Add folder and add the folders you downloaded. Only the files present directly within the selected folder are included, and any files present within subfolders are excluded.
Click Next to continue.
Select Source Files
On the Source files page, select the required source files and then click Next to continue.
Specify Block Parameters
On the Block parameters page:
Specify the block name and add block description.
Add mask parameter with the name
accelRange
,int8
as Data type,3
as initial value, andTunable
as Type.Click Next to continue.
Select Outputs for the Block
On the Outputs page:
Add Output port as x,y and z as mentioned in driver file and set data type as
single
and Dimension as[1,1]
.Click Next to continue.
Select Inputs for the Block
On the Inputs page:
Remove inputs for the block, if any already added.
Click Next to continue.
Preview Block
On the Block image page, view the preview of the block with the inputs and outputs you added. Click Next to continue.
Generate System Object Files
On the Generate page, the file generation location is displayed. Click Generate to generate the system object files and then click Finish in the Next Steps screen.
Next Steps
On the Next Steps page, the files generated are shown and the next steps to be performed are displayed.
Perform these steps.
1. The generated .cpp
file opens automatically. Modify the generated .cpp
file as shown below.
#include "C:\user\adxlSensor\adxlSensor.h" // App generated header. Do not modify #include "Wire.h" #include "Adafruit_Sensor.h" #include "Adafruit_ADXL343.h" #include "Arduino.h" #define ADXL343_CS 10 Adafruit_ADXL343 accel = Adafruit_ADXL343(ADXL343_CS, &SPI, 12345); void setupFunctionadXLT2(int8_T * accelRange,int size_vector__1){ while (!Serial); Serial.println("ADXL343 Single Tap INT Tester"); Serial.println(""); if(!accel.begin()) { while(1); } accel.setRange(*accelRange); } void stepFunctionadXLT2(float * x,int size_vector_1,float * y,int size_vector_2,float * z,int size_vector_3){ sensors_event_t event; accel.getEvent(&event); delay(10); *x=event.acceleration.x; *y=event.acceleration.y; *z=event.acceleration.z; }
2. Assign the output to the selected output port.
3. Add the #include "Arduino.h"
header and other required headers for the driver, as mentioned in ino example with the absolute address.
4. Open the generated Simulink model.
5. Add and connect Display blocks to the output ports.
6. In the Simulink model, navigate to Modeling > Model Settings and in the Configuration Parameters dialog box, click Hardware Implementation and then select an Arduino board.
A sample Simulink model is shown here.