Về bản chất, cảm biến mở cửa chỉ như một công tắc bình thường, nên chúng ta có thể sử dụng chương trình đơn giản như ở Bài 5 để kiểm tra trạng thái của cảm biến mở cửa. Đương nhiên, bạn cần phải kéo chân nối với cảm biến mở cửa (P5) lên mức cao bằng câu lệnhset pull pin P5 to uptrong khối on start của chương trình. Tuy nhiên, nhằm mục đích hỗ trợ bạn đọc trong việc lập trình, trong thư viện NPN- BitKit, chúng tôi tạo thêm các câu lệnh khác tương đương, dễ gọi và dễ nhớ hơn, và quan trọng, chúng tôi đã cấu hình sẵn cho bạn đọc về việc cấu hình 1 chân input ở mức cao. Nói một cách khác, bạn không cần phải cấu hình một tín hiệu đầu vào 2 trạng thái lên mức cao trong khối on start nữa. Trong chương trình ví dụ sau đây,
chúng tôi sử dụng 2 câu lệnh mới để kiểm tra cửa đang đóng hay mở và xuất tín hiệu ra loa báo hiệu như sau:
Hình 7.4:Các câu lệnh được hiện thực thêm trong forever
Chương trình này được chia sẻ ở đường dẫn sau:
https://makecode.microbit.org/_Pzx7k3DtuUMu
Với việc không dùng thêm câu lệnh lặp cũng như câu lệnh đợi, chức năng mà chúng ta mới hiện thực thêm vào hoàn toàn không ảnh hưởng tới những gì đã hiện thực ở bài trước. Đây là một ưu điểm rất lớn của việc tổ chức chương trình theo kiến trúc này. Kiến trúc này được lấy từ ý tưởng đa nhiệm trong hệ điều hành đơn giản.
4 Cải tiến chương trình
Sau khi hiện thực và kiểm tra kĩ chức năng của cảm biến cửa và loa báo động, chúng ta có thể tạo ra một hàm (DOOR_AND_BELL) chuyên cho việc xử lý cảm biến mở cửa và phát tín hiệu ra loa báo động. Hàm này sẽ được gọi trong khối forever. Chương trình của chúng ta lúc này sẽ như sau:
Chương trình trên được chia sẻ ở đường dẫn sau đây:
https://makecode.microbit.org/_Vfx4MKhhuTcM
Tiếp theo chúng ta hoàn toàn có thể đưa những yêu cầu phức tạp hơn để giúp cho ứng dụng mở cửa này trở nên thông minh hơn. Tuy nhiên, các yêu cầu đó sẽ chỉ hiện thực ở trong hàm DOOR_AND_BELL mà thôi, và không làm ảnh hưởng đến các chương trình khác, miễn là chúng ta không sử dụng câu lệnh pause, while hay repeat.
Một ví dụ như sau: Khi mở cửa, loa chỉ kêu tối đa trong 3s mà thôi. Tuy nhiên trong 3s đó, cửa được đóng thì loa sẽ dừng không kêu nữa.
Gợi ý: chúng ta tạo thêm 1 biến đếm counter_bell để tạo hiệu ứng đợi 3s. Nếu như giá trị của biến này còn nhỏ hơn 30 (30 lần của 100ms là 3 giây), thì chúng ta mới cho loa bật lên. Chương trình gợi ý cho ứng dụng này được minh họa ở Hình 7.6.
Hình 7.6:Cải tiến chương trình "Cửa thông minh"
Chương trình trên được chia sẻ ở đường dẫn sau đây:
https://makecode.microbit.org/_EhuAsb7oy2ML
Một số yêu cầu thêm để phát triển cho ứng dụng này có thể kể ra như nếu mở cửa quá 10s mà không đóng lại thì cũng báo hiệu. Hoặc như báo hiệu đơn giản như hiện tại, chúng ta cũng có thể phát 1 bài nhạc nào đó. Tuy nhiên trong trường hợp này, chúng ta cần phải ưu tiên cho loa kết nối với P0, còn cảm biến nhiệt độ độ ẩm có thể chuyển qua vị trí khác.
5 Câu hỏi ôn tập
1. Cảm biến cửa là công tắc đóng mở dựa trên lực tác động gì? A. Lực từ nam châm
B. Lực tay đóng cửa C. Lực cơ do nhấn nút D. Tất cả đều đúng
2. Phần nam châm của cảm biến cửa nên được lắp vào đâu? A. Thành cửa (cố định)
B. Cánh cửa (di động) C. Mạch Microbit D. Tất cả đều đúng
3. Phát biểu nào sau đây là sai?
A. Cần kéo lên chân tín hiệu input khi dùng với câu lệnh digital read B. Cần kéo lên với chân tín hiệu output khi dùng với câu lệnh digital write C. Không cần kéo lên chân tín hiệu khi xài thư viện NPNBitKit
D. Có 1 câu sai
4. Để xuất tín hiệu cho loa nối với chân P4, câu lệnh nào sau đây là phù hợp? A. analog write P4 = 1024
B. digital write P4 = 1 C. Bật loa tại chân P4 ON D. Tất cả đều đúng
5. Các câu lệnh không được phép dùng khi hiện thực chức năng mới trong hệ thống là gì?
A. pause B. repeat C. while
D. Tất cả các câu lệnh trên
6. Các câu lệnh được phép dùng khi hiện thực chức năng mới trong hệ thống là gì?
A. pause B. repeat C. if
D. Tất cả các câu lệnh trên
7. Thứ tự gọi hàm trong khối forever có ảnh hưởng như thế nào đến chức năng của chương trình?
A. Không có ảnh hưởng gì cả
B. Làm cho chương trình thực thi sai tính năng C. Làm cho chương trình chạy chậm hơn D. Làm cho chương trình chạy không ổn định
Đáp án 1. A 2. B 3. B 4. D 5. D 6. C 7. A
CHƯƠNG 8
1 Giới thiệu
Hai thiết bị giới thiệu trong bài này là các thành phần chính trong dự án vườn rau thông minh, một dự án rất thông dụng khi học lập trình trên mạch phần cứng nói chung và mạch Microbit nói riêng. Ở đây, một cảm biến độ ẩm đơn giản sẽ được dùng để giám sát độ ẩm của đất và quyết định bật máy bơm nếu như độ ẩm đó nhỏ hơn một ngưỡng định nghĩa trước.
Hình 8.1:Đo độ ẩm đất với Microbit
Mặc dù đơn giản, cảm biến độ ẩm đất được dựa trên một hiện tượng vật lý, gọi là độ dẫn điện. Do đó, nó mang lại nhiều trải nghiệm thú vị trong việc ánh xạ từ kiến thức vật lý sang lĩnh vực lập trình. Thêm nữa, trong bài này, chúng ta sẽ điều khiển một máy bơm thông qua một công tắc điện tử, gọi là Relay. Các mục tiêu cụ thể của bài hướng dẫn này như sau:
• Làm quen với cảm biến độ ẩm đất và máy bơm.
• Kết nối được mạch điện của hệ thống máy bơm.
• Lấy được dữ liệu từ cảm biến và xuất tín hiệu ra máy bơm nước.
• Xây dựng được ứng dụng “Vườn rau thông minh”.
• Sử dụng được chương trình cũ và tích hợp chức năng mới.
Một lần nữa, chương trình ở bài này sẽ được phát triển thêm từ bài trước, cùng với 2 thiết bị phần cứng được tích hợp thêm vào mạch mở rộng.