1. Chức năng của đồng hồ thông minh
Trong bài học này, chúng ta sẽ dùng mạch MicroBit để mô phỏng một đồng hồ thông minh. Hãy tưởng tượng rằng bạn có một dây đeo mạch MicroBit vào tay và dùng nó như một chiếc đồng hồ, như minh họa ở Hình 1. Ngoài chức năng hiển thị giờ hiện tại, chúng ta còn có thể xem thêm các thông tin khác như nhiệt độ, cường độ ánh sáng hay thậm chí là la bàn.
Hình 1: Đồng hồ thông minh với MicroBit
Trong bài hướng dẫn này, chúng ta sẽ hiện thực các chức năng như sau:
- Để tiết kiệm năng lượng, bình thường đồng hồ không hiển thị gì ra màn hình
- Khi người dùng muốn xem giờ, chỉ cần lắc tay, thông tin giờ phút giây sẽ được hiện ra
- Khi người dùng nhấn nút A, thông tin về nhiệt độ hiện tại sẽ được hiển thị ra màn hình
- Khi người dùng nhấn nút B, thông tin về cường độ ánh sáng sẽ được hiện ra
- Tất cả các thông tin hiển thị ra chỉ tồn tại trong 5 giây, sau đó màn hình sẽ tắt để tiết kiệm pin
2. Nguyên lý thực thi chương trình trên MicroBit
Việc nắm vững nguyên lý thực thi chương trình trên MicroBit là rất quan trọng để thực hiện các dự án với độ phức tạp ngày càng cao. Khác với các ngôn ngữ lập trình truyền thống như Pascal hoặc thậm chí là Scratch, chương trình trên MicroBit sẽ thực thi các câu lệnh trong khối on start trước, và sau đó lặp đi lặp lại ở khối forever. Trong khi đó, các ngôn ngữ lập trình khác, đa số các câu lệnh được thực thi theo thứ tự từ trên xuống dưới cho đến câu lệnh cuối cùng.
Điểm khác biệt thứ 2, một khác biệt khá lớn giữa ngôn ngữ lập trình trên MicroBit và các ngôn ngữ lập trình trên máy tính, là các chương trình hiện thực trong các sự kiện (ví dụ: sự kiện nhấn nút A, nhấn nút B hay lắc nhẹ mạch MicroBit). Khi một sự kiện xảy ra, việc thực thi lệnh trong khối forever sẽ tạm dừng lại, để cho chương trình bên trong khối lệnh được thực thi. Sau đó, MicroBit sẽ quay lại và tiếp tục thực hiện các câu lệnh được lặp đi lặp lại trong khối forever.
Hình 2 minh họa nguyên lý thực thi chương trình trên MicroBit. Bình thường, chương trình sẽ thực hiện hết các câu lệnh trong khối on start, sau đó chuyển sau khối forever và lặp đi lặp lại các câu lệnh trong khối này. Tuy nhiên, khi có 1 sự kiện nào đó xảy ra, việc thực thi chương trình trong forever sẽ tạm ngưng, và bắt đầu lại khi các câu lệnh trong khối sự kiện được thực thi hết.
Hình 2: Nguyên lý thực thi chương trình trên MicroBit
3. Hiện thực chức năng của đồng hồ
a. Đếm giờ của đồng hồ
Đầu tiên, chúng ta hiện thực chức năng cơ bản của một đồng hồ điện tử, là tự động cập nhật sau mỗi giây. Rõ ràng, việc này sẽ được thực hiện lặp đi lặp lại, do đó chúng ta sẽ hiện thực chức năng này trong khối lệnh forever.
Trước tiên, chúng ta cần khai báo 3 biến số là second, minute và hour, để lưu giữ thông tin về giây, phút và giờ. Để làm việc này, chúng ta vào mục Variable, chọn Make a Variable, đặt tên cho biến số và nhấn OK, như minh họa ở Hình 3.
Hình 3: Tạo một biến trên MicroBit
Chúng ta tiếp tục lại thao tác này cho 2 biến còn lại, là minute và hour. Cuối cùng, chúng ta có thêm các khối lệnh mới và các biến số mới vừa được tạo ra như Hình 4.
Hình 4: Chương trình sau khi tạo ra 3 biến số
Ở đầu chương trình, trong khối lệnh on start, chúng ta có thể chỉnh giá trị của 3 biến số này gần giống với giờ hiện tại của chúng ta. Ví dụ như hiện tại là 9 giờ, 10 phút và 30 giây, chúng ta sẽ hiện thực như sau:
Hình 5: Chỉnh trạng thái cho đồng hồ gần với giờ hiện tại
Tiếp theo trong phần forever, chúng ta sẽ cho giây (biến second) tăng lên 1 đơn vị sau mỗi giây (dùng câu lệnh delay). Tuy nhiên sau đó, chúng ta phải kiểm tra biến second này, nếu nó là 60, chúng ta cho nó về 0 và tăng phút (biến minute) lên một đơn vị, đúng theo nguyên tắc của đồng hồ. Chương trình gợi ý cho chúng ta như sau:
Hình 6: Thay đổi giây, và cập nhật phút khi đã hết 60 giây
Bài tập: Giáo viên cho học sinh tham khảo và hiện thực lại chương trình trên. Học sinh lưu ý vào màu của các câu lệnh để tìm kiếm các câu lệnh trong danh mục có màu tương ứng.
Bài tập: Giáo viên cho học sinh hiện thực tiếp chức năng tiếp theo, là tăng giờ mỗi 60 phút. Đáp án gợi ý sẽ như sau:
Hình 7: Tăng giờ mỗi 60 phút
Bài tập:
Giáo viên cho học sinh phân biệt sự khác nhau giữa 2 chương trình sau đây:
Hình 8: Phân biệt sự khác nhau giữa 2 chương trình
Đáp án: Về chức năng, 2 chương trình này hoàn toàn giống nhau. Tuy nhiên chương trình bên phải sẽ thực hiện tối ưu hơn, do việc kiểm tra phút để tăng giờ chỉ được thực hiện mỗi 60 giây 1 lần. Ở chương trình bên trái, việc kiểm tra phút được thực hiện mỗi giây một lần. Tuy nhiên, chương trình bên trái sẽ dễ đọc hiểu hơn là bên phải.
Bài tập: Học sinh tiếp tục hiện thực tương tự cho giờ, khi đủ 24 giờ, thì cho giờ về lại 0. Đáp án cho bài tập này sẽ như sau:
Hình 9: Chương trình cập nhật giờ hoàn chỉnh
b. Hiển thị giờ ra màn hình
Để hiển thị thông tin giờ ra màn hình, chúng ta sẽ dùng câu lệnh ghép chuỗi trong mục Advanced, Text và sau đó chọn join. Câu lệnh này cho phép chúng ta ghép nhiều chuỗi hiển thị lại với nhau. Để thêm thông tin ghép nối, chúng ta sẽ nhấn vào dấu + ở cuối câu lệnh join.
Hình 10: Câu lệnh join trong mục Advance/ Text
Vì đồng hồ chỉ hiển thị giờ khi chúng ta lắc tay, chương trình hiển thị giờ sẽ được hiện thực trong hàm on shake, như sau:
Chúng ta sẽ ghép thông tin giờ phút giây, cách nhau bằng dấu “:” để hiển thị ra màn hình. Khi muốn thêm 1 ô để ghép, chúng ta sẽ nhấn vào dấu + ở cuối lệnh join. Vì chuỗi thông tin này rất dài, nên khi hiển thị xong, đồng hồ sẽ tự động tắt, chúng ta không cần phải chủ động tắt màn hình.
Hình 11: Hiển thị đồng hồ ra màn hình khi lắc tay
c. Hiển thị nhiệt độ
Chương trình để hiển thị nhiệt độ sẽ được hiện thực khi nhấn vào nút A, như sau:
Hình 12: Hiển thị nhiệt độ khi nhấn nút A
Cần lưu ý là để có hiệu ứng chờ 5 giây, chúng ta bắt buộc phải nhập tay vào số 5000. Trong tùy chọn của câu lệnh pause, chúng ta chỉ có hiệu ứng đợi tối đa là 2 giây. Câu lệnh clear screen có thể được tìm thấy trong mục more, thuộc nhóm Basics.
d. Hiển thị cường độ ánh sáng
Hoàn toàn tương tự như chương trình ở bên trên, chúng ta hiện thực chương trình cho nút B như sau:
Hình 13: Hiển thị cường độ ánh sáng khi nhấn nút B
Cuối cùng, chương trình hoàn thiện của chúng ta sẽ như sau:
Hình 14: Chương trình đồng hồ thông minh hoàn thiện
4. Các hướng phát triển
Chúng ta có thể phát triển chương trình này như một chiếc đồng hồ Casio điện tử. Với sức mạnh và sự hỗ trợ của MicroBit, nó hoàn toàn có thể làm được các chức năng như một đồng hồ Casio như chỉnh lại giờ cho đúng, hẹn giờ, bấm giờ thể thao. Trong hướng dẫn này, chúng tôi không trình bày các câu lệnh để hiện thực các chức năng trên. Chúc mọi người may mắn trong việc hiện thực nó!!