Cải tiến chương trình

Một phần của tài liệu [GiaoTrinh]-MicrobitSmartHome (Trang 55 - 61)

Hiện tại, câu lệnh đợi 5 giây là một bất lợi lớn của chương trình. Khi thực hiện câu lệnh đợi, chương trình không thể xử lý thêm được tác vụ nào khác nữa. Với mức độ của chương trình hiện tại, chúng ta chưa kết hợp nhiều thiết bị với nhau nên câu lệnh này vẫn còn có thể sử dụng được. Giả sử, chúng ta tích hợp thêm chức năng nhấn nút cảm ứng để bặt tắt bóng đèn, thì chúng ta không thể nhận được dữ liệu của nút nhấn được nữa. Khi chương trình đang ở câu lệnh đợi 5s, chúng ta không thể kiểm tra được trạng thái của nút nhấn.

Chính vì vậy, chúng ta cần phải tái cấu trúc lại chương trình. Trong cấu trúc mới, chúng ta sẽ không bao giờ cần dùng thêm 1 câu lệnh đợi nào nữa, mà chỉ dùng duy nhất 1 câu lệnh đợi 100ms ở cuối vòng lặp foreverlà đủ.

Như vậy, để tạo một hiệu ứng cập nhật dữ liệu cảm biến ra màn hình LCD mỗi 5s, chúng ta sẽ phải chờ50 lần của 100ms. Chúng ta cần tạo ra một biến đếm, giả

sửa là counter_lcd. Biến này sẽ tăng lên 1 đơn vị cho đến khi nó đạt 500. Lúc này

mạch MicroBit sẽ lấy dữ liệu từ cảm biến và xuất ra màn hình. Chương trình mới của chúng ta được trình bày như Hình 6.7. Một số điểm quan trọng cần lưu ý trong chương trình này là:

1. Để đảm bảo an toàn, chúng ta sẽ cho biến counter_lcd = 0 ở đầu chương trình.

2. Ý nghĩa của chương trình là đợi biến counter_lcd = 50, nhưng chúng takhông được phép dùng câu lệnh while. Hạn chế của nó cũng như câu lệnh pause,

MicroBit cũng không thể làm thêm được tác vụ nào khác nếu bị “mắc kẹt” trong câu lệnh while.Câu lệnh repeatcũng sẽ có hạn chế tương tự. Chúng ta chỉ có thể dùngcâu lệnh điều kiện ifmà thôi.

3. Mặc dù việc đợi 5s cần 50 lần của 100ms, nhưng phép toán so sánh trong câu lệnh điều kiện nên là lớn hơn hoặc bằng thay vì so sánh chính xác 50 lần (phép toán bằng). Lý do là trong tương lai, đôi khi chúng ta lập trình làm thay đổi biến counter_lcd, làm nó lớn hơn 50, thì phép toán bằng sẽ không bao giờ xảy ra nữa. Biến counter_lcd sẽ tăng lên một đơn vị mà không bao giờ bằng 50.

Hình 6.7:Chương trình được cải tiến bằng cách loại bỏ câu lệnh đợi 5 giây

Chương trình trên được chia sẻ ở đường dẫn sau đây:

https://makecode.microbit.org/_ePPDytfgU6uo

Bây giờ, chúng ta sẽ tạo một mới, có tên là TEMP_HUMI_LCD, chuyên để đọc dữ liệu nhiệt độ, độ ẩm và xuất dữ liệu ra LCD. Các bước để tạo ra một hàm được minh họa ở Hình 6.8:Chọn vào Advance, Functions, đặt tên hàm rồi nhấn OK.

Chương trình mới của chúng ta được trình bày ở Hình 6.9: trong khối forever, chúng ta sẽ gọi khối lệnh TEMP_HUMI_LCD. Một ưu điểm rất lớn của cấu trúc mới này, là chúng ta hãy xem như không có câu lệnh nào trong khối forever, và có thể thoải mái tích hợp thêm các ngoại vi khác và lập trình cho nó mà không làm ảnh hưởng đến chức năng mà chúng ta vừa hiện thực xong. Tức là việc cập nhật giá trị nhiệt độ, độ ẩm ra LCD sẽ được thực hiện mỗi 5s một lần, và nó sẽ chạy song song với các chức năng sau này mà chúng ta tích hợp thêm vào hệ thống.

Chỉ có việc tổ chức chương trình độc lập như vậy, chúng ta mới có thể tích hợp nhiều thiết bị vào hệ thống để xây dựng một hệ thống hoàn chỉnh được. Từ bài tiếp theo, chúng ta sẽ sử dụng tiếp chương trình và giữ nguyên kết nối mạch điện của bài trước chứ không tạo mới một project nữa.

Hình 6.9:Cấu trúc của chương trình mới

Chương trình trên được chia sẻ dưới đường dẫn sau đây:

https://makecode.microbit.org/_Rff4y9Xbj3ux

6 Câu hỏi ôn tập

1. Phát biểu nào sau đây là đúng về cảm biến DHT11? A. Cảm biến tích hợp

B. Đo được nhiệt độ và độ ẩm không khí C. Là một dạng thiết bị đầu vào (input) D. Tất cả đều đúng

2. Trước khi truy xuất giá trị của cảm biến DHT11, chúng ta cần làm gì? A. Kéo chân cảm biến lên cao

B. Kéo chân cảm biến xuống thấp C. Truy vấn cảm biến

D. Tất cả đều đúng

3. Thư viện hỗ trợ cho việc lập trình với DHT11 và LCD giới thiệu trong bài là gì? A. DHT11

B. LCD C. NPNBitKit D. Tất cả đều đúng

4. Tại sao không được dùng câu lệnh đợi trong thời gian dài, chẳng hạn như pause(5000)?

A. Hệ thống sẽ không xử lý được thêm trong thời gian đợi B. Không thể đọc được dữ liệu từ một nút nhấn

C. Cả 2 phát biểu trên đúng D. Tất cả đều sai

5. Trong kiến trúc chương trình mới, các câu lệnh nào sau đây được sử dụng? A. Khai báo biến

B. Câu lệnh điều kiện if C. pause(100) (adsbygoogle = window.adsbygoogle || []).push({});

D. Tất cả các câu lệnh trên

6. Để tạo ra một hiệu ứng đợi 5 giây chỉ với một câu lệnh pause(100) ở cuối vòng forever, các bước nào sau đây được sử dụng?

A. Khai báo một biến số

B. Tăng giá trị của biến lên 1 trong forever

C. Kiểm tra xem biến có lớn hơn hoặc bằng 50 hay chưa D. Tất cả đều đúng

7. Lợi ích của việc đóng gói thành hàm (chương trình con là gì)? A. Chương trình ngắn gọn hơn

B. Chương trình dễ quản lý hơn C. Chương trình dễ phát triển hơn D. Có 2 phát biểu đúng

Đáp án 1. D 2. C 3. C 4. C 5. D 6. A 7. D

CHƯƠNG 7

1 Giới thiệu

Trong bài hướng dẫn này, một ứng dụng mô phỏng cửa thông minh sẽ được trình bày: Khi có người mở cửa, sẽ có loa báo hiệu. Ứng dụng này sẽ có 2 phần: cảm biến phát hiện cửa mở, và 1 loa báo hiệu nhỏ (đã trình bày ở bài trước). Một cảm biến thông dụng sẽ được sử dụng trong bài này, như mô tả ở hình bên dưới:

Hình 7.1:Cảm biến mở cửa - Công tắc từ

Cảm biến mở cửa gồm có 2 thành phần, như mô tả ở Hình 7.2: Phần thứ nhất đơn thuần chỉ là một nam châm. Trong khi đó, phần thứ 2 là một dạng công tắc. Tuy nhiên, khác với công tắc cơ, dùng lực tay để nhấn nút, công tắc trong cảm biến mở cửa dùng lực hút từ nam châm để đóng ngắt. Khi 2 thành phần này ở gần nhau (chẳng hạn như cửa đóng), lực hút từ nam châm sẽ đủ lớn để công tắc đóng lại. Khi 2 thành phần này xa nhau (chẳng hạn như cửa mở), thì công tắc sẽ mở. Khi lắp đặt, phần nam châm sẽ được gánh với cánh cửa, do nam châm không có dây và dễ dàng lắp đặt vào phần di động của hệ thống. Trong khi đó, công tắc sẽ được gắn trên thành cửa, như minh họa ở hình bên dưới:

Hình 7.2:Lắp đặt cảm biến cửa trong thực tế

Các mục tiêu của bài hướng dẫn này như sau:

• Làm quen với cảm biến mở cửa.

• Lấy được dữ liệu từ cảm biến và xuất tín hiệu ra loa báo hiệu.

• Xây dựng được ứng dụng “Cửa thông minh”.

Một phần của tài liệu [GiaoTrinh]-MicrobitSmartHome (Trang 55 - 61)