Trong bài học này, bạn sẽ tìm hiểu về tín hiệu Digital Input và học cách điều khiển đèn LED bằng nút nhấn, thay vì tự động bật tắt LED đơn giản như trong bài học trước.
Ngược với tín hiệu Digital Output là tín hiệu Digital Input. Bạn sẽ dùng Digital Input khi chân IO nối với các module xuất tín hiệu HIGH (3.3V) hoặc LOW (0V), ví dụ như nút nhấn.
Để biết được tín hiệu xuất ra là HIGH hay LOW khi nút được nhấn, chúng ta cần tìm hiểu thiết kế của module nút nhấn mà chúng ta đang sử dụng. Sơ đồ thiết kế của module nút nhấn như sau:
Sơ đồ trạng thái nút chưa nhấn
Ta thấy, chân tín hiệu đầu ra của nút nhấn được nối với input pin của xController (đường màu xanh lá).
Ở trạng thái bình thường chưa được nhấn, chân tín hiệu này được nối với nguồn điện dương 3.3V thông qua một điện trở R1, khi đó, tín hiệu này có giá trị là HIGH (3.3V).
Khi nút được nhấn, mạch đóng lại, chân tín hiệu này được nối thẳng với nguồn điện âm (GND, Ground) thay vì 3.3V (do điện trở R1 cản trở) nên tín hiệu sẽ có giá trị là LOW (0V).
Sơ đồ trạng thái nút được nhấn
Kiểu thiết kế như trên còn được gọi là Input Pullup (điện trở kéo lên 3.3V). Một kiểu thiết kế khác ngược lại là Input Pulldown, có sơ đồ như sau:
Sơ đồ thiết kế kiểu Input Pulldown
Với thiết kế này, chân IO tín hiệu mặc định khi chưa nhấn nút sẽ được nối với GND (đường màu xanh lá) và có giá trị ở mức LOW (0V). Khi nút được nhấn, chân IO sẽ được nối thẳng lên 3.3V và có giá trị là HIGH. Khi làm việc với các module, bạn cần hiểu rõ cách thiết kế của chúng, từ đó chọn cách xử lý đúng tín hiệu trả về.
Ngoài ra, chúng ta sẽ sử dụng nút nhấn có sẵn trên xController.
while True: if (btn_onboard.is_pressed()): pin11.write_digital(1) else: pin11.write_digital(0)
Sau khi chạy chương trình, bạn nhấn nút trên board thì đèn LED sẽ sáng và tắt đi khi thả nút nhấn ra.
Trong các bài trước, chúng ta đã tìm hiểu về cấu trúc tuần tự và cấu trúc vòng lặp trong tổng số 3 cấu trúc cơ bản của một chương trình máy tính. Trong bài này chúng ta tìm hiểu về cấu trúc cuối cùng, đó là Điều kiện.
Trong cấu trúc điều kiện, một điều kiện sẽ được kiểm tra xem có đúng hay sai và từ đó sẽ chạy khối lệnh tương ứng với mỗi trường hợp. Ví dụ, sau khi kiểm tra điều kiện về thời tiết, chúng ta sẽ quyết định mặc áo mưa nếu trời đang mưa và ngược lại.
Trong Python, bạn sẽ dùng câu lệnh “if … else” cho cấu trúc điều kiện này. Có 3 loại như sau:
if expression: code block
Đây là câu lệnh điều kiện đơn giản nhất. Nếu điều kiện expression là đúng thì khối lệnh code block sẽ được chạy. Nếu sai, khối lệnh sẽ không được chạy.
if expression: code block 1 else: code block 2
Nếu điều kiện expression là đúng thì khối lệnh code block 1 sẽ được chạy. Nếu sai, khối lệnh code block 2 sẽ được chạy.
if expression 1: code block 1 elif expression 2: code block 2 elif expression 2: code block 2 ... # other elif else: code block n
Cấu trúc if này sẽ kiểm tra từng điều kiện từ trên xuống dưới, nếu điều kiện nào đúng thì sẽ chạy khối lệnh bên trong điều kiện đó và thoát ra, không điều kiện nào khác sẽ được kiểm tra thêm. Nếu tất cả các điều kiện đều sai, khối lệnh code block n trong phần else sẽ được chạy.
Để xử lý tín hiệu đọc được, chương trình trên dùng câu lệnh kiểm tra điều kiện “if…else”.
if btn_onboard.is_pressed(): pin11.write_digital(1) else: pin11.write_digital(0)
Trong câu lệnh if, điều kiện cần kiểm tra là nút trên board có được nhấn hay không. Trong firmware MicroPython của xController có sẵn một đối tượng để làm việc với nút nhấn trên board tên là btn_onboard.
Hàm btn_onboard.is_pressed() trả về kết quả như sau:
Theo đó, nếu nút được nhấn, kết quả trả về là True, câu lệnh bật đèn sẽ được chạy và đèn LED sẽ được bật và ngược lại, đèn sẽ bị tắt.