Skeleton Của Mọi Sketch Arduino
Mọi chương trình Arduino (gọi là sketch) đều có cùng một cấu trúc cơ bản:
void setup() {
// Chạy MỘT LẦN khi board khởi động
// Dùng để khởi tạo: cấu hình chân, bắt đầu serial, ...
}
void loop() {
// Chạy LẶP LẠI vô tận sau khi setup() xong
// Đây là "trái tim" của chương trình
}
Đây là điểm khác biệt quan trọng so với lập trình C/C++ thông thường — Arduino không có hàm main() theo nghĩa thông thường. Thư viện runtime của Arduino gọi setup() một lần, sau đó gọi loop() liên tục cho đến khi tắt nguồn.
Ba Hàm Cốt Lõi Trong Bài Này
pinMode(pin, mode)
Cấu hình một chân digital làm đầu vào hoặc đầu ra:
pinMode(13, OUTPUT); // Chân 13 là output
pinMode(2, INPUT); // Chân 2 là input
pinMode(4, INPUT_PULLUP); // Chân 4 là input với điện trở kéo lên nội
| Mode | Ý nghĩa |
|---|---|
OUTPUT | Chân xuất tín hiệu (điều khiển thiết bị ngoài) |
INPUT | Chân đọc tín hiệu (cần điện trở ngoài) |
INPUT_PULLUP | Input với 20–50 kΩ pull-up nội → đơn giản hơn |
digitalWrite(pin, value)
Đặt giá trị cho chân digital OUTPUT:
digitalWrite(13, HIGH); // Xuất 5V ra chân 13
digitalWrite(13, LOW); // Xuất 0V ra chân 13
HIGH = 5V (trên Arduino 5V), LOW = 0V (GND).
delay(ms)
Dừng thực thi chương trình trong ms mili giây:
delay(1000); // Dừng 1 giây
delay(500); // Dừng 0.5 giây
delay(100); // Dừng 0.1 giây
Hạn chế của delay(): Trong khi
delay()chạy, board không làm gì khác được — không đọc cảm biến, không nhận lệnh. Bài sau sẽ giới thiệumillis()để khắc phục điều này.
Kết Nối LED Ngoài
LED tích hợp trên board (pin 13) chỉ để test. Để kết nối LED ngoài, bạn cần:
Linh kiện cần:
- 1 LED màu đỏ/xanh/vàng
- 1 điện trở 220Ω (dải màu: đỏ-đỏ-nâu)
- Breadboard và dây cắm
Tại sao cần điện trở?
LED không tự giới hạn dòng điện — nếu cắm thẳng vào 5V sẽ bị cháy ngay. Điện trở 220Ω giới hạn dòng qua LED:
Dòng = (5V - 2V) / 220Ω ≈ 14 mA ✓ (LED thường cần 5–20 mA)
Sơ đồ kết nối:
Arduino D13 ──[220Ω]──▷|── GND
(LED)
- Chân dài của LED (+, anode) nối vào điện trở → chân D13
- Chân ngắn của LED (-, cathode) nối thẳng vào GND
Code: LED Blink Đầy Đủ
// Khai báo hằng số cho pin LED
const int LED_PIN = 13;
void setup() {
// Cấu hình pin 13 làm output
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH); // Bật LED
delay(1000); // Giữ sáng 1 giây
digitalWrite(LED_PIN, LOW); // Tắt LED
delay(1000); // Giữ tắt 1 giây
}
Best practice: Dùng hằng số (
const int LED_PIN = 13) thay vì số cứng. Khi đổi chân, chỉ sửa một chỗ.
Thử Nghiệm: Pattern LED Nâng Cao
3 Lần Nháy Nhanh, Rồi Dừng
const int LED_PIN = 13;
void blink(int times, int onTime, int offTime) {
for (int i = 0; i < times; i++) {
digitalWrite(LED_PIN, HIGH);
delay(onTime);
digitalWrite(LED_PIN, LOW);
delay(offTime);
}
}
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
blink(3, 150, 150); // 3 lần nháy nhanh
delay(1000); // Dừng 1 giây
}
Nhiều LED Cùng Lúc
const int LEDS[] = {11, 12, 13};
const int NUM_LEDS = 3;
void setup() {
for (int i = 0; i < NUM_LEDS; i++) {
pinMode(LEDS[i], OUTPUT);
}
}
void loop() {
// Chạy đèn từ trái sang phải
for (int i = 0; i < NUM_LEDS; i++) {
digitalWrite(LEDS[i], HIGH);
delay(200);
digitalWrite(LEDS[i], LOW);
}
}
Kết nối 3 LED vào chân D11, D12, D13 (mỗi LED một điện trở 220Ω riêng) — bạn có hiệu ứng “đèn chạy” kinh điển!
Hiểu LED_BUILTIN
Trong sketch Blink ví dụ của Arduino, bạn thấy LED_BUILTIN thay vì số 13. Đây là hằng số được định nghĩa sẵn trong thư viện Arduino:
// Trong hardware/arduino/avr/variants/standard/pins_arduino.h
#define LED_BUILTIN 13
Dùng LEDBUILTIN giúp code tương thích với nhiều board khác nhau (ví dụ trên ESP32, LEDBUILTIN có thể là pin 2).
Tổng Kết
Những khái niệm quan trọng trong bài:
| Khái niệm | Ý nghĩa |
|---|---|
setup() | Chạy một lần khi khởi động — khởi tạo |
loop() | Chạy lặp vô tận — logic chính |
pinMode() | Cấu hình chân INPUT/OUTPUT |
digitalWrite() | Xuất HIGH/LOW ra chân |
delay() | Dừng (ms) — nhưng chặn toàn bộ |
| Điện trở 220Ω | Bảo vệ LED khỏi quá dòng |
Bài tiếp theo: Đọc nút nhấn — chúng ta sẽ học digitalRead() và INPUT_PULLUP để tạo tương tác người dùng. Chuẩn bị thêm một nút nhấn (push button) nhé!


