1. Program Arduino Uno
#include <SoftwareSerial.h> #define DEBUG true
SoftwareSerial ESP8266(9,10); #define SSID "Ulos"
#define PASS "usaha"
#define IP "184.106.153.149"
String msg = "GET https://api.thingspeak.com/update?api_key=17X9AW5NSIIAWX**"; int error;
int pulsePin = A0; int LedPin = 13; volatile int Sinyal; volatile int BPM; volatile boolean Pulse = false; volatile boolean QS = false; volatile int IBI = 600; const int rata2 = 10;
volatile int tampung[rata2]; volatile int P =512; volatile int T = 512; volatile int ambang = 525; volatile int amp = 100; volatile unsigned long awalHitung = 0; volatile unsigned long waktuAkhir = 0; volatile boolean denyutPertama = true; volatile boolean denyutKedua = false; static boolean serialVisual = true; void setup() { Serial.println("Menghubungkan..."); Serial.begin(115200); ESP8266.begin(115200); Serial.println("AT"); ESP8266.println("AT"); ESP8266.println("AT+RST"); delay(1000); if(ESP8266.find("OK")){
Serial.println("Modul WiFi Terdeteksi"); konekWiFi(); } interupsi(); } void loop(){ start: error=0; updatebeat(); Serial.print("BPM = "); Serial.println(BPM); Serial.print("Sinyal = "); Serial.println(Sinyal); if (error==1){ goto start; }
} void updatebeat(){ String cmd = "AT+CIPSTART=\"TCP\",\""; cmd += IP; cmd += "\",80"; Serial.println(cmd); ESP8266.println(cmd); if(ESP8266.find("Error")){ return; } cmd = msg ; cmd += "&field1="; cmd += BPM; cmd += "\r\n"; Serial.print("AT+CIPSEND="); ESP8266.print("AT+CIPSEND="); Serial.println(cmd.length()); ESP8266.println(cmd.length()); if(ESP8266.find(">")){ Serial.print(cmd); ESP8266.print(cmd); } else{ Serial.println("AT+CIPCLOSE"); ESP8266.println("AT+CIPCLOSE"); error=1; } } boolean konekWiFi(){
Serial.println("Menyalakan Mode WiFi : Station"); ESP8266.println("AT+CWMODE=1"); delay(2000); Serial.println("Menghubungkan ke WiFi ..."); String cmd="AT+CWJAP=\""; cmd+=SSID; cmd+="\",\""; cmd+=PASS; cmd+="\""; Serial.println(cmd); ESP8266.println(cmd); // delay(5000); if(ESP8266.find("OK")){ Serial.println("OK"); return true; } else{ return false; } } void interupsi(){ TCCR2A = 0x02; TCCR2B = 0x06; OCR2A = 0X7C; TIMSK2 = 0x02; sei(); } ISR(TIMER2_COMPA_vect){ cli(); Sinyal = analogRead(pulsePin); awalHitung += 2; int N = awalHitung - waktuAkhir;
if(Sinyal < ambang && N > (IBI/5)*3){ if (Sinyal < T){ T = Sinyal;
} }
if(Sinyal > ambang && Sinyal > P){ P = Sinyal; } if (N > 250){
if ( (Sinyal > ambang) && (Pulse == false) && (N > (IBI/5)*3) ){ Pulse = true;
digitalWrite(LedPin,HIGH); IBI = awalHitung - waktuAkhir; waktuAkhir = awalHitung; if(denyutKedua){ denyutKedua = false; for(int i=0; i<=rata2-1; i++){ tampung[i] = IBI; } } if(denyutPertama){ denyutPertama = false; denyutKedua = true; sei(); return; } word runningTotal = 0; for(int i=0; i<=rata2-2; i++){ tampung[i] = tampung[i+1]; runningTotal += tampung[i]; } tampung[rata2-1] = IBI; runningTotal += tampung[rata2-1]; runningTotal /= rata2; BPM = 60000/runningTotal; QS = true; } }
if (Sinyal < ambang && Pulse == true){ digitalWrite(LedPin,LOW); Pulse = false; amp = P - T; ambang = amp/2 + T; P = ambang; T = ambang; } if (N > 2500){ ambang = 512; P = 512; T = 512; waktuAkhir = awalHitung; denyutPertama = true; denyutKedua = true; } sei(); }
2. Program Android (Form Main)
#Region Project Attributes #ApplicationLabel: C-BPM! #VersionCode: 1
'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: unspecified
#CanInstallToExternalStorage: False #End Region
#Region Activity Attributes #FullScreen: False #IncludeTitle: True #End Region Sub Process_Globals End Sub Sub Globals Private LV As ListView
Private TXT_NAMA, TXT_UMUR As EditText End Sub
Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("registrasi") Activity.AddMenuItem("Tentang","tentang") End Sub Sub Activity_Resume End Sub
Sub Activity_Pause (UserClosed As Boolean) End Sub
Sub Button1_Click
If TXT_NAMA.Text = "" Then TXT_NAMA.RequestFocus Else IF TXT_UMUR.Text = "" Then TXT_UMUR.RequestFocus Else Data.Nama = TXT_NAMA.Text Data.Umur = TXT_UMUR.Text StartActivity(Data) End If End Sub Sub tentang_Click StartActivity(tentang) End Sub
3. Program Android (Form Data)
#Region Activity Attributes #FullScreen: False #IncludeTitle: True #End Region Sub Process_Globals Dim HTTP As HttpJob Dim JP As JSONParser
Dim Nama, Umur As String Dim T As Timer
End Sub Sub Globals
Private LV As ListView Private lbl_nama As Label Private lbl_umur As Label Private lbl_kategori As Label Private lbl_kesimpulan As Label End Sub
Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("main")
T.Initialize("T", 5000) T.Enabled = True
ProgressDialogShow2("Memuat Data...", False) lbl_nama.Text = Nama
lbl_umur.Text = Umur Dim Temp As Int Temp = Umur
If Temp >= 2 And Temp <= 10 Then lbl_kategori.Text = "Anak-anak" Else
lbl_kategori.Text = "Remaja / Dewasa" End If End Sub Sub T_Tick HTTP.Initialize("LOAD_DATA", Me) HTTP.Download("https://api.thingspeak.com/channels/281489/fields/1.json") End Sub
Sub JobDone(JOB As HttpJob) If JOB.Success Then
If JOB.JobName = "LOAD_DATA" Then JP.Initialize(JOB.GetString) Ambil_Data(JP.NextObject) End If End If JOB.Release End Sub
Sub Ambil_Data(Datas As Map) LV.Clear
Dim NMR, NILAI, TGL As String Dim Data1 As List
Dim Data2 As Map
Data1 = Datas.GetValueAt(1) Dim Rat = 0 As Int
For i = Data1.Size - 1 To Data1.Size - 10 Step -1 Data2 = Data1.Get(i)
NMR = Data2.GetValueAt(1) NILAI = Data2.GetValueAt(2) TGL = Data2.GetValueAt(0)
LV.AddTwoLines(NMR & ". " & "BPM = " & NILAI, "Tanggal : " & TGL) Rat = Rat + NILAI
Next
ProgressDialogHide Rat = Rat / 10
If lbl_kategori.Text = "Anak-anak" Then If Rat < 70 Then
lbl_kesimpulan.Text = "Denyut jantung Kamu Dibawah Normal, Kamu disarankan untuk istirahat yang cukup. Jangan melakukan banyak aktifitas!"
else If Rat > 110 Then
lbl_kesimpulan.Text = "Denyut jantung kamu Diatas Normal, Kamu perlu istirahat yang cukup agar denyut jantungmu kembali normal."
Else
lbl_kesimpulan.Text = "Denyut jantung kamu Normal. Silahkan beraktifitas!"
End If
else if lbl_kategori.Text = "Remaja / Dewasa" Then If Rat < 60 Then
lbl_kesimpulan.Text = "Denyut jantung Kamu Dibawah Normal, Kamu disarankan untuk istirahat yang cukup. Jangan melakukan banyak aktifitas!" else If Rat > 100 Then
lbl_kesimpulan.Text = "Denyut jantung kamu Diatas Normal, Kamu perlu istirahat yang cukup agar denyut jantungmu kembali normal."
Else
lbl_kesimpulan.Text = "Denyut jantung kamu Normal. Silahkan beraktifitas!"
End If End If
lbl_kesimpulan.Text = lbl_kesimpulan.Text & " (Denyut Jantung kamu " & Rat & ")" End Sub
4. Program Android (Form tentang)
#Region Activity Attributes #FullScreen: False
#IncludeTitle: True #End Region
Sub Process_Globals
'These global variables will be declared once when the application starts. 'These variables can be accessed from all modules.
End Sub Sub Globals
'These global variables will be redeclared each time the activity is created. 'These variables can only be accessed from this module.
End Sub
Sub Activity_Create(FirstTime As Boolean) Activity.LoadLayout("tentang")
End Sub
Sub Activity_Resume End Sub
Sub Activity_Pause (UserClosed As Boolean) End Sub