Một vòng kiểm rõ điều kiện
Giả sử robot có cảm biến siêu âm phía trước và nhiệm vụ là **dừng khi khoảng cách hợp lệ nhỏ hơn 20 cm**, còn lại đi chậm. Mỗi lượt: đọc khoảng cách → kiểm dữ liệu có hợp lệ không → nếu không hợp lệ thì dừng và kiểm cảm biến; nếu `< 20 cm` thì dừng; ngược lại cho hai bánh tiến. Ở đúng `20 cm`, điều kiện “nhỏ hơn 20” sai, nên xe thuộc nhánh đi; nếu muốn dừng cả tại 20 cm phải viết `≤ 20`.
Một lần đọc có thể nhiễu. Trên robot thật cần quan sát nhiều lượt ở hai phía ngưỡng và chọn tốc độ, khoảng cách an toàn phù hợp. Không xem giá trị ngoài vùng đo là khoảng cách chính xác; cách báo lỗi phụ thuộc cảm biến.
Đếm lần gặp vật để đổi hướng
SGK cho ví dụ dùng biến đếm để lần gặp vật thứ nhất xoay trái, lần thứ hai xoay phải, rồi lặp lại. Nếu đặt `lần_gặp = 0`, mỗi **sự kiện gặp vật mới** chọn trái khi biến là 0, chọn phải khi là 1, sau đó đổi `0 ↔ 1`. Cần phân biệt sự kiện mới với nhiều lần đọc liên tiếp cùng một vật: nếu tăng biến ở mỗi vòng khi vật vẫn ở gần, robot có thể đổi hướng liên tục. Chỉ ghi nhận lần mới sau khi vật đã rời vùng phát hiện hoặc robot đã hoàn tất thao tác tránh.
**Nhiệm vụ:** thử hai vật cản mềm ở vị trí khác nhau. **Thiết bị:** robot, cảm biến siêu âm và vùng trống. Nạp chương trình của đúng bộ, chạy tốc độ thấp; ghi các lần đo, lệnh và vị trí xe. **Kết quả cần thấy:** gặp vật thì thực hiện hướng đã đặt, rời vật mới sẵn sàng tính lần tiếp. Nếu xe giật/đổi hướng liên tục, kiểm biến đếm, điều kiện thoát vật và dữ liệu cảm biến.
Bài luyện
Chương trình dừng khi khoảng cách hợp lệ < 20 cm. Số đo đúng 20 cm thuộc nhánh nào?
Số hợp lệ 20 không tự là lỗi.
Điều kiện không điều khiển servo.
20 không nhỏ hơn 20.
Dấu < không bao gồm bằng.
Lời giải
Với điều kiện < 20, giá trị đúng 20 cho kết quả sai. Nếu chương trình có nhánh ngược lại là đi thì chọn đi tiếp.
Bài luyện
Một vật còn đứng trước cảm biến qua năm lượt đọc. Muốn biến đếm chỉ tăng một lần cho vật đó, cần làm gì?
Cách này sẽ đếm một vật nhiều lần.
Biến không nhớ được lượt gặp.
Không còn căn cứ phát hiện vật.
Tách sự kiện mới khỏi các lượt đọc liên tiếp.
Lời giải
Vòng lặp có thể đọc nhiều lần cùng một vật. Biến đếm sự kiện chỉ nên đổi khi chuyển từ trạng thái không gặp sang gặp, rồi chờ trạng thái ấy kết thúc.
Đang học