Kiến thức cốt lõi
Sau sơ đồ khối, nhóm cần **sơ đồ kết nối đúng linh kiện**, gồm nguồn, GND chung, điện trở hạn dòng LED và tải buzzer theo khả năng chân ra. SGK minh họa Uno R3 chân 8/9/10 và điện trở LED 330 Ω, nhưng **logic mẫu có chỗ không khớp**: lời giải thích gán cửa mở là mức cao, còn mã kiểm `!digitalRead(doorPin)` tức mức thấp; sơ đồ/mã dùng `INPUT` cần đường kéo mức xác định khi tiếp điểm hở. Vì vậy không chép nguyên để nạp. Trước lập trình, giáo viên xác nhận loại công tắc và cách nối; đo/bảo đảm **đóng → mức nào, mở → mức nào**, rồi viết điều kiện theo bảng ấy. Với một lựa chọn minh họa: công tắc nối chân 8 xuống GND, `INPUT_PULLUP`; tiếp điểm đóng cho LOW, hở cho HIGH. Lựa chọn này chỉ đúng nếu cơ cấu công tắc gắn với cửa tạo ra quan hệ mong muốn. Không tự đấu tải trực tiếp khi vượt dòng chân I/O.
Ví dụ
Bảng thử của phương án `INPUT_PULLUP` và tiếp điểm đóng lúc cửa đóng: cửa đóng → chân 8 LOW → LED/còi tắt; cửa mở làm tiếp điểm hở → HIGH → LED/còi báo. Nếu công tắc thực có logic ngược, sửa cả bảng và điều kiện chương trình, không chỉ đảo nhãn trong báo cáo.
Bài luyện
Với INPUT_PULLUP và công tắc kéo xuống GND, khi tiếp điểm hở thì chân vào thường là?
Đúng. Kéo lên giữ mức xác định khi hở.
LOW khi tiếp điểm nối GND.
Nguồn này không tạo âm 5 V.
Chế độ đầu vào không là PWM.
Lời giải
Kéo lên giữ mức xác định khi hở.
Bài luyện
Vì sao cần bảng trạng thái trước mã cảnh báo?
Bảng không thay linh kiện.
Loại công tắc khác nhau.
Nguồn vẫn phải kiểm.
Đúng. Mức điện phụ thuộc cấu hình tiếp điểm/mạch.
Lời giải
Mức điện phụ thuộc cấu hình tiếp điểm/mạch.
Bài luyện
SGK ghi cửa mở mức cao nhưng mã kiểm !digitalRead. Nên làm gì?
Thiếu đầu vào không giải quyết lỗi.
Điện lưới nguy hiểm và không cần.
Đúng. Phát biểu và mã đang trái logic trong cấu hình ấy.
HIGH và !HIGH không giống nhau.
Lời giải
Phát biểu và mã đang trái logic trong cấu hình ấy.
Đang học