void loop() {
//===========Selector Sensitifity============
int Sens=digitalRead(Cal);
if (Sens==0){
ref=0;
data=data+1;
delay(100);
if(data>=3){
data=0;
}
delay(10);
Menerima input dari push button, ketika logika 0 maka data sensitifitas dirubah menjadi 0.5 ,1.0
atau 2.0.
//===========Selector Sensitifity=============
if(Serial.available()){
char perintah = Serial.read();
Serial.println(perintah);
if(perintah=='a'){
ref=0;
data=0;
}
if(perintah=='b'){
ref=0;
data=1;
}
if(perintah=='c'){
ref=0;
data=2;
}
}
Menerima input serial dari Delphi ditampung dalam char perintah dan merubah nilai variabel
data sensitifitas.
//==============Sensitifity 0.5===============
if(data==0){
float sinyal = analogRead(Detak);
float tegangan = (sinyal/1023*5)*160-70;
if(ref<=tegangan){
ref=tegangan;
}
else{
ref=ref;
//=========Ketika Terdeteksi Pulsa Naik===========
if ((tegangan > hold)&& (syarat==0)) {
syarat=1;
}
//=========Ketika Terdeteksi Pulsa Turun==========
if ((tegangan < hold) && (syarat==1)) {
digitalWrite(LED, HIGH);
delay(5);
digitalWrite(LED, LOW);
delay(5);
syarat=0;
}
if ((tegangan<=hold)&&(mark==0)){
count=count+1;
if(count==500)
{
count=0;
mark=1;
}
}
if(tegangan>hold){
count=0;
}
if ((tegangan<=hold)&&(mark==1)){
ref=0;
mark=0;
}
}
Serial.print("a");
Serial.print(tegangan,0);
Serial.print("b");
Serial.print("c");
Serial.print(hold,0);
Serial.print("d");
Serial.print("e");
Serial.print(50);
Serial.print("f");
}
Pembacaan data melalui analog read A2 dikonversi dalam bentuk ratusan dan dikirm melalui
Serial dengan data string (a+data+b). Data referensi didapatkan melalui autodeteksi sinyal input
dan dikirim dalam variabel hold. Savety 5 secon bekerja ketika sinyal tidak memotong referensi
selama 5 detik dan referensi direset menjadi 0 dan memulai auto deteksi ulang.
Inisialisasi Port
void setup() {
Serial.begin(115200);
pinMode(10, OUTPUT);//tachicardia
pinMode(6, OUTPUT);//normal
pinMode(2, OUTPUT);//bradycardia
digitalWrite(10, LOW);
digitalWrite(6, LOW);
digitalWrite(2, LOW);
}
void loop() {
if(Serial.available()){
char perintah = Serial.read();
Serial.println(perintah);
if (perintah=='n'){
digitalWrite(10, HIGH);
digitalWrite(6, LOW);
digitalWrite(2, LOW);
}
else if (perintah=='b'){
digitalWrite(10, LOW);
digitalWrite(6, HIGH);
digitalWrite(2, LOW);
}
else if (perintah=='t'){
digitalWrite(10, LOW);
digitalWrite(6, LOW);
digitalWrite(2, HIGH);
}
else{
digitalWrite(10, LOW);
digitalWrite(6, LOW);
digitalWrite(2, LOW);
}
}
}
Pembacaan Serial melalui port USB, data masuk disimpan dalam char perintah. Ketika data
terkirim bernilai string “n” maka LED normal menyala, ketika string yang diterima “t” maka LED
tachycardia menyala, ketika string yang diterima “b” maka LED bradycardia menyala. Ketika data
string yang diterima selain string diatas maka semua led mati.
//===================CONNECT===================
procedure TForm1.Connect1Click(Sender: TObject);
begin
ComPort1.Port:='COM3';
ComPort1.Open;
ComPort2.Port:='COM8';
ComPort2.Open;
timer1.Enabled:=true;
timer2.Enabled:=true;
Label13.Caption:='Connected';
Label13.Font.Color:=cllime;
end;
Ketika push button connect pada Delphi ditekan maka akan membuka komunikasi serial pada
COM3 dan COM8. Mengaktifkan Timer1 untuk perhitungan BPM dan Timer2 sebagai refresh
waktu tampil BPM.
Listing Program Tampilan Sinyal ECG :
xval:=xval+range;
Data serial diterima melalui com data packet Delphi. Ditampung dalam variabel tegangan
kemudian diplot pada chart1 series 1. Tegangan ditampilkan pada label 5 dan ditulis pada Memo.
Pengaturan nilai xval disesuaikan sesuai dengan sensitifitas dan lebar grafik.
Listing Program Perhitungan Detak :
end;
Kondisi awal variabel state bernilai 0. Ketika kondisi sinyal lebih tinggi dari referensi maka varibel
state berubah nilai menjadi 1, ketika sinyal lebih rendah dari referensi dan state bernilai 1 maka
detak bertambah 1 dan varibel state kembali bernilai 0.
Program Tampilan Referensi :