SOURCE CODE GUI DETAK DETAK JANTUNG
Program di bagian Rx bertujuan untuk menampilkan sinyal dari sensor detak jantung yang diterima diterima di bagian penerima penerima Xbee. Program GUI ini ingin menampilkan menampilkan detak jantung secara secara real time dari sensor detak jantung. Source code di bagian RX ini terdiri dari beberapa fungsi antara lain: 1. esain GUI !. Pengaturan port Pengaturan port ". Pengaturan menampilkan grafik pulsa detak jantung #. Pengaturan menampilkan $P% dari detak jantung
A.
MAIN PROGRAM
&' ()I* PR+GR,% -+R* -I() Pulse*ensor,mped/,rduino0xx ,RUI+ 2+3 ()3 PU4*3 ,(, -I+- I* *2,43,$43 -I() *2R+44$,R ,( $+((+% +5 *2R33 PR3** 6*6 +R 6s6 37 (+ *,83 *,83 , PI2(UR3 PI2(UR3 +5 ()3 *2R33 I *3(2) 5+43R 9.jpg %,3 $7 ;+34 %URP)7 ,UGU*(< !=1! '& import processing.serial.'> P5ont font> *crollbar scale$ar>
*erial port>
int *ensor> int I$I>
&& )+4* PU4*3 *3*+R ,( ,(, , 5R+% ,RUI+ && )+4* (I%3 $3(-3 )3,R( )3,R($3,( $3,(* * 5R+% ,RUI+
int $P%>
&& )+4* )3,R( R,( R,(3 3 8, 8,4U3 4U3 5R+% ,RUI+
int?@ RaA7>
&& )+4* )3,R($3,( )3,R($3,( -, -,835+R% 835+R% ,( ,(, , $35+R3 *2,4IG
int?@ *caled7> *caled 7> && U*3 (+ P+*I( P+*I(I+ I+ *2,43 )3,R($3,( -, -,835+R% 835+R%
int?@ rate>
&& U*3 (+ P+*I(I+ $P% ,(, -,835+R%
float Boom> float offset>
&& U*3 -)3 *2,4IG PU4*3 -,835+R% (+ PU4*3 -I+&& U*3 -)3 *2,4IG PU4*3 -,835+R% (+ PU4*3 -I+-
color eggsCell D color9!EE< !E"< !#F> int Ceart D => && (Cis ariable times tCe Ceart image 6pulse6 on screen && ()3*3 8,RI,$43* 3(3R%I3 ()3 *IH3 +5 ()3 ,(, -I+-* int Pulse-indoA-idtC D #=> int Pulse-indoA)eigCt D E1!> int $P%-indoA-idtC D 1F=> int $P%-indoA)eigCt D "#=> boolean beat D false> adanced
&& set ACen a Ceart beat is detected< tCen cleared ACen tCe $P% grapC is
$lok ini adalaC blok inisialisasi program GUI. Command yang berada dalam blok ini digunakan untuk mengatur ukuran dari blok GUI
oid setup9 J siBe9K==< L==> && *tage siBe frameRate91==> font D load5ont9M,rial0$old%(0!#.lAM> text5ont9font> text,lign923(3R> rect%ode923(3R> ellipse%ode923(3R> && *crollbar constructor inputs: x && set parameters for tCe scale bar RaA7 D neA int?Pulse-indoA-idtC@> *caled7 D neA int?Pulse-indoA-idtC@> rate D neA int ?$P%-indoA-idtC@>
&& initialiBe raA pulse Aaeform array && initialiBe scaled pulse Aaeform array && initialiBe $P% Aaeform array
Boom D =.KE>
&& initialiBe scale of Ceartbeat AindoA
&& set tCe isualiBer lines to = for 9int iD=> iNrate.lengtC> iOOJ rate?i@ D EEE>
&& Place $P% grapC line at bottom of $P% -indoA
for 9int iD=> iNRaA7.lengtC> iOOJ RaA7?i@ D CeigCt&!> && initialiBe tCe pulse AindoA data line to 8&!
&& G+ 5I ()3 ,RUI+ println9*erial.list9>
&& print a list of aailable serial ports
&& cCoose tCe number betAeen tCe ?@ tCat is connected to tCe ,rduino port D neA *erial9tCis< *erial.list9?=@< 11E!==> && make sure ,rduino is talking serial at tCis baud rate port.clear9>
&& flusC buffer
port.bufferUntil96Qn6> && set buffer full flag on receipt of carriage return oid draA9 J background9=> no*troke9> && R,- +U( ()3 PU4*3 -I+- , $P% -I+- R32(,G43* fill9eggsCell> && color for tCe AindoA background rect9!EE rect9L==<"FE<$P%-indoA-idtC<$P%-indoA)eigCt> $lok ini juga digunakan untuk mengatur GUI dari program. i blok terakCir< terdapat set command untuk pengaturan ke port ,rduino.
&& R,- ()3 PU4*3 -,835+R% && prepare pulse data points RaA7?RaA7.lengtC01@ D 91=!" 0 *ensor 0 !1!> && place tCe neA raA datapoint at tCe end of tCe array Boom D scale$ar.getPos9>
&& get current Aaeform scale alue
offset D map9Boom<=.E<1<1E=<=>
&& calculate tCe offset needed at tCis scale
for 9int i D => i N RaA7.lengtC01> iOO J RaA7?i@ D RaA7?iO1@>
&& moe tCe pulse Aaeform by && sCifting all raA datapoints one pixel left
float dummy D RaA7?i@ ' Boom O offset>
&& adjust tCe raA data to tCe selected scale
*caled7?i@ D constrain9int9dummy<## && transfer tCe raA data array to tCe scaled array stroke9!E=<=<=>
&& red is a good color for tCe pulse Aaeform
no5ill9> begin*Cape9>
&& using begin*Cape9 renders fast
for 9int x D 1> x N *caled7.lengtC01> xOO J ertex9xO1=< *caled7?x@>
&&draA a line connecting tCe data points
end*Cape9> $lok ini digunakan untuk mengatur parameter grafik dari waveform yang didapat dari pengukuran detak jantung. (erdapat command untuk mengatur Aarna dan scaling dari grafik waveform. $lok ini berfungsi untuk menggampar output pulse waveform dari sensor
&& R,- ()3 $P% -,83 5+R% && first< sCift tCe $P% Aaeform oer to fit t Cen next data point only ACen a beat is found if 9beat DD trueJ && moe tCe Ceart rate line oer one pixel eery time tCe Ceart beats beat D false>
&& clear beat flag 9beat flag Aaset in serial3ent tab
for 9int iD=> iNrate.lengtC01> iOOJ rate?i@ D rate?iO1@>
&& sCift tCe bpm 7 coordinates oer one pixel to tCe left
&& tCen limit and scale tCe $P% alue
$P% D min9$P%
&& limit tCe CigCest $P% alue to !==
float dummy D map9$P%<= && map it to tCe Ceart rate AindoA 7 rate?rate.lengtC01@ D int9dummy>
&& set tCe rigCtmost pixel to tCe neA data point alue
&& GR,P) ()3 )3,R( R,(3 -,835+R% stroke9!E=<=<=>
&& color of Ceart rate grapC
stroke-eigCt9!>
&& tCicker line is easier to read
no5ill9> begin*Cape9> for 9int iD=> i N rate.lengtC01> iOOJ ertex9iOE1=< rate?i@>
&& ariable 6i6 Aill take tCe place of pixel x position
&& display Cistory of Ceart rate datapoints
end*Cape9> $lok ini berfungsi untuk menampilan $P% 9 beat per minute dari respon sensor detak jantung. && R,- ()3 )3,R( , %,7$3 %,3 I( $3,( fill9!E=<=<=> stroke9!E=<=<=> && tCe 6Ceart6 ariable is set in serial3ent ACen arduino sees a beat Cappen Ceart00>
&& Ceart is used to time CoA long tCe Ceart grapCic sAells ACen your Ceart beats
Ceart D max9Ceart<=> if 9Ceart =J stroke-eigCt9F>
&& don6t let tCe Ceart ariable go into negatie numbers && if a beat Cappened recently< && make tCe Ceart big
smootC9> && draA tCe Ceart AitC tAo beBier cures beBier9AidtC01== beBier9AidtC01== stroke-eigCt91>
&& reset tCe stroke-eigCt for next time
$lok ini berfungsi untuk menggambarkan bentuk jantung dalam GUI dan membuat animasi detak jantung. GUI ini berCubungan dengan ,rduino. ;adi< detak jantung di GUI akan beranimasi seirama dengan respon yang diterima oleC sensor.
&& PRI( ()3 ,(, , 8,RI,$43 8,4U3* fill9eggsCell>
&& get ready to print text
text9MProject % %edisM
&& tell tCem ACat you are
text9MI$I M O I$I O Mm*M
&& print tCe time betAeen Ceartbeats in m*
text9$P% O M $P%M
&& print tCe $eats Per %inute
text9MPulse -indoA *cale M O nf9Boom<1 && sCoA tCe current scale of Pulse -indoA
&& + ()3 *2R+44$,R ()IG* scale$ar.update 9mouseX< mouse7> scale$ar.display9>
&& &&end of draA loop $lok ini berfungsi untuk merancang desain GUI dengan menambaCkan teks sesuai yang diinginkan B.
CAPTURE IMAGE
oid mousePressed9J scale$ar.press9mouseX< mouse7> oid mouseReleased9J scale$ar.release9> oid keyPressed9J sAitcC9keyJ case 6s6: && pressing 6s6 or 6*6 Aill take a jpg of tCe processing AindoA case 6*6: sae5rame9MCeart4igCt0SSSS.jpgM> && take a sCot of tCatT break> default: break>
$lok ini berfungsi untuk mengambil gambar dari window GUI. C.
SCALE BAR
&' ()I* *2R+44$,R +$;32( I* $,*3 + ()3 +3 5R+% ()3 $++ MProcessingM by Reas and 5ry '& class *crollbarJ int x && tCe x and y coordinates float sA< sC> && AidtC and CeigCt of scrollbar float pos> && position of tCumb float pos%in< pos%ax> && max and min alues of tCumb boolean rolloer> && true ACen tCe mouse is oer boolean locked> && true ACen it6s tCe actie scrollbar float min8al< max8al> && min and max alues for tCe tCumb *crollbar 9int xp< int yp< int A< int C< float mi< float maJ && alues pass ed from tCe constructor x D xp> y D yp> sA D A> sC D C> min8al D mi> max8al D ma> pos D x 0 sC&!> pos%in D x0sA&!> pos%ax D x O sA&!> && 0 sC> && updates tCe 6oer6 boolean and position of tCumb oid update9int mx< int my J if 9oer9mx< my DD trueJ rolloer D true> && ACen tCe mouse is oer tCe scrollbar< rolloer is true else J rolloer D false> if 9locked DD trueJ pos D constrain 9mx< pos%in< pos%ax> && locks tCe tCumb so tCe mouse can moe off and still update oid press9int mx< int myJ if 9rolloer DD trueJ locked D true> && ACen rolloer is true< pressing tCe mouse button Aill lock tCe scrollbar on elseJ locked D false> && resets tCe scrollbar to neutral oid release9J
locked D false> && returns true if tCe cursor is oer tCe scrollbar boolean oer9int mx< int myJ if 99mx x0sA&! 9mx N xOsA&! 9my y0sC&! 9my N yOsC&!J return true> elseJ return false> && draAs tCe scrollbar on tCe screen oid display 9J no*troke9> fill9!EE> rect9x< y< sA< sC> && create tCe scrollbar fill 9!E=<=<=> if 99rolloer DD true VV 9locked DD trueJ stroke9!E=<=<=> stroke-eigCt9F> && make tCe scale dot bigger if you6re on it ellipse9pos< y< sC< sC> && create tCe scaling dot stroke-eigCt91> && reset stroke-eigCt && returns tCe current alue of tCe tCumb float getPos9 J float scalar D sA & sA> && 9sA 0 sC&!> float ratio D 9pos09x0sA&! ' scalar> float p D min8al O 9ratio&sA ' 9max8al 0 min8al> return p> $lok ini berfungsi untuk penskalaan GUI dan menambCakan fitur0 fitur seperti scrollbar pada program GUI. D.
SERIAL EVENT
oid serial3ent9*erial portJ *tring inata D port.read*tringUntil96Qn6> inata D trim9inata> && cut off ACite space 9carriage return if 9inata.cCar,t9= DD 6*6J && leading 6*6 for sensor data inata D inata.substring91> && cut off tCe leading 6*6 *ensor D int9inata> && conert tCe string to usable int if 9inata.cCar,t9= DD 6$6J && leading 6$6 for $P% data inata D inata.substring91> && cut off tCe leading 6$6 $P% D int9inata> && conert tCe string to usable int beat D true> && set beat flag to adance Ceart rate grapC Ceart D !=> && begin Ceart image 6sAell6 timer if 9inata.cCar,t9= DD 6W6J && leading 6W6 means I$I data inata D inata.substring91> && cut off tCe leading 6W6 I$I D int9inata> && conert tCe string to usable int
Program ini berfungsi untuk pembacaan sensor yang diterima oleC ,rduino.