MATLAB: How to plot real time graph from i2c data that is transmitted over bluetooth

arduinobluetoothhc-05i2clive plotrealtime plot

I am trying to plot a real time graph on MATLAB of wirelessly transmitted digital sensor data(I2C). The structure of the system is as follows: MCP9808(Digital Temperature sensor) -> Arduino Uno with HC-05(Bluetooth Module) -> MATLAB. I managed to plot a real time graph of the analogue temperature sensor.
The following is Arduino code which receives digital temperature value and transmits over to MATLAB
#include <Wire.h>
#include <SoftwareSerial.h>
SoftwareSerial BTSerial(4, 5);
void setup()
{
Serial.begin(9600);
Wire.begin();
}
void loop()
{
uint16_t t;
Wire.beginTransmission(0x18);
Wire.write(0x05);
Wire.endTransmission();
delay(100);
Wire.requestFrom(0x18, 2);
t = Wire.read();
t <<= 8;
t |= Wire.read();
float temp = t & 0x0FFF;
temp /= 16.0;
if (t & 0x1000) temp -= 256;
Serial.println(temp);
BTSerial.println(temp);
delay(1000);
}
and this is the MATLAB code:
clear all; clc;
delete(instrfindall)
instrreset;
b = Bluetooth('YONG',1);
fopen(b);
figure
h = animatedline;
ax = gca;
ax.YGrid = 'on';
stop = false;
startTime = datetime('now');
while ~stop
a = str2num(fscanf(b));
% Get current time
t = datetime('now');
% Add points to animation
addpoints(h,datenum(t),a)
% Update axes
ax.XLim = datenum([t-seconds(15) t]);
datetick('x','keeplimits')
drawnow
end
fclose(b);
It will be greatly appreciated if I could get some tips on this. Thank you in advance.

Best Answer

The MATLAB code works fine here. The problem is in the arduino code, you need to initial "BTSerial" using below function in your setup(){}:
BTSerial.begin(baud_rate);
You can use disp(a) in MATLAB code to check whether the value received in MATLAB is proper or not.