Robot học (Robotics) · Bước 4/8 · 6 phút
Lập trình robot: vòng lặp và máy trạng thái
Bạn tổ chức được code robot để nó phản ứng nhanh mà vẫn dễ đọc.
Vòng lặp điều khiển
Code robot là một vòng lặp: đọc cảm biến, quyết định, đặt lệnh cho động cơ, lặp lại. Một robot nhỏ có thể chạy vòng này 50 đến 100 lần mỗi giây. Vòng lặp càng nhanh và đều, robot càng mượt.
Tránh lệnh chờ chặn chương trình
delay() dừng mọi thứ. Trong lúc chờ, robot không thấy bức tường đang đến gần. Người mới học đâm vào bức tường này, theo đúng nghĩa đen, rất thường xuyên.
Thay vào đó, hãy xem đồng hồ. Trên Arduino, millis() cho biết board đã chạy bao lâu. Chỉ làm một việc khi đã đủ thời gian, và vòng lặp vẫn đọc cảm biến ở giữa các lần đó.
Máy trạng thái
Máy trạng thái (state machine) đặt tên cho các chế độ robot có thể ở, như SEARCHING, FOLLOWING_LINE, AVOIDING và STOPPED. Ở mỗi trạng thái, robot làm một việc đơn giản. Các quy tắc rõ ràng quyết định khi nào chuyển.
Cách này giúp code dễ đọc. Thay vì một mớ câu lệnh if rối rắm, bạn vẽ hành vi của robot thành các vòng tròn và mũi tên, rồi chuyển hình vẽ thành code.
Dùng AI để viết code
Chatbot viết code robot khá ổn, nhưng nó đoán số chân, thư viện và cách nối dây. Hãy thử trong trình mô phỏng trước. Đọc từng dòng. Một số chân sai trên phần cứng thật có thể lái động cơ đâm vào tường hoặc làm chập board.
Thử ngay
Thiết kế một máy trạng thái
- 1.Chọn một hành vi: robot chạy thẳng, lùi lại và rẽ khi có vật gần hơn 15 cm.
- 2.Liệt kê các trạng thái và các sự kiện làm robot chuyển giữa chúng.
- 3.Nhờ chatbot chuyển danh sách đó thành code Arduino dùng millis() và không dùng delay().
- 4.Chạy trong Wokwi, dùng LED thay cho động cơ.
Đây là các trạng thái và cách chuyển trạng thái của robot tôi: [dán vào]. Viết code Arduino dạng máy trạng thái dùng enum và câu lệnh switch. Dùng millis(), không dùng delay(). Giải thích từng lần chuyển trạng thái xảy ra thế nào.