Sending char string from matlab to arduino using serial com
2 views (last 30 days)
Show older comments
Hi i am trying to simply send the character string '<180>' to arduino from matlab using serial communication in order to light a led. for some reason arduino isnt receiving the correct data. if i type <180> into the serial monitor on the arduino software the led lights up. any help is appreciated.
matlab code:
%% Serial communication with Arduino
x = serial('COM4','BAUD',9600);
fopen(x);
% a= input('Press 1 to turn ON LED & 0 to turn OFF:');
a = '<180>';
fprintf(x,'%s',a);
pause(4)
fclose(x);
Arduino code:
const byte numChars = 32;
char receivedChars[numChars];
boolean newData = false;
void setup() {
Serial.begin(9600);
Serial.println("<Arduino is ready>");
pinMode(13, OUTPUT);
}
void loop() {
recvWithStartEndMarkers();
showNewData();
}
void recvWithStartEndMarkers() {
static boolean recvInProgress = false;
static byte ndx = 0;
char startMarker = '<';
char endMarker = '>';
char rc;
while (Serial.available() > 0 && newData == false) {
rc = Serial.read();
if (recvInProgress == true) {
if (rc != endMarker) {
receivedChars[ndx] = rc;
ndx++;
if (ndx >= numChars) {
ndx = numChars - 1;
}
}
else {
receivedChars[ndx] = '\0'; // terminate the string
recvInProgress = false;
ndx = 0;
newData = true;
}
}
else if (rc == startMarker) {
recvInProgress = true;
}
}
}
void showNewData() {
if (newData == true) {
Serial.print("This just in ... ");
Serial.println(receivedChars);
long number = atol(receivedChars);
if (number == 180){
digitalWrite(13, HIGH);
}
else {
digitalWrite(13, LOW);
}
newData = false;
}
}
0 Comments
Answers (0)
See Also
Categories
Find more on Instrument Control Toolbox in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!