How can I plot real time graph from i2c data that is transmitted over bluetooth?

19 views (last 30 days)
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.
  2 Comments
Yong Kim
Yong Kim on 4 Mar 2017
I can't graph any values that I have received from digital sensor via bluetooth, the error I get is
Warning: Unsuccessful read: A timeout occurred before the Terminator was reached.
Error using matlab.graphics.animation.AnimatedLine/addpoints
Argument Y must be a vector.
Error in untitled2 (line 19)
addpoints(h,datenum(t),a)
Could you possibly help me on this please?
Thank you

Sign in to comment.

Accepted Answer

Sachin Kumar
Sachin Kumar on 7 Mar 2017
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.

More Answers (1)

Technical
Technical on 1 Feb 2023
In a simplest way to get plot of an analogous sensor data from arduino to android through blue tooth module as like as serial plotter.? How to

Community Treasure Hunt

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

Start Hunting!