#include <SPI.h>
#include <SD.h>
File myFile;
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define OLED_Address 0x3C
Adafruit_SSD1306 display(128, 64);
#define pinOk 3
#define pinSet 5
#define Set digitalRead(pinSet)
#define Ok digitalRead(pinOk)
bool lockSet = 0;
bool lockOk = 0;
byte dis;
byte gender = 0;
byte saveGender = 0;
byte umur = 0;
byte saveUmur = 0;
#define pinVoltage A1
float vModul = 0.0;
float hasilVoltage = 0.0;
int vAdcVoltage = 0;
bool isNormal;
#define USE_ARDUINO_INTERRUPTS true
#include <PulseSensorPlayground.h>
const int PulseWire = A0;
int Threshold = 550;
int bpm = 0;
PulseSensorPlayground pulseSensor;
void setup() {
Serial.begin(115200);
pinMode(pinSet, INPUT_PULLUP);
pinMode(pinOk, INPUT_PULLUP);
pinMode(pinVoltage, INPUT);
pulseSensor.analogInput(PulseWire);
pulseSensor.setThreshold(Threshold);
pulseSensor.begin();
if (!SD.begin(10)) {
while (1);
}
display.begin(SSD1306_SWITCHCAPVCC, OLED_Address);
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(30, 20);
display.println("START");
display.setTextSize(1);
display.setCursor(30, 40);
display.println("Tekan Menu");
display.display();
delay(3000);
display.clearDisplay();
}
void loop() {
readBpm();
readVoltage();
kriteria();
bacaSetup();
saveData();
}
void readBpm() {
bpm = pulseSensor.getBeatsPerMinute();
}
void readVoltage() {
vAdcVoltage = analogRead(pinVoltage);
vModul = (vAdcVoltage * 5.0) / 1024.0;
hasilVoltage = vModul / (7500 / (30000 + 30000));
}
void kriteria() {
isNormal = false;
if (saveGender == 0 && (saveUmur >= 0 && saveUmur <= 10)) {
isNormal = (bpm >= 100 && bpm <= 160);
} else if (saveGender == 0 && (saveUmur >= 11 && saveUmur <= 17)) {
isNormal = (bpm >= 80 && bpm <= 140);
} else if (saveGender == 0 && saveUmur >= 18) {
isNormal = (bpm >= 60 && bpm <= 140);
} else if (saveGender == 1 && (saveUmur >= 0 && saveUmur <= 10)) {
isNormal = (bpm >= 105 && bpm <= 160);
} else if (saveGender == 1 && (saveUmur >= 11 && saveUmur <= 17)) {
isNormal = (bpm >= 80 && bpm <= 150);
} else if (saveGender == 1 && saveUmur >= 18) {
isNormal = (bpm >= 60 && bpm <= 140);
}
}
void saveData() {
myFile = SD.open("myfile.txt", FILE_WRITE);
if (myFile) {
myFile.println("BPM: "+String(bpm));
myFile.println(" ");
myFile.close();
}
}
void bacaSetup() {
if (Ok == 0 && lockOk == 0) {
lockOk = 1;
}
if (Ok != 0 && lockOk == 1) {
lockOk = 0;
display.clearDisplay();
dis = 1;
}
if (dis == 1) {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("GENDER:");
if (gender == 0) {
display.setCursor(0, 30);
display.println("Laki-Laki");
} if (gender == 1) {
display.setCursor(0, 30);
display.println("Perempuan");
}
display.display();
if (Set == 0 && lockSet == 0) {
lockSet = 1;
}
if (Set != 0 && lockSet == 1) {
display.clearDisplay();
lockSet = 0;
gender++;
if (gender > 1) {
gender = 0;
}
}
if (Ok == 0 && lockOk == 0) {
lockOk = 1;
}
if (Ok != 0 && lockOk == 1) {
lockOk = 0;
saveGender = gender;
display.clearDisplay();
dis = 2;
}
}
if (dis == 2) {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0, 0);
display.println("SET UMUR:");
display.setCursor(0, 30);
display.println(umur);
display.display();
if (Set == 0 && lockSet == 0) {
lockSet = 1;
}
if (Set != 0 && lockSet == 1) {
display.clearDisplay();
lockSet = 0;
umur++;
if (umur > 65) {
umur = 0;
}
}
if (Ok == 0 && lockOk == 0) {
lockOk = 1;
}
if (Ok != 0 && lockOk == 1) {
lockOk = 0;
saveUmur = umur;
display.clearDisplay();
dis = 3;
}
}
if (dis == 3) {
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(45, 0);
display.println(bpm);
display.setTextSize(2);
if (saveGender == 0) {
display.setCursor(0, 25);
display.println("L>");
} if (saveGender == 1) {
display.setCursor(0, 25);
display.println("P>");
}
display.setCursor(30, 25);
display.println(String(saveUmur) + " tahun");
if (isNormal) {
display.setCursor(0, 50);
display.println("Normal");
} else {
display.setCursor(0, 50);
display.println("Abnormal");
}
display.display();
}
}