a. Chương trình chính
Begin
Khởi tạo các chân I/O, tốc độ
baud, thiết lập timer, khai báo
ngắt EXT0
Chạy timer 20ms
Chờ ngắt ngoải EXT0 ở mức cao
Hình 3.1. Lưu đồ thuật toán chương trình chính.
Trong chương trình chính, ban đầu sẽ khởi tạo các chân I/O, tốc độ baud để giao tiếp với Modul SIM900 và Xbee ZB24, thiết lập timer tràn 20ms sử dụng để đếm thời gian giữa 2 nhịp tim, từ đó tính ra số nhịp tim mỗi phút. Khai báo ngắt EXT0 là ngắt ngoài. Sau đó chương trình khởi chạy timer và luôn chạy trong vòng lặp chờ ngắt ngoài.
41 b. Chương trình timer Begin Chạy timer 20ms Timer tràn? đúng Tăng biến đếm nhịp tim lên 1 (beat++) sai End Hình 3.2. Chương trình timer.
Timer sẽ tràn sau 20ms, sau mỗi lần timer tràn, biến đếm thời gian giữa hai nhịp tim sẽ được cộng thêm 1. Căn cứ vào biến đếm này, hệ thống sẽ tính toán được số nhịp tim của người sử dụng trên mỗi phút.
42
c. Chương trình ngắt ngoài
Begin
Đọc nhiệt độ từ cảm biến DS18B20
Lấy 3000 chia cho số biến đếm nhịp tim đã
đếm trong timer (60000/(20*beat))
Thiết đặt lại biến đếm nhịp tim lại bằng 0
beat=0
End
Nhịp tim hay thân nhiệt gặp vấn đề?
Đúng Gửi tin nhắn đến số điện thoại đặt sẵn để thông báo Sai
Hình 3.3. Chương trình ngắt ngoài.
Khi có mức cao tại chân EXT0 (Chân D2) của Arduino Mega2560, tương đương với việc có 1 xung nhịp tim được đưa về từ cảm biến, chương trình sẽ nhảy vào ngắt và thực hiện đọc nhiệt độ từ DS18B20, sau đó chương trình sẽ lấy biến đếm nhịp tim đang đếm trong timer (beat) và căn cứ vào biến đó để tính ra số nhịp tim bằng công thức:
ℎị = 60000
43
Sau khi đã tính được nhịp tim trên mỗi phút của người sử dụng, biến đếm (beat) được thiết lập lại bằng 0 để đếm lại với xung nhịp tim tiếp theo.
Căn cứ vào nhiệt độ và nhịp tim đã nhận và tính toán được, hệ thống sẽ gửi tin nhắn về số điện thoại đã đặt sẵn để cảnh báo về tình hình sức khỏe nếu nhịp tim lớn hơn 130 nhịp (nhịp tim tăng) hay nhỏ hơn 60 nhịp (nhịp tim giảm) hay thân nhiệt tăng cao quá 38oC hoặc thấp quá 36oC.