Bỏ qua tới nội dung
LSLab

Arduino chạy setup và loop như thế nào?

  • Cơ bản
  • Bài viết
  • Từ 13 tuổi
  • 4 phút đọc
Bo mạch phát triển vi điều khiển cắm cáp USB, đèn trạng thái màu hổ phách đang sáng.

Sketch Arduino thường định nghĩa hai hàm: setup() chạy một lần khi khởi động, còn loop() lặp lại khi chương trình hoạt động. Sau khi bo được cấp nguồn hoặc khởi động lại, setup() chạy trước. Hiểu hai hàm này là bước đầu để đọc sketch Arduino.

Mục lục
Máy tính nạp sketch vào bo, bo chạy rồi phát tín hiệu.
  • Máy tính có Arduino IDE
  • Bo Arduino
  • Tín hiệu ra

Bạn sẽ học được gì

  • Nêu được Arduino là gì và nạp mã bằng cách nào.
  • Mô tả được thứ tự chạy của setup() và loop().
  • Giải thích được vì sao loop() không có khoảng nghỉ.

Cần biết trước

Nên biết GPIO là gì.

Arduino là gì?

Arduino là nền tảng mã nguồn mở dùng để xây dựng các dự án điện tử. Arduino IDE dùng một phiên bản đơn giản của C++, nên dễ học lập trình hơn.

Kết nối USB cũng là cách để nạp mã lên bo Arduino. Bo Arduino UNO chứa mọi thứ cần thiết để hỗ trợ vi điều khiển; chỉ cần nối với máy tính bằng cáp USB.

Sketch ví dụ có setup và loop; thứ tự đặt trong mã không quyết định thứ tự chạy.
  • Sketch
  • Hàm setup
  • Hàm loop

setup() và loop() chạy theo thứ tự nào?

Một sketch mới trong hướng dẫn này được tạo với hai hàm setup() và loop(). Hàm setup() chạy một lần khi sketch chạy, còn hàm loop() lặp lại liên tục.

Sau khi bo được cấp nguồn, setup() chạy trước, rồi đến loop(). Nếu xóa cả hai để sketch trống hoàn toàn thì nó không qua được bước kiểm tra.

Setup chạy một lần, loop quay lại chính nó mãi.
  • Cấp nguồn
  • setup chạy một lần
  • loop chạy
  • Quay lại loop

Vì sao loop() không có khoảng nghỉ?

Không có độ trễ nào được tự động đặt trong loop. Khi mã trong loop() chạy xong, nó bắt đầu lại ngay lập tức.

Muốn chạy chậm lại, có thể thêm độ trễ bằng hàm delay(). Ví dụ sketch đầu tiên của Arduino IDE là Blink.

Ví dụ vòng lặp đơn giản: thêm delay tạo khoảng chờ; các thao tác khác cũng có thể mất thời gian.
  • Loop không delay
  • Loop có delay
  • Khoảng chờ

Ví dụ trong đời sống

Hãy cùng người lớn nghĩ về một đèn báo nhấp nháy. Phần chuẩn bị chỉ cần làm một lần ở setup(). Việc bật, tắt đèn lặp đi lặp lại nằm trong loop().

Hiểu lầm thường gặp

setup() chạy lặp lại cùng loop(). setup() chạy một lần, còn loop() mới lặp liên tục.

loop() tự chờ giữa hai vòng. Không có độ trễ nào được tự động đặt trong loop; có thể dùng delay() hoặc một cách định thời khác để giãn các lần thực hiện.

Câu hỏi thường gặp

setup() và loop() khác nhau thế nào?

setup() chạy một lần khi sketch chạy, còn loop() lặp lại liên tục.

loop() có thể để trống phần thân không?

Có. Hàm vẫn có thể tồn tại dù bên trong hai dấu ngoặc nhọn không có câu lệnh nào. Nếu xóa cả setup() và loop(), sketch trống sẽ không qua bước kiểm tra.

Hàm delay() dùng để làm gì?

Để thêm độ trễ và làm chậm vòng loop.

Nạp mã lên Arduino bằng cách nào?

Qua kết nối USB.

Tóm tắt

Thuật ngữ trong bài

Tên tiếng Việt, tên tiếng Anh và nghĩa dùng trong bài. Di chuột, chạm hoặc dùng phím Tab tới từ có gạch chân chấm để xem giải thích ngay khi đọc.

Arduino
Nền tảng mã nguồn mở gồm bo mạch và phần mềm để xây dựng các dự án điện tử.
Sketch
Chương trình viết cho Arduino, gồm hai hàm setup() và loop().
Hàm setupsetup function
Hàm chạy một lần khi sketch bắt đầu, sau khi bo được cấp nguồn.
Hàm looploop function
Hàm chạy lặp lại liên tục sau setup(), bắt đầu lại ngay khi chạy xong.
Arduino IDE
Môi trường lập trình dùng phiên bản đơn giản của C++ để viết và nạp sketch.
Hàm delaydelay function
Hàm thêm một khoảng chờ để làm chậm vòng loop.

Bài này chưa được đánh dấu là đã xem

Thấy nội dung sai hoặc chưa an toàn?

Báo cho quản trị viên qua email. Thư có sẵn tên bài và đường dẫn.

Báo lỗi bài này
  • Cảm biến chất lượng không khí, gateway Wi-Fi hai ăng-ten và máy tính bảng được đặt cùng nhau trên bàn lab.
    Cơ bản

    MQTT chuyển bản tin qua broker như thế nào?

    MQTT là giao thức xuất bản và đăng ký: broker nhận bản tin theo chủ đề rồi chuyển cho bên đã đăng ký; bài nêu chủ đề, ký tự thay thế, ba mức QoS.

    Internet vạn vật (IoT)4 phút đọc
  • Bo mạch vi điều khiển cỡ lớn và module không dây nhỏ được đặt cạnh nhau.
    Khởi động

    Tổng quan: Bo mạch ESP32, Arduino và lựa chọn khác

    Tổng quan bo ESP32, Arduino và cách chọn theo kết nối, điện áp, nguồn và vi điều khiển.

    Internet vạn vật (IoT)4 phút đọc
  • Bộ điều khiển công nghiệp và đồng hồ đo số gắn thanh DIN được nối bằng cáp trên bàn thử nghiệm.
    Cơ bản

    Modbus RTU hỏi và trả lời dữ liệu như thế nào?

    Modbus RTU hoạt động theo kiểu hỏi và đáp giữa master và slave: bài giải thích địa chỉ, mã chức năng, kiểm tra lỗi và khoảng lặng tách khung.

    Internet vạn vật (IoT)4 phút đọc
  • Ba module đo được nối dọc theo cùng một cặp dây xoắn đỏ và đen.
    Cơ bản

    RS-485 truyền tín hiệu vi sai ra sao?

    RS-485 gửi tín hiệu qua hai dây và so sánh hiệu điện áp giữa chúng nên chịu nhiễu tốt, đi xa và cho nhiều thiết bị dùng chung một đường truyền.

    Internet vạn vật (IoT)4 phút đọc
Xem tất cả bài của chủ đề

Nguồn

Các nguồn này viết cho người đọc lớn hơn. Nếu thấy khó, hãy đọc cùng người lớn.