MATLAB Answers

using C code for serial port communication in matlab via mex file

3 views (last 30 days)
Ahmet Tuna
Ahmet Tuna on 26 May 2017
Edited: Walter Roberson on 26 May 2017
Hi,
I have implemented a C code for the serial port Communication. I want to use this function in matlab. I read the documentation about mex file (mex function) and i made the changes which i need for mexFunction. When i write mex serial_port.c to the command line everything is fine and matlab generates serial_port.mexa64. But when i want to use it and write serial_port() to the command line the serial port is not opening. what could be the problem?
here is my code:
#include "mex.h"
#include <stdio.h>
#include <fcntl.h>
#include <termios.h>
#include <errno.h>
void mexFunction (int nlhs, mxArray *plhs[], int nrhs,
const mxArray *prhs[])
{
if(nrhs != 0) {
mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nrhs",
"zero inputs required.");
}
if(nlhs != 0) {
mexErrMsgIdAndTxt("MyToolbox:arrayProduct:nlhs",
"Two output required.");
}
char serial;
struct termios SerialPortSettings;
serial= open("/dev/ttyACM1", O_RDWR | O_NOCTTY);
printf("%i \n",serial);
tcgetattr(serial, &SerialPortSettings);
cfsetispeed(&SerialPortSettings,B9600);
cfsetospeed(&SerialPortSettings,B9600);
SerialPortSettings.c_cflag &= ~PARENB;
SerialPortSettings.c_cflag &= ~CSTOPB;
SerialPortSettings.c_cflag &= ~CSIZE;
SerialPortSettings.c_cflag &= ~CS8;
SerialPortSettings.c_cflag &= ~CRTSCTS;
SerialPortSettings.c_cflag |= CREAD | CLOCAL ;
SerialPortSettings.c_cc[VMIN] = 9;
SerialPortSettings.c_cc[VTIME] = 0;
SerialPortSettings.c_iflag &= ~(IXON | IXOFF | IXANY);
SerialPortSettings.c_iflag &= ~(ICANON | ECHO | ECHOE | ISIG);
tcsetattr(serial,TCSANOW,&SerialPortSettings);
char writeb[9];
writeb[0]=1;
writeb[1]=2;
writeb[2]=0;
writeb[3]=0;
writeb[4]=0;
writeb[5]=0;
writeb[6]=0;
writeb[7]=200;
writeb[8]=writeb[0]+writeb[1]+writeb[2]+writeb[3]+writeb[4]+writeb[5]+writeb[6]+writeb[7];
int bytes_written=0;
bytes_written=write(serial,writeb,sizeof(writeb));
char readb[9];
int bytes_read;
int a;
bytes_read=read(serial,&readb,9);
a=readb[2];
printf("%i \n",a);
close(serial);
}
best regards
  4 Comments
Ahmet Tuna
Ahmet Tuna on 26 May 2017
thank you. i have read this article. I also read another article https://www.mathworks.com/examples/simulink-coder/mw/simulinkcoder-ex06428671-integrate-external-c-object-methods. Do you know something about this legacy code. I don't understand how i have to use it.
cheers

Sign in to comment.

Answers (0)

Community Treasure Hunt

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

Start Hunting!

Translated by