#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <EasyButton.h>
#include "MAX30100_PulseOximeter.h"
#include "MAX30100.h"
#define BLYNK_PRINT Serial//redefine BLYNK_PRINT as Serial
#include <ESP8266WiFi.h>//header file for controlling wifi
#include <BlynkSimpleEsp8266.h>//header for blynk
#include <TimeLib.h>//header file for counter
#include <WidgetRTC.h>// header file for Real Time Clock
#include "Ubidots.h"
long int update_timer=millis();
long int button_timer=millis();
long int on_screen=millis();
long int on_screen_heart=millis();
long int random_time=millis();
#define BUTTON_PIN D7
#define REPORTING_PERIOD_MS 1000
#define PULSE_WIDTH MAX30100_SPC_PW_1600US_16BITS
#define IR_LED_CURRENT MAX30100_LED_CURR_50MA
#define LED_CURRENT MAX30100_LED_CURR_20_8MA
#define SAMPLING_RATE MAX30100_SAMPRATE_1000HZ
PulseOximeter pox;
MAX30100 sensor;
#define OLED_RESET 4
Adafruit_SSD1306 display(-1);
uint32_t tsLastReport = 0;
uint32_t last_beat=0;
bool initialized=false;
int HRclean;
int SpO2;
char context[50];
char lattitude[20];
char longitude[20];
int ThermistorPin =A0;
int Vo;
float R1 = 4500;
float logR2, R2, T, Tc, Tf;
float c1 = 1.009249522e-03, c2 = 2.378405444e-04, c3 = 2.019202697e-07;
int menu=1;
int beat=0;
int oxygen=0;
int heart=0;
int heart_screen=0;
int oxygen_screen=0;
/*=================================================================================================================*/
char auth[] = "Auth_code";// indentification of your board like phone number
const char* DEVICE_TYPE = "device"; // Edit here your device type label
const char* WIFI_SSID = "wifi_name"; // Put here your Wi-Fi SSID
const char* WIFI_PASS = "password"; // Put here your Wi-Fi password
const char* UBIDOTS_TOKEN = "TOKEN"; // Put here your Ubidots TOKEN
/*================================================================================================================*/
// 'mm', 33x32px
const unsigned char thermometer [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x00,
0x04, 0x10, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x1c,
0x10, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x10,
0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x00, 0x1c, 0x10, 0x00,
0x00, 0x00, 0x04, 0x90, 0x00, 0x00, 0x00, 0x0c, 0x90, 0x00, 0x00, 0x00, 0x04, 0x90, 0x00, 0x00,
0x00, 0x04, 0x90, 0x00, 0x00, 0x00, 0x04, 0x90, 0x00, 0x00, 0x00, 0x08, 0x88, 0x00, 0x00, 0x00,
0x11, 0x84, 0x00, 0x00, 0x00, 0x21, 0xc2, 0x00, 0x00, 0x00, 0x23, 0xe2, 0x00, 0x00, 0x00, 0x27,
0xf2, 0x00, 0x00, 0x00, 0x67, 0xf3, 0x00, 0x00, 0x00, 0x27, 0xf2, 0x00, 0x00, 0x00, 0x23, 0xe2,
0x00, 0x00, 0x00, 0x21, 0xc2, 0x00, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x00, 0x08, 0x18, 0x00,
0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// '3e3e3e', 30x30px
const unsigned char satellite [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x0f, 0x80, 0x00, 0x00,
0x07, 0x60, 0x00, 0x00, 0x02, 0xf0, 0x00, 0x00, 0x01, 0xf0, 0x00, 0x00, 0x00, 0xec, 0x00, 0x00,
0x00, 0x5e, 0x70, 0x00, 0x00, 0x3e, 0xf8, 0x00, 0x00, 0x1d, 0xfc, 0x00, 0x00, 0x0b, 0xfc, 0x00,
0x00, 0x07, 0xfc, 0x00, 0x00, 0x0f, 0xf8, 0x00, 0x00, 0x0f, 0xf0, 0x00, 0x00, 0x0f, 0xee, 0x00,
0x00, 0x77, 0xdf, 0x00, 0x00, 0x7b, 0xbe, 0x00, 0x00, 0x3c, 0x1c, 0xc0, 0xc4, 0x1c, 0x09, 0xe0,
0xce, 0x0c, 0x03, 0xc0, 0x66, 0x00, 0x03, 0x98, 0x63, 0x00, 0x01, 0x3c, 0x73, 0xc0, 0x00, 0x78,
0x38, 0xe0, 0x00, 0x70, 0x1c, 0x00, 0x00, 0x20, 0x0e, 0x00, 0x00, 0x00, 0x07, 0xc0, 0x00, 0x00,
0x03, 0xe0, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00
};
// 'mml', 30x30px
const unsigned char heart_logo [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x7e, 0x00, 0x03, 0xfc, 0xff, 0x80,
0x07, 0xff, 0xff, 0x80, 0x0f, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xc0, 0x0f, 0xff, 0xff, 0xc0,
0x0f, 0xff, 0xff, 0xc0, 0x07, 0xff, 0xff, 0x80, 0x07, 0xff, 0xff, 0x80, 0x03, 0xff, 0xff, 0x00,
0x01, 0xff, 0xfe, 0x00, 0x00, 0xff, 0xfc, 0x00, 0x00, 0x7f, 0xf8, 0x00, 0x00, 0x3f, 0xf0, 0x00,
0x00, 0x1f, 0xe0, 0x00, 0x00, 0x0f, 0xc0, 0x00, 0x00, 0x07, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'mml', 15x15px
const unsigned char heart_logo_small_1 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xf0, 0x3f, 0xf8, 0x3f, 0xf8, 0x3f, 0xf8, 0x1f, 0xf0,
0x0f, 0xe0, 0x07, 0xc0, 0x03, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'mml', 20x20px
const unsigned char heart_logo_small_2 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x9f, 0x00, 0x1f,
0xff, 0x80, 0x1f, 0xff, 0x80, 0x1f, 0xff, 0x80, 0x1f, 0xff, 0x80, 0x0f, 0xff, 0x80, 0x0f, 0xff,
0x00, 0x07, 0xfe, 0x00, 0x03, 0xfc, 0x00, 0x01, 0xf8, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x60, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'dsds', 30x30px
const unsigned char black [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'ewew', 30x30px
const unsigned char lung_logo [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x38, 0x30, 0x00,
0x00, 0xfb, 0x7c, 0x00, 0x01, 0xf9, 0x7e, 0x00, 0x03, 0xfa, 0x7f, 0x00, 0x07, 0xfb, 0x7f, 0x80,
0x07, 0xfc, 0xff, 0xc0, 0x0f, 0x00, 0x03, 0xc0, 0x0f, 0x08, 0x61, 0xe0, 0x1e, 0x98, 0x76, 0xe0,
0x1f, 0xb8, 0x73, 0x70, 0x3f, 0x38, 0x71, 0xf0, 0x3e, 0xb8, 0x7d, 0xf0, 0x3e, 0xb8, 0x7e, 0xf0,
0x3d, 0xb8, 0x7e, 0x78, 0x3d, 0xf8, 0x77, 0x78, 0x3f, 0xf8, 0x7f, 0x78, 0x3f, 0xf8, 0x3f, 0x78,
0x3f, 0xf0, 0x3f, 0xf8, 0x3f, 0xe0, 0x0f, 0xf8, 0x3e, 0x00, 0x01, 0xf0, 0x18, 0x00, 0x00, 0x30,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'dsdsd', 30x30px
const unsigned char o_logo [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3c, 0x30, 0x00,
0x00, 0x78, 0xec, 0x00, 0x00, 0x39, 0xc4, 0x00, 0x00, 0x01, 0x82, 0x00, 0x00, 0x02, 0x02, 0x00,
0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x00, 0xfe, 0x20, 0x00,
0x01, 0xff, 0x80, 0x00, 0x03, 0xb1, 0xc0, 0x00, 0x07, 0xc0, 0xe0, 0x00, 0x07, 0x80, 0x60, 0x00,
0x07, 0x00, 0x60, 0x00, 0x0f, 0x00, 0x67, 0x80, 0x0c, 0x00, 0x6c, 0x80, 0x06, 0x00, 0x60, 0xc0,
0x06, 0x00, 0x60, 0x80, 0x07, 0x00, 0xc3, 0x80, 0x03, 0x81, 0xc7, 0x00, 0x01, 0xff, 0x86, 0x00,
0x00, 0x7e, 0x0f, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// 'asas', 30x30px
const unsigned char o2_logo [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00,
0x01, 0xff, 0xe0, 0x00, 0x03, 0xff, 0xf0, 0x00, 0x07, 0xc0, 0xf8, 0x00, 0x0f, 0x00, 0x78, 0x00,
0x0f, 0x00, 0x3c, 0x00, 0x0e, 0x00, 0x3c, 0x00, 0x1e, 0x00, 0x1c, 0x00, 0x1e, 0x00, 0x1c, 0x00,
0x1e, 0x00, 0x1c, 0x00, 0x1e, 0x00, 0x1c, 0x00, 0x1e, 0x00, 0x1c, 0x00, 0x1e, 0x00, 0x1c, 0x00,
0x0e, 0x00, 0x3c, 0x00, 0x0f, 0x00, 0x3c, 0x00, 0x07, 0x80, 0x78, 0x00, 0x07, 0xe3, 0xf1, 0xc0,
0x03, 0xff, 0xe2, 0x60, 0x00, 0xff, 0xc0, 0x60, 0x00, 0x1e, 0x00, 0x60, 0x00, 0x00, 0x00, 0xc0,
0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x03, 0xe0, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
//Ubidots ubidots(UBIDOTS_TOKEN, UBI_HTTP);
//Ubidots client(UBIDOTS_TOKEN);
Ubidots ubidots(UBIDOTS_TOKEN);
EasyButton button(BUTTON_PIN,60,false,false);
BlynkTimer timer;// creating timer
WidgetRTC rtc;//creating real time clock
WidgetLCD lcd(V3);
/*===================== RTC ==========================*/
BLYNK_CONNECTED() {
rtc.begin();// Synchronize time on connection //getting current time from network
Blynk.syncVirtual(V4);
}
/*===================== DECTECTING STATUS ==========================*/
void onBeatDetected()
{
beat=1;
Serial.println("beat");
last_beat=millis();
}
/*===================== UPDATING MENU ==========================*/
void update_menu()
{
if(millis()-button_timer>300)
{
menu++;
button_timer=millis();
if(menu>5)
{
menu=1;
}
display.clearDisplay();
on_screen=millis();
}
}
/*===================== MENU 1: CLOCK_DISPLAY ==========================*/
void clock_display()
{
display.setTextColor(WHITE, BLACK);
display.drawRect(117, 25, 3, 3, WHITE); // Put degree symbol ( )
draw_text(0, 25, "TEMPERATURE =", 1);
draw_text(122, 25, "C", 1);
/*============Display Date=================*/
display.setTextSize(1);
display.setCursor(0,0);
display.print(dayStr(weekday()));
char currentDate [16];
uint8_t thisDay, thisMonth ;
thisDay = day();
thisMonth = month();
sprintf (currentDate, "%02d/%02d/", thisDay, thisMonth); //add leading zeros to the day and month
display.setTextSize(1);
display.setCursor(62,0);
display.print(currentDate);
display.setTextSize(1);
display.setCursor(102,0);
display.print(year(), DEC);
/*================Display Time================*/
char buffer [16];
uint8_t thisSec, thisMin, thisHour;
thisSec = second();
thisMin = minute();
thisHour = hour();
sprintf (buffer, "%02d:%02d:%02d", thisHour, thisMin, thisSec);
display.setCursor(0,9);
display.setTextSize(2);
display.print(" ");
display.setCursor(15,9);
display.print(buffer);
/*=============Display Temperature=====================*/
display.setTextSize(1);
display.setCursor(82,25);
display.print(Tc);
display.display();
lcd.print(0,0," ACTIVE ");
lcd.print(0,1," TRACKER ");
}
void draw_text(byte x_pos, byte y_pos, char *text, byte text_size) {
display.setCursor(x_pos, y_pos);
display.setTextSize(text_size);
display.print(text);
display.display();
}
/*===================== MENU 2: HEART_RATE ==========================*/
void heart_rate(int i)
{
if(i==1)
{
Serial.println("heart");
Serial.println(HRclean);
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
//display.setTextColor(WHITE);
display.println("HEART RATE");
display.setTextSize(2);
display.setCursor(0,9);
display.print(HRclean);
display.setCursor(0,25);
display.setTextSize(1);
display.print(" BPM");
if(heart_screen>=0 && heart_screen <5)
{
display.drawBitmap(90, 0,black,30,30, WHITE);
display.drawBitmap(90, 0,heart_logo_small_1,15,15, WHITE);
}
else if(heart_screen>=5 && heart_screen<10)
{
display.drawBitmap(90, 0,black,30,30, WHITE);
display.drawBitmap(90, 0,heart_logo_small_2,20,20, WHITE);
}
else if(heart_screen>=10 && heart_screen<15)
{
display.drawBitmap(90, 0,heart_logo, 30,30, WHITE);
}
display.display();
heart_screen++;
if(heart_screen>14)
{
heart_screen=0;
}
lcd.print(0, 0, " Heart Rate ");
lcd.print(0,1," ");
lcd.print(4, 1," ");
lcd.print(4, 1,HRclean);
lcd.print(7, 1,"Bpm ");
}
}
/*===================== MENU 3: OXYGEN_LEVEL ==========================*/
void oxygen_level(int i)
{
if(i==1)
{
Serial.println("Oxygen");
Serial.println(SpO2);
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(1);
//display.setTextColor(WHITE);
display.println("Oxygen_level");
display.setTextSize(2);
display.setCursor(0,9);
display.print(SpO2);
display.print("%");
if(oxygen_screen>=0 && oxygen_screen<10)
{
display.drawBitmap(90, 0,lung_logo, 30,30, WHITE);
}
else if(oxygen_screen>=10 && oxygen_screen<20)
{
display.drawBitmap(90, 0,o_logo,30,30, WHITE);
}
display.display();
oxygen_screen++;
if(oxygen_screen>19)
{
oxygen_screen=1;
}
lcd.print(0, 0, " Oxygen_level ");
lcd.print(0,1," ");
lcd.print(5, 1," ");
lcd.print(5,1,SpO2);
lcd.print(8,1,"% ");
}
}
/*===================== MENU 4: TEMPERATURE ==========================*/
void temperature(int i)
{
Vo = analogRead(ThermistorPin);
R2 = R1 * (1023.0 / (float)Vo - 1.0);
logR2 = log(R2);
T = (1.0 / (c1 + c2*logR2 + c3*logR2*logR2*logR2));
Tc = T - 273.15;
Tf = (Tc * 9.0)/5.0 + 32.0;
if(i==1)
{
Serial.print("Temperature: ");
Serial.print(Tf);
Serial.print(" F; ");
Serial.print(Tc);
Serial.println(" C");
display.clearDisplay();
display.setCursor(0,0);
display.setTextSize(2);
display.println(Tc,1);
display.setCursor(50,0);
display.setTextSize(1);
display.print("o");
display.setCursor(60,0);
display.setTextSize(2);
display.print("C");
display.setCursor(0,16);
display.println(Tf,1);
display.setCursor(50,16);
display.setTextSize(1);
display.print("o");
display.setCursor(60,16);
display.setTextSize(2);
display.print("F");
display.drawBitmap(85, 0,thermometer, 33,32, WHITE);
display.display();
lcd.print(0,0,"Body Temperature");
lcd.print(0,1,int(Tc));
lcd.print(3,1,"C ");
lcd.print(8,1,int(Tf));
lcd.print(10,1,"F ");
}
}
/*===================== MENU 5: GPS_STATUS ==========================*/
BLYNK_WRITE(V4)
{
GpsParam gps(param);
sprintf(context,"lat=%.6f$lng=%.6f",gps.getLat(),gps.getLon());
sprintf(lattitude,"lat=%.6f",gps.getLat());
sprintf(longitude,"lng=%.6f",gps.getLon());
}
void gps()
{
Serial.println(lattitude);
Serial.println();
Serial.println(longitude);
display.clearDisplay();
display.setTextSize(1);
display.setCursor(0,0);
display.setTextSize(2);
display.println(" GPS");
display.setTextSize(1);
display.println(lattitude);
display.println(longitude);
display.drawBitmap(90, 0,satellite, 30,30, WHITE);
display.display();
lcd.print(0,0,lattitude);
lcd.print(0,1,longitude);
lcd.print(13, 0," ");
lcd.print(13, 1," ");
}
void ubi_dots()
{
Serial.println(context);
heart_rate(0);
oxygen_level(0);
temperature(0);
ubidots.add("Temperature",Tf); // Change for your variable name
ubidots.add("heart_rate",HRclean);
ubidots.add("oxygen_level",SpO2);
ubidots.send();
if( minute()%10==0)
{
ubidots.add("position",1.0,context);
ubidots.send();
}
Blynk.virtualWrite(V0,Tf);
Blynk.virtualWrite(V1,HRclean);
Blynk.virtualWrite(V2,SpO2);
if(Tf>103)
{
Blynk.email("rengarider31@gmail.com", "Patient:Renga","Temperature is beyond normal");
}
if(heart>103)
{
Blynk.email("rengarider31@gmail.com", "Patient:Renga","Heart rate is beyond normal");
}
if(oxygen<90 &&oxygen >0)
{
Blynk.email("rengarider31@gmail.com", "Patient:Renga","Oxygen level is less than normal");
}
Serial.println("data sent");
}
void setup() {
Serial.begin(115200);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
button.begin();
button.enableInterrupt(update_menu); // enabling interrupt to call update_menu function
pox.begin();
pox.setOnBeatDetectedCallback(onBeatDetected);
pox.setIRLedCurrent(LED_CURRENT);
sensor.setMode(MAX30100_MODE_SPO2_HR);
sensor.setLedsPulseWidth(PULSE_WIDTH);
sensor.setSamplingRate(SAMPLING_RATE);
display.setTextSize(2);
display.setTextColor(WHITE);
display.println("CONNECTING");
display.println(" TO NET ");
display.display();
delay(500);
ubidots.wifiConnect(WIFI_SSID, WIFI_PASS);
Blynk.begin(auth,WIFI_SSID,WIFI_PASS);// connecting to Network
display.clearDisplay();
setSyncInterval(10* 60); //every 10min the system will sync the time from internet
//timer.setInterval(60000L, clockDisplay);
lcd.clear(); //Use it to clear the LCD Widget
lcd.print(0,0," ACTIVE ");
lcd.print(0,1," TRACKER ");
heart_rate(0);
oxygen_level(0);
temperature(0);
}
void loop() {
pox.update();
HRclean = pox.getHeartRate();
SpO2 = pox.getSpO2();
if(millis()-update_timer >60000)
{
update_timer=millis();
heart_rate(0);
oxygen_level(0);
temperature(0);
ubi_dots();
}
if(millis()-on_screen <60000)
{
if(menu==1)
{
temperature(0);
clock_display();
delay(100);
}
else if(menu==2)
{
heart_rate(1);
delay(150);
}
else if(menu==3)
{
oxygen_level(1);
delay(150);
}
else if(menu==4)
{
temperature(1);
delay(150);
}
else if(menu==5)
{
gps();
delay(150);
}
else if(menu>5)
{
menu=1;
}
}
else
{
Serial.println("sleep");
menu=0;
display.clearDisplay();
display.display();
}
Blynk.run();//communicate to mobile
}
Comments
Please log in or sign up to comment.