Forum - MCS Electronics

 

FAQFAQ SearchSearch RegisterRegister Log inLog in

GUI-O ECG electrocardiogram

 
Post new topic   Reply to topic    www.mcselec.com Forum Index -> Share your working BASCOM-AVR code here
View previous topic :: View next topic  
Author Message
matjazs

Bascom Member



Joined: 08 Nov 2016
Posts: 86

PostPosted: Mon Jul 05, 2021 2:33 pm    Post subject: GUI-O ECG electrocardiogram Reply with quote

Here is an very simple ECG Electro Cardio Gram made with an Arduino UNO and an AD8232 sensor.
https://www.aliexpress.com/item/32989203202.html?spm=a2g0s.9042311.0.0.27424c4dQYUJ6C
It can be created with the BASCOM demo.

The Arduino UNO uses an analog (PinC.1) input that immediately sends value information after measurement via the serial port (Bluetooth modul HC06) to the GUI-O application (CH-Graph object) on the smartphone.
www.gui-o.com
https://play.google.com/store/apps/details?id=com.guio.guioapp

Result is on Youtube video - screenvideo from my phone.
https://www.youtube.com/watch?v=9sYq7rQF0fU

The schematic diagram, screenshot, ECG.jpg picture and ECG-Cardio.bas file is in the attachment.

Code:
'------------------------------------------------------------------------------
' ECG Electro Cardio Gram
' 2021-07-01 (c)gammda
' Ver-1
' CardioGraph
' Use Arduino UNO analog input A1 (pinc.1) and AD8232 modul
' .-----------------------.
' |ATMEGA328              |
' |Clock 11.059200MHz     |
' |Baud:19200             |
' '-----------------------'
' 1.Install GUI-O application on smartphone
'   www.gui-o.com or https://play.google.com/store/apps/details?id=com.guio.guioapp
' 2.Start GUI-O and make Bluetooth connection with arduino board
' 3.Press on start GUI-O button
'------------------------------------------------------------------------------

$regfile = "m328pbdef.dat"
$crystal = 11059200
'$baud = 9600                                                'default baudrate for Bluetooth HC06
$baud = 19200                                               'NOTE!  For proper connection, it is necessary to set 19200 on the bluetooth module HC06.
                                                            'For first test you can use default baudrate 9600

Config Serialin = Buffered , Size = 120

Const Timer1reload = 43200
Config Timer1 = Timer , Prescale = 256
Load Timer1 , Timer1reload
On Ovf1 Timer1_isr
Enable Timer1
Start Timer1

Enable Interrupts


'-ADC--------------------------------------------------------------------------
Dim Channel As Byte                                         'A/D conversion
Channel = 1

Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Enable Interrupts
'------------------------------------------------------------------------------
$lib "GetToken.Lib"
$external Gettoken
Declare Function Gettoken(strinput As String , Byval Bseparator As Byte , Byval Bcount As Byte ) As String
Dim Sep As Byte
Dim Pozicija As Byte
'------------------------------------------------------------------------------

Dim Cardio As Integer
Dim Pulse As Byte
Dim Pulsex As Byte
Pulsex = 60

Dim Timx As Byte
Dim Timy As Byte
Dim Pul1 As Byte
Dim Soun_d As Bit
Soun_d = 0

Dim Flags As Bit
Flags = 0
Dim Data_key As Byte
Dim Znak As String * 15
Dim Rdata As String * 100
Dim Init As String * 4

Gosub Guio_ini                                              'start initalization procedure on GUI-O - write objects on screen of smart phone
'------------------------------------------------------------------------------
Main:
Do
  If Ischarwaiting() = 1 Then
   Gosub Read_data
  End If

     Cardio = Getadc(channel)                               'read walue of AD

     If Cardio > 740 Then                                   'sound if amplitude je more than 740
       If Soun_d = 1 Then
         Print "@ton1 EDUR:500"                             'sound appear on smart phone
       End If

       Pul1 = Pul1 + 1                                      'calculate pulse
       If Timy = 4 Then
         Pulse = Pul1 * 10
         Pul1 = 0
         Timy = 0
       End If

     End If

     Print "@ch1 PLI:" ; Chr(34) ; "pl1" ; Chr(34) ; " YP:" ; Chr(34) ; Cardio ; Chr(34)       ' write graph data (AD data) ECG to GUI-O

  If Timx > 1 Then

    Print "@ch0 PLI:" ; Chr(34) ; "pl0" ; Chr(34) ; " PLC:" ; Chr(34) ; "#000000" ; Chr(34) ; " YP:" ; Chr(34) ; Pulse ; Chr(34) ; " XP:" ; Chr(34) ; "0" ; Chr(34)       'Write graph pulse to GUI-O
    Print "@lbpulse TXT:" ; Chr(34) ; Pulse ; Chr(34)       'write numeric value on GUI-O

    Timx = 0
  End If

Loop
End                                                         'End of main cycle
'------------------------------------------------------------------------------
 Read_data:
 Reset Watchdog
 Data_key = Inkey()
 If Data_key = "@" Then Input Rdata Noecho


 Sep = &H20
 Pozicija = 1
 Znak = Gettoken(rdata , Sep , Pozicija)


If Znak = "btsound" Then
   Toggle Soun_d

   If Soun_d = 1 Then
    Print "@btsound BTH:0.25"                               'If sound is ON button outline appear
   Else
    Print "@btsound BTH:0"                                  'If sound is OFF button outline disappear
   End If

End If


Init = Mid(rdata , 1 , 4)
If Init = "init" Then                                       'reading "@init" from GUI-O
  Gosub Guio_ini
End If


Rdata = ""

Return
'-Initialization procedure GUI-O Objects-------------------------------------------------------

Guio_ini:

 Print "@sls 500"                                           'start writting objects
 Print "@cls"                                               'clear screen
 Print "@clh"                                               'clear HW components
 'Print "@clo"                                               'clear orientation
 Print "@guis BGC:#000000 ASR:0.449671"                     'bacground color X-Y ratio
 Print "|SORI UID:sori1 HID:sori ORI:2 SEN:0"
 Waitms 250
 Print "|IM UID:imx X:15 Y:50 W:100 H:100 ROT:0 SHE:0 VIS:1 OPA:1 SCM:2 IP:" ; Chr(34) ; "ECG.jpg" ; Chr(34)       'GUI-O Image ECG.jpg copy to smartphone \Phone\Android\data\com.guio.guioapp\files\Pictures\

 Print "|TON UID:ton1 HID:ton EDUR:1000 TONT:24"            'GUI-O define ton

 Print "|CH UID:ch0 X:65 Y:25 W:72 H:50 BTH:0.1 XTC:10 YTC:8 VIS:1 BSZ:5 DRA:0 BGC:#FFFFFF FGC:#900000 RAD:0 LT:0.15 XMA:5 YMA:8 SHVL:1 VLP:0 CHN:" ; Chr(34) ; "PULSE" ; Chr(34) ; " FFA:" ; Chr(34) ; "font6" ; Chr(34) ; " FSZ:4"
 Print "|CH UID:ch1 X:65 Y:75 W:72 H:50 BTH:0.1 XTC:10 YTC:8 VIS:1 BSZ:200 DRA:0 CHT:2 BMA:0.03 XLO:0 XHI:40000 BGC:#FFFFFF FGC:#900000 RAD:0 LT:0.15 XMA:5 YMA:8 SHVL:1 VLP:0 CHN:" ; Chr(34) ; "ELECTRO CARDIOGRAM" ; Chr(34) ; " FFA:" ; Chr(34) ; "font6" ; Chr(34) ; " FSZ:4"
 'GUI-O graph for pulse and Cardio

 Print "|LB UID:lbpulse X:87 Y:35 ALP:1 ROT:0 SHE:1 FGC:#000000 FFA:" ; Chr(34) ; "font6" ; Chr(34) ; " FSZ:16 TXT:" ; Chr(34) ; "---" ; Chr(34)       'Label for number-pulse
 Print "|LB UID:lbpname X:85 Y:23 ALP:1 ROT:0 SHE:1 FGC:#000000 FFA:" ; Chr(34) ; "font8" ; Chr(34) ; " FSZ:4 TXT:" ; Chr(34) ; "PULSE BMP" ; Chr(34)       'Label for name

 Print "|LB UID:lbname X:2 Y:92 ALP:1 ROT:0 SHE:1 FGC:#FFFFFF FFA:" ; Chr(34) ; "font7" ; Chr(34) ; " FSZ:10 TXT:" ; Chr(34) ; "ECG" ; Chr(34)       'Label general name


 Print "|BT UID:btsound X:22 Y:92 W:10 H:10 ROT:0 RAD:1 SHVR:0.8 SHE:1 SHC:#404040 BGC:#808B96 SBGC:#808B96 FGC:#FFFFFF FSZ:6 BTH:0 FFA:" ; Chr(34) ; "font6" ; Chr(34) ; " TXT:" ; Chr(34) ; "Sound" ; Chr(34) ; " SVAL:" ; Chr(34) ; "Stop" ; Chr(34)
 'Button for sound ON/OFF

 Print "@ch1 PLI:" ; Chr(34) ; "pl1" ; Chr(34) ; " PLC:" ; Chr(34) ; "#000000" ; Chr(34) ; " YP:" ; Chr(34) ; Cardio ; Chr(34) ; " XP:" ; Chr(34) ; "0" ; Chr(34)
 'write data for cardio
 Print "@hls 250"                                           'end writting objects

Return



'-Timer_ISR--------------------------------------------------------------------------------

 Timer1_isr:
   Timx = Timx + 1
   Timy = Timy + 1


  Return

'------------------------------------------------------------------------------------------
Back to top
View user's profile
albertsm

Administrator



Joined: 09 Apr 2004
Posts: 5917
Location: Holland

blank.gif
PostPosted: Wed Jul 07, 2021 9:05 am    Post subject: Reply with quote

Well done !
Looks great. Really nice and simple way to interface. Thanks for sharing and the video Very Happy

_________________
Mark
Back to top
View user's profile Visit poster's website
JC

Bascom Member



Joined: 15 Dec 2007
Posts: 586
Location: Cleveland, OH

usa.gif
PostPosted: Wed Jul 07, 2021 7:50 pm    Post subject: Reply with quote

Nice Job!

JC
Back to top
View user's profile Visit poster's website
hardwaredoc

Bascom Member



Joined: 21 Oct 2005
Posts: 2

germany.gif
PostPosted: Wed Oct 13, 2021 10:04 pm    Post subject: Re: GUI-O ECG electrocardiogram Reply with quote

Nice Projekt,

but where i can find the

GetToken.Lib


best regards

Peter
Back to top
View user's profile
matjazs

Bascom Member



Joined: 08 Nov 2016
Posts: 86

PostPosted: Thu Oct 14, 2021 8:03 am    Post subject: Reply with quote

This is very useful function made from oe9vfj

https://www.mcselec.com/index2.php?option=com_forum&Itemid=59&page=viewtopic&t=2543&highlight=gettoken

With this function you can parse text very simple.
Back to top
View user's profile
hardwaredoc

Bascom Member



Joined: 21 Oct 2005
Posts: 2

germany.gif
PostPosted: Thu Oct 14, 2021 8:06 am    Post subject: Reply with quote

matjazs wrote:
This is very useful function made from oe9vfj

https://www.mcselec.com/index2.php?option=com_forum&Itemid=59&page=viewtopic&t=2543&highlight=gettoken

With this function you can parse text very simple.


Thanks

best regards Very Happy
Back to top
View user's profile
s_sergiu

Bascom Member



Joined: 25 Sep 2006
Posts: 81

blank.gif
PostPosted: Tue Dec 21, 2021 11:45 am    Post subject: Communication issues Reply with quote

Hello matjazs,

I did the project as well.
Programmed the HC-6 at 19200.
The problem I have is that 99% of the time, on two differnet android phones, I get messages like this one:



[/img]

GUI-O used is the latest version from Google Play Store.
Any suggestion on how to solve this ?
Thank you,
Sergiu
Back to top
View user's profile
matjazs

Bascom Member



Joined: 08 Nov 2016
Posts: 86

PostPosted: Tue Dec 21, 2021 9:18 pm    Post subject: Reply with quote

Probably the problem is that the initialization didn't go well. This means you need to reset the microcontroller.
The initialization is also incorrect because you did not copy the "ECG.jpg" image file to your Android device.
There may be something wrong with your Bluetooth module. Sometimes it happens that the Bluetooth module cannot send so many bytes in a short time. It happens that some sign is lost. In this case you need to reduce the baud rate to f.e.9600 or add delay between lines (Waitms 10). But this speed (9600) is not recommended for this case (ECG Cardio).
I have the best experience with the HC06 Bluetooth module.

The new version of GUI-O (v0.11.21) offers that you can change double quotes "with others. I used single quotes '. The initialization procedure is now much more readable - you no longer need to write "Chr(34)".

Code:
Print "@gse COD:0 TSC:39"                                  'Use ' instead of " (chr(34)


I also add a link the image in the initialization process, which means you no longer have to copy the image to your phone. This image will now be automatically copied from the Internet.

Code:
Print "|IM UID:imx X:15 Y:50 W:100 H:100 ROT:0 SHE:0 VIS:1 OPA:1 SCM:2 IP:'https://i.imgur.com/vKnL2LX.jpg'"


Try this new "Cardio1.bas" file, but the old Cardio.bas should work fine too.
Back to top
View user's profile
s_sergiu

Bascom Member



Joined: 25 Sep 2006
Posts: 81

blank.gif
PostPosted: Tue Dec 21, 2021 10:03 pm    Post subject: Reply with quote

Thank you for reply.
I will try tomorrow the new version and let you know
Sergiu
Back to top
View user's profile
s_sergiu

Bascom Member



Joined: 25 Sep 2006
Posts: 81

blank.gif
PostPosted: Tue Dec 21, 2021 10:06 pm    Post subject: Reply with quote

Btw, the arduino uno clone I have is working with xtal of 16Mhz so I suppose I need to readjust the Timer1 reload value ?
Sergiu
Back to top
View user's profile
matjazs

Bascom Member



Joined: 08 Nov 2016
Posts: 86

PostPosted: Tue Dec 21, 2021 10:23 pm    Post subject: Reply with quote

Timer is used for BMP calculation and is not a problem for this warnings, but crystal frequency is. You must change it to 16.000000 MHz.

Code:
$crystal = 16000000


I use hardware with $crystal = 11059200
Back to top
View user's profile
Display posts from previous:   
Post new topic   Reply to topic    www.mcselec.com Forum Index -> Share your working BASCOM-AVR code here All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum
You cannot attach files in this forum
You cannot download files in this forum